Para mim a idéia acima parece se confrontar com o princípio OO de “colocar dados e operações sobre os mesmos na mesma classse”, ou seja, de criar objetos inteligentes o que pelo o que entendi tornaria seu uso mais intuitivo. A idéia acima talvez pareça tender para criar beans burros e classes estáticas, soando meio estruturado (meu entendimento atual é que nesse caso isso não se aplica). Estou meio confunso e gostaria da opinião de vós outros.
Meu pensamento atual a respeito é essa visão “banco-de-dática” onde eu simplesmente crio beans burros (ou cuja inteligência não gere acoplamento) que são tipo “wrappers” das tabelas do banco, como Micro, Software, Manutencao, Fabricante etc., apenas (ou basicamente) para guardar informações e representar as entidades do banco. Então em cima disso, separadamente eu crio as classes de lógica, como GerenciadorMicros, sei lá, que realizarão operações com as “classes de dados”. Além de não achar que, nesse caso, estou contrariando o princípio OO citado acima, o principal benefício dessa estratégia pra mim é diminuir o acoplamento do sistema. Sendo mais gerérico, para decidir se “separo os dados da lógica” ou não, eu uso as seguintes observações:
- Os “dados” representam uma entidade informativa fortemente caracterizada (caso dos “wrappers” de tabelas), ou seja, essa entidade existe por si só, independentemente de lógicas que lhe sejam aplicadas:
Neste caso vou modelá-los como “classes de dados” *, e poderão existir N lógicas que posso aplicar sobre estas classes, compartilhando-as.
- Os dados representam informações de estado ou suporte a uma classe de negócios (não especificamente de aplicações de banco de dados), ou seja, elas só têm sentido se associadas a uma determinada lógica, e não como representantes de uma entidade de informação existente por si só:
Neste caso não vou criar uma classe separada com os dados, vou colocá-los juntos com a classe de lógica, pois os dados são uma característica, uma propriedade da classe.
O que acham?
[size=10]* Entrando no assunto deste tópico, essas “classes de dados” é pelo o que entendi o que muitos confundem com DTOs, sendo que não acharia VO uma classificação ruim apesar de desnecessária, pois acho “Cliente” melhor que “ClienteVO” (não sei a diferença entre DTO e VO, só ouço que são praticamente iguais). Certo?[/size]