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?
fonte
Respostas:
Você está descrevendo uma plataforma interna.
O problema com plataformas internas é que você reinventa todos os mecanismos de uma plataforma ou tecnologia (neste caso, um banco de dados relacional) que foram aprimorados e aperfeiçoados ao longo de décadas de evolução e esforço, mas reinventando-o mal. Você está ignorando todas as otimizações disponíveis para aqueles que escolhem um design mais convencional e trocando simplicidade e elegância inicial por complexidade e dificuldades futuras.
Dito isto, se o produto final deste processo é reais mesas e verdadeira aulas de modelagem reais objetos de domínio de negócio, não vejo muito mal nesta abordagem, além da imaturidade das ferramentas. O Stack Exchange realmente usa seu próprio ORM caseiro e isso parece ter funcionado para eles. Então, eu sei que esses tipos de abordagens "caseiras" podem funcionar.
Observe que a maioria dos ORM que adotam a abordagem "tabela em primeiro lugar" simplesmente analisa a estrutura da tabela no banco de dados para criar as classes. As tabelas "table" e "row" que seu amigo criou são meramente metadados que já existem nas tabelas do sistema dos sistemas de banco de dados relacionais mais modernos.
Leituras adicionais
O projeto "Vision", um conto de advertência sobre o efeito da plataforma interna
(você pode pular o preâmbulo e começar a ler na subposição "Introducing Vision")
fonte