Cenário:
- Pilha: Java, Spring, Hibernação.
- Modelo: Aplicativo Cliente-Servidor.
- Padrão: Model-View-Controller (MVC).
As classes da camada de serviço têm três comportamentos:
Alguns serviços têm a regra de negócios dentro dos métodos e delegam a persistência ao aplicativo. Gostar:
EntityManager.save (entidade);
Alguns serviços simplesmente chamam uma função de banco de dados (passando parâmetros)
CallableStatement cls = con.prepareCall ("{chamar databaseFunction (args)}");
Alguns serviços têm métodos com ambos os comportamentos.
Minhas perguntas:
- Existe algum problema em ter os serviços de aplicativos chamando diretamente as funções do banco de dados? Isso não é considerado uma prática ruim? O que seria um modelo de arquitetura aplicável a um projeto como este?
- Existe algum problema em ter o comportamento misturado no mesmo serviço? Tais como transações e consistência?
- No caso de manutenção, esse encapsulamento torna obscuro para o desenvolvedor que ele também deve alterar as funções no banco de dados? Como evitar isso?
- Esse cenário ocorre em outros aplicativos ao redor do mundo ou foi apenas um erro de arquitetura?