Olá Philip, esse tópico teria que virar reliquia em algum museu, poxa! rsrsrs, nunca vi um nivel de discussão ser tão profundo, Entretanto queria aproveitar e erguer novamente o tópico.
Trabalhei com dotnet uns três anos, e algumas práticas de desenvolvimento me inspirei na comunidade java, agora pois tenho quase dois anos que estou trabalhando com a plataforma JAVA, bom chega de conversa e vamos ao assunto. Estive conversanto com meu professor acerca da arquitetura de um projeto que estamos trabalhando um sistema de estoques, segue abaixo as ferramentas tecnologicas, abordagens, padrões..e etc:
PLATAFORMA:
JAVA
LINGUAGEM
JAVA
PARADIGMAS
O.O
MVC
IDE
ECLIPSE
PLUGIN FOR ECLIPSE
JBOSS TOOLS
SGBD:
MYSQL in DEVELOPMENT, POSTGRES in PRODUCTION.
framework’s de base e de extensão
JSF SPECIFICATION SUN (RI) - MORRAJA PROJECT,
RICHFACES EXTENSION
PRMEFACES EXTENSION
METODOLOGIA DE DESENVOLVIMENTO EM EQUIPES
XP+SCRUM
SEGUE ABAIXO A ARQUITETURA:
VIEW-> paginas jsp (não to usando facelets)
CONTROLLER -> classes de controle responsaveis pelo roteamento (muitos codifica regras de negocios nessa camada!)
MODEL-> classes de modelo de dados (os famosos JAVABEAN)
BUSINESS -> classes e interfaces de negocios.
DAO -> classes e interfaces de acesso ao SGBD
DAO.CONNECTION -> classes e interfaces responsaveis em entregar uma conexao funcional para o DAO, nessa camada temos um pool implementado manual, embora os servidores de APP façam isso.
Com base nisso, eu como já tinha estudado bastante sobre padrões, conceitos, abordagens, percebi que essa arquitetura parece uam receita de bolo, bastante difundida em "distributed Applications" com uso das ENTERPRISE JAVA BEANS. Poxa, então vem a pergunta, eu SEBASTIAO FIDENCIO, desenvolvedor, dependendo da situação e do cenario vou usar o PARADIGMA O.O, porque me da possibilidade reuso, relacionar melhor o problema com a solução por meio de abstração, logo é mais fácil abstrair algo que denota o mundo real à artefatos que não fazem menor sentido no segmento de negocio e sim com principio tecnologicos, para construir sistemas aproveitando tudo que é de bom na orientação a objetos, e o que nosssos inlustres…professores ensinam, é modelar sistemas onde minhas classes de dominio é composta por atributos e metodos, e como na prática aplico a arquitetura mencionada anteriormente? Como a maioria dos desenvolvedores tendenciaram a tal prática?
muitos dizem: !ahh mais o framework JSF funciona dessa forma, portanto o meu modelo de classes tem que se adequar ao framework, onde crio minhas classes de modelo com getters e setters, um construtor vazio…e atributos, para preservar o encapsulamento, poxa mais cadê meus métodos de negocio? está separado? O.O não veio para abstrair a complexidade que tinha de modelar sistemas de forma estruturada, onde a mesma em todas fases e ciclos detona o domino do problema? Ou teriamos um corpo sem vida?
O que vejo é que criou se uma nova abordagem chamada DDD. Domain Driven Design, Desenvolvimento dirigido ao ao dominio, é complexo entender isso? eu acho que não. Tudo se resume na prostituição que os padrões J2EE causaram.,. TO’s, V’os… tudo isso pra atender uma especificação. e na verdade o uso dessas classes de dados separadas das classes de negocio eram aplicadas em aplicações N-TIER, porque tendenciou em usar isso até em aplicações N-Layer?
Acho que DDD é uma forma que o Evans encontrou de Mostrar para os desenvolvedores que Orientação Objetos não foi inspirada em padrões J2EE, e que as EJB’s que tentaram se inspirar em O.O e acabou fazendo com que novos analistas e desenvolvedores que surgem a cada dia, aprendem já de forma errada o conceito de O.O. acho que um new(); ou usar um pattern Delegate não denota O.O, mas sim como os objetos usando a inteligencia que está encapsulada em cada um deles interage para realizar os casos de uso.
Se eu seguir a mesma arquitetura que estou seguindo para um projeto em Ruby on Rails ? E eu duvido se não já tem gente por ai,.levando esses costumes mal aprendidos para outras plataformas, eu vim do .NET e conheço N-sistemas que são desenvolvidos dessa forma.
Essa arquitetura acima está ou não totalmente O.O?
Seria correto eu elimiar essa camada de negocio…que pra mim invalida todo conceito de O.O e colocar minhas regras de negocio junto com meus atributos numa mesma classes? ou seja, eu teria a classe Produto.java, ‘nada de BO, VO, e tal’. e dentro dela ficasse todas regras de negocio, dai sim apartir dela eu chamaria meus DAO’s, se fosse o caso, mas poderiamos ser mais coerente colocando um repositorio como fronteira para a camada de persistencia, e uma facade/service como fronteira em direcao aos meus controles e portanto minhas VIEW’???. funcionaria? seria correto eu setar meus componentes GUI…input direto em cada atributo do modelo, a saber que eu iria chamar um metodo gravar e tal metodo estaria na mesma classe onde setei o atributo do input. Então posso fazer isso? ou irei ferir os principios basicos de um JAVABEAN?
O Modelo fica igual bola de basquete…pra cima e pra baixo…um hora ta na VIEW outra hora está persistido!. Mais parece com uma Entidade do banco de dados que À um objeto que deveria prover serviços para quem o chama.
Imagine o objeto carro sem seus seus comportamentos? Eu não consigo nem imaginar ou abstrair a existencia de um carro com comportamento separado de suas caracteristicas, seria um fantasma? Pelo que sei cada objeto possui identidade unica,e nem precisa o Evans dizer isso. porque é notorio e vem desde o principio.
Dai alguem me disse: Bom faz assim "conforme citado acima a arquitetura" que fica mais organizado, facil manutenção, dai eu disse: Poxa mais e o que o Martim Flower disse acerca do Anemic Domain Model,
então ele disse: !ahhh as ideias do Flower meio confusa, não dá pra confiar.
Att
fidencio