Opnião de arquitetura

Pessoal,

estou fazendo um projeto da faculdade e pretendo utilizar jsf 1.2+richfaces 3.2+spring 2.5+hibernate 3.2.
A atual hierarquia de pacotes que meu projeto se encontra é:

faces
bo
dao
util
exceptions

Para criar os DAO, vou usar os Spring templates e queria usar um factory do spring para fornecer DAO para o BO, para o mesmo cuidar das regrasa de negócio.

Bem, a pergunta é.
O que vocês acham da arquitetura?Ouvi falar de spring-annotations, mas ele caberia usar nesse projeto?
Tenho algumas dúvidas como:

DAO e BO, ainda são padrões utilizados hoje em dia. A idéia de usar o spring dessa maneira, está correta?

Eu acho que não tem nada demais.

Quanto ao BO e DAO, sempre irão existir enquanto houver regras de negócio e persistência de informação no sistema.

Sei lá… já que vai usar hibernate e tal… que tal implementar o conceito de repositório? O que o pessoal acha, não é um conceito mais “novo” do que o DAO? Digo isso porque também gostaria de saber como ficaria uma hierarquia de projeto baseado em repositório…

Desenterrando antigos.

Dê uma olhada nesse aqui do Shoes: http://fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs

Até.

[quote=nbluis]Desenterrando antigos.
Dê uma olhada nesse aqui do Shoes: http://fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs
Até.[/quote]

Mas ele não tem classes VO…

esquece BO VO DTOs… isso é uma herança porca da Core da Sun… da uma olhada nas discussões aki no GUJ sobre DDD Domal-Drive Design e da uma olhada no link de cima.

acho que vc vai gostar das ideais expostas nas post

Mas se for usar nTiers (camadas remotas) teria que ter VOs (ou TOs, como preferir), tudo depende da arquitetura.

[quote=Giulliano][quote=nbluis]Desenterrando antigos.
Dê uma olhada nesse aqui do Shoes: http://fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs
Até.[/quote]

Mas ele não tem classes VO…[/quote]
O que seria um BO sem um VO ?

Dai Sim.
Só muda o nome do Boi. DTO

então vc pode considerar a idéia de Objetos ricos e evitar de delegar tarefas que são de responsabilidade do seu objeto para outro nada a ver com o domínio do seu objeto.
E em vez de chamar seu objeto de domínio de BO pode chamar de POJO o (velho e simple Objeto java)

E como fica a hierarquia do projeto?? Mantém BO, usa uma pasta POJO ou como ficaria ? Alguém tem um projeto “rico” sem VO, DTO, Eticeterou para dar uma sugestão ???

[quote=baudamix]esquece BO VO DTOs… isso é uma herança porca da Core da Sun… da uma olhada nas discussões aki no GUJ sobre DDD Domal-Drive Design e da uma olhada no link de cima.
acho que vc vai gostar das ideais expostas nas post[/quote]

Volto a repetir…um BO sempre vai existir. Desde o inicio do univeros um sistema não existe se não existe uma necessidade (traduza necessidade para regra de negócio)

O artigo é sem dúvida muito bom, só não estou vendo o que isso trem haver com a arquitetura acima. A idéia de criar classes de Dominio sempre refletindo o modelo do negócio de cliente é uma boa prática…porém BO e Dominio dá na mesma.

[quote=Giulliano][quote=baudamix]esquece BO VO DTOs… isso é uma herança porca da Core da Sun… da uma olhada nas discussões aki no GUJ sobre DDD Domal-Drive Design e da uma olhada no link de cima.
acho que vc vai gostar das ideais expostas nas post[/quote]

Volto a repetir…um BO sempre vai existir. Desde o inicio do univeros um sistema não existe se não existe uma necessidade (traduza necessidade para regra de negócio)

O artigo é sem dúvida muito bom, só não estou vendo o que isso trem haver com a arquitetura acima. A idéia de criar classes de Dominio sempre refletindo o modelo do negócio de cliente é uma boa prática…porém BO e Dominio dá na mesma.
[/quote]
Entendo seu ponto de vista.

A unica confusão aqui é que todo mundo entende BOs como aqueles Business Objects que vem acompanhados dos VOs como estruturas de dados e seus getters and setters.
E é isso que a galera está tentando erradicar. :wink:

Até.

Um BO como o artigo diz seria uma classe com o método autenticar e o VO seria uma classe com atributos Login e Senha. O BO recebe um VO.

Um Domínio ou um BO (pensando em Good Citizen) já possui tudo o que for preciso para fazer o login…

Repositorio não é um conceito que substitui DAO!
São objetos com responsabilidades diferentes.

O DAO serve para encapsular a comunicação com o JDBC e/ou outras API de persistencia.

O Reposiorio serve para centralizar as pesquisas de um forma OO. Ele usa o DAO para executar essas pesquisas.

Eu pensei em BO e Model (VO,DTO) porque é um sistema pequeno, basicamente com cruds apenas a parte pesada será feita via web services.
Mas, queria usar spring e hibernate para aprender a usar e da melhor maneira,por isso o post.
Entendi que não devemos usar BO, mas como fariamos chamadas a nossa camada de persistência?
Diretamente do Faces?
Usando EJB, teriamos o façade, mas sem EJB o que utilizariamos?

[quote=nbluis][quote=Giulliano]
O que seria um BO sem um VO ?[/quote]
[/quote]

Seria um Service?

Estamos quase lá.

Sim, isso é um BO.
PS: Existe um design pattern BO que descreve exatamente isso

Nesse caso é um objeto do domínio, não um BO.

A idéia é essa mesmo, o caso aqui é só o nome dos bois.

Exception pertencem nos pacotes onde elas são relevantes.
Por exemplo, exeções de dao ficam no mesmo pacote do dao.

use domain em vez de bo e persitence em vez de dao.

faces
domain
persistence
util

Bem sempre vão existe Domínio do modelo do negócio o que eu quis dizer é só para evitar separa regras de negocio que um objeto pode ter com ele exemplo criar um BO para autenticar um usuario ou para manipular objeto onde esse objeto poderia fazer isso por ele msm… isso seria msm coisa de ter um VO/BO…
Mas se a ideia do seu BO for um cara diferente do artigo tudo bem, mas o nome BO está mto ligado a VO/BO/DTO…