Acabei de começar um novo emprego como desenvolvedor de banco de dados para uma empresa de médio e pequeno porte baseada na tecnologia da Microsoft. Percebi desde cedo o quanto as práticas se desviam daquilo que aprendi na escola em relação às melhores práticas, padrões de design, testes e gerenciamento de projetos.
O que mais me incomoda é como nosso principal desenvolvedor de banco de dados (doravante chamado "John") mantém o esquema do modelo no banco de dados! Fazemos isso tendo 3 tabelas "mágicas"; um para esquemas de banco de dados, um para tabelas e um para colunas.
Inserir um registro na tabela " Tabelas " gera (por meio de um gatilho de banco de dados), a tabela correspondente real. Inserir uma linha na tabela " Linhas " atualiza a tabela referenciada com essa linha. Estes, por sua vez, são lidos pelo seu programa caseiro de C # para gerar modelos C #, que são usados pelos desenvolvedores de front-end para controladores e versões externas.
Além disso, a maior parte do desenvolvimento é feita de acordo com a estrutura do ASP.NET MVC .
Vejo algumas falhas nessa abordagem:
- Precisamos que ele mantenha o ORM, e ele raramente tem tempo para fazê-lo (a segurança no emprego é boa!)
- Os gatilhos para as tabelas "Tabelas" e "Linhas" são defeituosos. Eles não suportam atualizações de tabela, nem restrições de verificação ou mais recursos "avançados". Embora possamos certamente melhorá-los, ainda não tenho certeza se esse é o caminho a seguir.
- Manter a lógica programática no banco de dados parece estranho e restritivo (embora seja possível estender seus modelos por meio de C #).
- Seu gerador de modelo C # deve ser executado manualmente por uma das três pessoas (dentre as quais eu sou uma) e ainda não está maduro o suficiente para ser incluído em um processo de compilação automatizado.
Várias pessoas sugeriram a criação de um produto verdadeiro e testado, como o Entity Framework , mas ele descarta, afirmando que manter a lógica de negócios na camada de código é adequada apenas para aplicativos de pequena escala e projetos de autoinicialização para startups.
Este post está levando a algo que pode parecer uma discussão opinativa, mas essa não é minha intenção. Eu só quero alguns esclarecimentos sobre a nossa abordagem arquitetônica.
Manter os modelos de domínio no banco de dados pode ser uma solução sustentável para uma empresa em crescimento?