2
respostas

Duvidas de como aplicar SOLID em entidades do Banco de Dados

Bom dia pessoal, estou lendo um livro aq Refatoração - Aperfeiçoando o Projeto de Código Existente, e está falando sobre refatoração claro, e entrou no contexto de aplicação com Banco de Dados, que geralmente é o q mais fazemos...

Aplicação comercial sempre são acopladas ao esquema de banco de dados, e é díficil de manter e refatorar essa parte...

Eu queria entender esse paragrafo:

"Em bancos de dados não orientados a objetos, uma maneira de lidar com este problema é colocar uma camada de software separada entre seu modelo de objetos e seu modelo de banco de dados. Dessa maneira você pode isolar as alterações nos dois diferentes modelos. Quando atualiza um modelo, não precisa atualizar o outro. Você apenas atualiza a camada intermediária"

Tipo vejo em EJBs q sempre tem o POJO (plain old java objects) que é a entidade que mapea no banco com os getters e setters apenas!!!!!

E geralmente nos é ensinado a fazer assim, não colocar regra de negócio na Entity etc...

No paragrafo acima ele cita essa camada intermediária, qual seria ela?

Tipo tenho a classe Aluno que mapeio ela para o banco, e a intermediária seria uma AlunoBO que teria a lógica da aplicação nela, além das AlunoDAO para acessar o BD, AlunoService para fazer alguma lógica menor e chamar a DAO

Como que seria essa arquitetura ai? Como seria essa camada intermediária ? Vejo muita gente explicando SOLID, refatoração, orientação a objeto avançada com exemplos de cálculo de imposto, calculo de salario dos funcionarios, outros calculos, e etc, mas como fica o Modelo, ou seja, a classe que executa o cálculo do salário do funcionário com o design patterns com Strategy por exemplo e a persistência ???

2 respostas

Como seria essa separação em camadas?

Estou até fazendo o curso de SOLID em C# pra ir absorvendo mais os conceitos, nem programo nessa linguagem, apenas Java no backend por hora.

Oi Thiago, tudo bom?

Muito legal levantar essa discussão.

No livro Refatoração do Martin Fowler e Kent Beck, a seguinte citação:

Em bancos de dados não orientados a objetos, uma maneira de lidar com este problema é colocar uma camada de software separada entre seu modelo de objetos e seu modelo de banco de dados.

Repara que aqui estamos relacionando dois paradigmas. O de orientação à objetos e o relacional. Acredito que criar uma camada intermediaria seja parcialmente o que os DAOs/Repositorys fazem. Entretanto, depende muito da implementação.

Repara que se a gente usar um ORM, por exemplo, ele mesmo cuida dessa camada. O framework mapeia seu modelo orientado a objetos e reflete isso no seu banco. Mesmo quando o modelo é atualizado, como, por exemplo, quando adicionamos um atributo a mais na entidade, isso não é necessariamente refletido no banco. A não ser que a gente deixe explicito que aquilo será mapeado também.

Ou seja, nesse caso, onde um ORM faz a conexão com o banco, eu acredito que o DAO seja apenas mais uma camada entre as duas.