Parece razoável pelo que você descreveu, embora o verdadeiro teste venha quando você começar a estendê-lo seriamente.
Eu costumo construir um núcleo de três classes:
- um gerenciador de banco de dados
- um manipulador de objetos genérico
- um gerenciador de coleção genérico
Cada tabela obtém uma derivada da classe de objeto para representar uma linha na tabela e uma classe derivada da coleção que representa parte ou toda a tabela e retornará objetos individuais conforme solicitado. Há também uma função estática de "registro" para configurar todas as informações necessárias (nome da tabela, campos válidos etc.) uma vez para cada classe.
Às vezes, uma classe de coleção também é um objeto para outra tabela. Os objetos genéricos e o mecanismo de registro que escrevi há muito tempo lidam perfeitamente com isso.