| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 11:46:26
|
carol_programadora
Debugger
![[Avatar]](/images/avatar/a727a09bb3214ae41122b455ab5f4cb1.jpg)
Membro desde: 26/09/2008 11:29:03
Mensagens: 72
Offline
|
pcalcado wrote:
carol_programadora wrote:
Nos no meu "UserRepository" eu tenho algo mais relacionado ao negócio, suponhamos que eu precise de encontrar "Todos usuários com salário > 5.000, que tenham Casa própria quitada, que não tenha filhos, seja solteiro etc etc"(considere que seja uma consulta bem complexa) e lá na interface repository eu terei este método "findUsersBemDeVida();
Até ai ok, pois representa algo bem espefíco, mas agora se eu estiver usando este modelo:
UsuarioRepository > UsuarioDecorator(implements UsuarioRepository) > UsuarioDao
Não entendi, por que você está usando essa hierarquia toda? Que tal uma interface RepositorioUsuarios que é implementada por um UsuárioDAO, uma coisa simples que funciona?
carol_programadora wrote:
Onde ficará meu SQL(HQL seja o que for) dessa consulta?
Na implementação do Repositório, o DAO na minha proposta acima.
Entendi, sua proposta é tirar essa hierarquia. OK.
Mas pensei nessa estrutura apenas pelo detalhe abaixo:
Se nas minhas classes de controller, quando eu preciso de alguma consulta direta, sem ter negócio envolvido, inclua aqui dados brutos para popular comboBox, DataTable... etc eu tinha pensando em injetar uma dependência "UsuarioDao" no meu "UsuarioController" e não um UsuarioRepository... achei que fosse errado colocar uma dependência do repository no controller, achei que elas deveriam ser usada APENAS por classes do domínio, por domínio quero dizer as entities e os services, então eu pensei que o controller não deveria ter esse contato.
Então creio que estou errada, utilizando sua sugestão Shoes, minha única opção pra inserir dentro do "UsuarioController" seria minha "UsuarioRepository.
Shoes, explorando-te um pouco mais , vendo o projeto ddd-sample, eu vi algo que me deixou confusa:
La está divido assim:
Application
Domain
Interface
Infrastructure
Dentro de Application e Domain, tem pacote "service", pelo que li e entendi até agora(a não ser que fiz bagunça) minhas regras de negócio devem ficar no Domain > Service, certo?!
Fiquei confusa com essa camada "Application", não tinha visto sobre ela no DDD, e na verdade pouco conheço ainda dela no geral(é tanta coisa pra estudar falta tempo...), mas pesquisando achei essa definição , que menciona na camada de aplicação serviços EJB, JMS... Agora confundi tudo sobre essa application, JMS e EJB não é infra? O certo não seria ela estar na camada de infrastructure, assim o Dao que acessa o banco, eu teria esses serviços de infra? Ou não? Totalmente confusa agora.
Se puder esclarecer o que vai exatamente nessa camada "Application".
Obrigada pela ajuda.
A.L wrote:
Corrija se eu estiver errado, mas no projeto exemplo do site oficial (dddsample) , existe um exemplo dessa situaçao, onde a interface do repositorio fica na camada de domínio, e a implementação, no caso em Hibernate, fica na camada de infra-estrutura/persistencia.
Pois é, olhando esse projeto me veio algumas dúvidas a mais.
This message was edited 1 time. Last update was at 30/12/2009 11:47:35
|
Eu faço programa! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 14:01:52
|
A.L
JavaTeenager
![[Avatar]](/images/avatar/99346f284eb8b6231910a13568f29d0f.jpg)
Membro desde: 18/09/2008 22:45:30
Mensagens: 176
Localização: Araraquara - SP - Brazil
Offline
|
Carol,
de uma olhada nesse esquema
http://dddsample.sourceforge.net/architecture.html
e no livro diz que
' It does not contain business rules or knowledge, but only coordinates tasks and delegates work to collaborations of domain objects in the next layer down'
ou seja, a camada de aplicação apenas coordena e delega tarefas dos objetos do domínio.
Ignore essa definição da arquitetura JEE, nesse contexto são assuntos diferentes.
This message was edited 1 time. Last update was at 30/12/2009 14:02:08
|
Alex Antonio Fernandes Lopes
Dicas Linux : http://www.dicaslinux.wordpress.com
====================
"The best way to predict the future is to invent it" - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/12/2009 22:53:42
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5169
Localização: Sydney - Australia
Offline
|
Oi,
carol_programadora wrote:
Se nas minhas classes de controller, quando eu preciso de alguma consulta direta, sem ter negócio envolvido, inclua aqui dados brutos para popular comboBox, DataTable... etc eu tinha pensando em injetar uma dependência "UsuarioDao" no meu "UsuarioController" e não um UsuarioRepository... achei que fosse errado colocar uma dependência do repository no controller, achei que elas deveriam ser usada APENAS por classes do domínio, por domínio quero dizer as entities e os services, então eu pensei que o controller não deveria ter esse contato.
Então creio que estou errada, utilizando sua sugestão Shoes, minha única opção pra inserir dentro do "UsuarioController" seria minha "UsuarioRepository.
Uhm... será que você não está pensando em dados quando devia estar pensando em objetos?
Uma combobox ou algo do tipo não exibe dados isolados, ela exibe propriedades de um objeto. Quando você precisa, digamos, listar todos os estados de um país você não deveria fazer algo como:
Desta forma você está quebrando o encapsulamento do objeto país *e* quebrando oencapsulamento da sua infra-estrutura de persistência.
Eu recomendo fazer assim:
carol_programadora wrote:
Dentro de Application e Domain, tem pacote "service", pelo que li e entendi até agora(a não ser que fiz bagunça) minhas regras de negócio devem ficar no Domain > Service, certo?!
Sim.
carol_programadora wrote:
Fiquei confusa com essa camada "Application", não tinha visto sobre ela no DDD, e na verdade pouco conheço ainda dela no geral
Como o Alexa falou, no Capítulo 4 do Domain-Driven Design existe a definição das Camadas propostas pelo Eric Evans:
DDD, Capítulo IV wrote:
* User Interface (or Presentation Layer): Responsible for showing information to the user and interpreting the user's commands. The external actor might sometimes be another computer system rather than a human user.
* Application Layer: Defines the jobs the software is supposed to do and directs the expressive domain objects to work out problems. The tasks this layer is responsible for are meaningful to the business or necessary for interaction with the application layers of other systems. This layer is kept thin. It does not contain business rules or knowledge, but only coordinates tasks and delegates work to collaborations of domain objects in the next layer down. It does not have state reflecting the business situation, but it can have state that reflects the progress of a task for the user or the program.
* Domain Layer (or Model Layer): Responsible for representing concepts of the business, information about the business situation, and business rules. State that reflects the business situation is controlled and used here, even though the technical details of storing it are delegated to the infrastructure. This layer is the heart of business software.
* Infrastructure Layer: Provides generic technical capabilities that support the higher layers: message sending for the application, persistence for the domain, drawing widgets for the UI, and so on. The infrastructure layer may also support the pattern of interactions between the four layers through an architectural framework.
Os slides do meu workshop de DDD podem ajudar: http://www.slideshare.net/pcalcado/domaindriven-design
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
|
|
|
|
|