| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/12/2008 19:31:22
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
hlegius wrote:
Então as entidades deverão apenas conter rotinas que cabem a elas mesmo fazerem, como chegar seus próprios dados, comparações de dados recebidos com dados em memória. Serviços trabalham essas entidades. Tratam as informações, fazem checagens - Às vezes usando métodos da própria entidade, às vezes consultando outros Serviços e por fim o Repositório que está lá para buscar entidades persistidas para auxiliar o serviço em algo, ou simplemente para exibi-las ao usuário. Resumão correto ?
Sample
A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection. Client objects construct query specifications declaratively and submit them to Repository for satisfaction. Objects can be added to and removed from the Repository, as they can from a simple collection of objects, and the mapping code encapsulated by the Repository will carry out the appropriate operations behind the scenes. Conceptually, a Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer. Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers.
This message was edited 1 time. Last update was at 03/12/2008 19:35:27
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/12/2008 20:53:13
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Marcio Duran wrote:
sergiotaborda wrote:
O ponto é: Repositorios são mais uteis. entidades podem usar repositorios, mas não é bom poluir a interface da entidade com métodos de pesquisa especializada. Isso é função do repositorio.
Sergio poderia dar maior visibilidade nessa colocação "interface da entidade com método de pesquisa", a quem você esta atribuindo pesquisa, um façade "não entendi"
interface da entidade = conjunto de métodos da entidade.
é ruim ter uma entidade com dezenas de métodos que não lhe dizem directamente respeito.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/12/2008 21:02:27
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
hlegius wrote:
sergiotaborda wrote:Eu preciso de 2 coisas além do objeto Pedido. Um objeto que saiba criar pedidos e um objeto que saiba procurar pedidos.
O segundo é um repositorio de pedidos. O primeiro é um Serviço.
Certo. Então o cara que aplica regras de negócio é o Serviço da entidade. Ele executa alguma tarefa - algum "serviço" - e pronto. Certo. O serviço pode comunicar-se com seu Repositório para persistir alguma informação tranquilamente, correto ?
sim.
sergiotaborda wrote:Isso será feito pelo ServiçoDeVerificaçãoDeVenda ou algo assim. Depois disso o pedido muda de estado.
Esse suposto "serviço" irá pegar o número do cartão, conectar-se à um webservice e validar a compra, ao tentar mudar o "estado" do pedido ele deverá solicitar a mudança ao ServiçoPedido (algo que seria o mais correto [centralizar coisas]) ao invés dele mesmo(ServiçoDeVerificaçãodeVenda)
Não. O correto é que o serviço sim altere o estado sem utilizar o serviçoPedido.
Cada serviço sabe o que está fazendo e seu papel no grande esquema das coisas. Ele tem liberdade e capacidade para tomar a decisão de alterar o estado. Como tal ele pode alterar o estado sozinho.
sergiotaborda wrote:O seu modelo básicamente mostra entidades e repositorios ( embora vc os chame de serviços, eles não são serviços realmente). métodos como "registraCompra" terão que ser colocados como serviços.
Então as entidades deverão apenas conter rotinas que cabem a elas mesmo fazerem, como chegar seus próprios dados, comparações de dados recebidos com dados em memória. Serviços trabalham essas entidades. Tratam as informações, fazem checagens - Às vezes usando métodos da própria entidade, às vezes consultando outros Serviços e por fim o Repositório que está lá para buscar entidades persistidas para auxiliar o serviço em algo, ou simplemente para exibi-las ao usuário. Resumão correto ?
sim.
sergiotaborda wrote:O ponto é: Repositorios são mais uteis. entidades podem usar repositorios, mas não é bom poluir a interface da entidade com métodos de pesquisa especializada. Isso é função do repositorio.
Se o repositório é o cara que faz isto bem - e você já me explicou como ele faz isto =) - onde eu poderei chamá-lo para trazer estes resultados ? Se o ServiçoX precisar de dados do Repositório, ele pode e deve chamá-lo. Legal, mas e se o Serviço não precisar ? Vamos supor que eu simplemente queira exibir na tela os Pedidos finalizados do mês 11. Então eu iria fazer:
Mas onde eu poderia chamá-lo, se na Action você disse-me que não seria legal entupi-la de chamadas à repositórios ?
A palavra chave ai é "entupir". Se o action faz mais de uma chamada então ele está desenvolvendo uma logica que não se limita apenas a encaminhar os dados de um lugar ( repositorio) para outro (tela).
Não ha mal em que a action consulte directamente o repositorio se for apenas isso que ela faz.
Mas se o fizer sentir melhor, vc pode criar um façade para fazer essa chamadas pela action.
Contudo acho que ai é complicar. O principio da parcimónia vale nesse caso , eu acho.
O encapsulamento da pesquisa já esta no repositorio, encapcular isso ainda mais parece inutil
sergiotaborda wrote:O ideal é vc ter um objeto ProductReportService ou algo assim e ter lá os métodos. internamente esses métodos pode requisitar mais do que uma informação ao repositorio e fazer liogicas de filtro, agrupamento etc que o repositorio não faz.
Maneiro. Os serviços servem para um bocado de tarefas =) Já vi gente comentando sobre Serviços estáticos. Seria isto interessante ?
Não sei o que isso significa mas:
1) se significa usar métodos estáticos, esqueça
2) se significa ter coisas tipo singleton , esqueça
3) se significa ter algum tipo de mecanismo que garante que apenas existe uma instancia do serviço, sim. isso é uma boa. Repare que os serviços não têm estado. Assim sendo um mesmo objeto pode processar qualquer numero de chamadas ao serviço.
Uma outra coisa: serviços são definidos em interfaces e implementados à parte. Isso é a "marca d' água" básica de um serviço.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/12/2008 21:54:23
|
hlegius
JavaChild
![[Avatar]](/images/avatar/0f20c77d6afb02422603acb0329b5a41.jpeg)
Membro desde: 07/05/2006 14:29:25
Mensagens: 126
Localização: Guarulhos, SP
Offline
|
sergiotaborda wrote:Não. O correto é que o serviço sim altere o estado sem utilizar o serviçoPedido.
Cada serviço sabe o que está fazendo e seu papel no grande esquema das coisas. Ele tem liberdade e capacidade para tomar a decisão de alterar o estado. Como tal ele pode alterar o estado sozinho.
Hum. Então um Serviço só falaria com outro Serviço caso uma rotina do ServiçoA.metodoA() fosse executar uma rotina inteira do ServiçoB.metodoB() que já existe pois essa rotina "B" também é necessária viver separadamente por causa de outra necessidade do domínio, penso eu. Correto ?
sergiotaborda wrote:A palavra chave ai é "entupir". Se o action faz mais de uma chamada então ele está desenvolvendo uma logica que não se limita apenas a encaminhar os dados de um lugar ( repositorio) para outro (tela).
Não ha mal em que a action consulte directamente o repositorio se for apenas isso que ela faz.
Mas se o fizer sentir melhor, vc pode criar um façade para fazer essa chamadas pela action.
Contudo acho que ai é complicar. O principio da parcimónia vale nesse caso , eu acho.
O encapsulamento da pesquisa já esta no repositorio, encapcular isso ainda mais parece inutil
Ao que entendi, caso a Action apenas deseje exibir uma busca, sem crimes ela criar o Criteria na Action e listar os elementos. Agora se um Repositório chamar uns dados, outro chamar outros dados contando com o primeiro criando assim uma sequencia, seria melhor encapsular isso ae numa façade para manter as coisas em paz.
sergiotaborda wrote:Não sei o que isso significa mas:
1) se significa usar métodos estáticos, esqueça
2) se significa ter coisas tipo singleton , esqueça
3) se significa ter algum tipo de mecanismo que garante que apenas existe uma instancia do serviço, sim. isso é uma boa. Repare que os serviços não têm estado. Assim sendo um mesmo objeto pode processar qualquer numero de chamadas ao serviço.
Item 1. Mas tranquilo, não o farei hehehe X)
sergiotaborda wrote:Uma outra coisa: serviços são definidos em interfaces e implementados à parte. Isso é a "marca d' água" básica de um serviço.
Não sei se entendi bem o significado dessa frase. Poderia discorrer sobre ?
Abraço!
|
http://programe.me
Zend Certified Engineer
ArchLinux - A simple lightweight Linux Distribution |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2008 08:06:14
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
sergiotaborda wrote:
interface da entidade = conjunto de métodos da entidade.
("interface da entidade=Conjunto de Métodos da entidade"), aqui que você esta abstraindo uma referência à um repository pattern, delegando aos objetos essa responsabilidade ?
é ruim ter uma entidade com dezenas de métodos que não lhe dizem directamente respeito.
Sim aqui deu para entender, tem ai um falta de clareza de análise por parte do desenvolvedor não saber dar responsabilidade aos objetos de sistema.
This message was edited 2 times. Last update was at 04/12/2008 08:14:36
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2008 08:48:53
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
hlegius wrote:
sergiotaborda wrote:Não. O correto é que o serviço sim altere o estado sem utilizar o serviçoPedido.
Cada serviço sabe o que está fazendo e seu papel no grande esquema das coisas. Ele tem liberdade e capacidade para tomar a decisão de alterar o estado. Como tal ele pode alterar o estado sozinho.
Hum. Então um Serviço só falaria com outro Serviço caso uma rotina do ServiçoA.metodoA() fosse executar uma rotina inteira do ServiçoB.metodoB() que já existe pois essa rotina "B" também é necessária viver separadamente por causa de outra necessidade do domínio, penso eu. Correto ?
não se trata do métodoA ser chamado ou não. Não se trata de reaproveitamento de codigo.
Trata-se de consumir serviços. Você pode lavar o seu carro ou consumir o serviço de um lavador de carros.
Se o lavador não está disponível ou é caro demais vc mesmo faz - sabendo que a qualidade é menor.
quanto mais o serviço é especializado e/ou importante mais uso vc fará de um serviço e menos vc tentará fazer sozinho.
Então sim, se o serviço A consome B , o serviço A pedirá a B que execute uma ação completa ( aka irá chamar um método de B)
O importante é entender que não se trata de poupar codigo, trata-se de separar a responsabilidade dos serviços do sistema.
com o tempo os serviços evoluem ( mais simples, mais rápidos, mais eficazes ... ) e quem os consome se beneficia sem querer.
sergiotaborda wrote:A palavra chave ai é "entupir". Se o action faz mais de uma chamada então ele está desenvolvendo uma logica que não se limita apenas a encaminhar os dados de um lugar ( repositorio) para outro (tela).
Não ha mal em que a action consulte directamente o repositorio se for apenas isso que ela faz.
Mas se o fizer sentir melhor, vc pode criar um façade para fazer essa chamadas pela action.
Contudo acho que ai é complicar. O principio da parcimónia vale nesse caso , eu acho.
O encapsulamento da pesquisa já esta no repositorio, encapcular isso ainda mais parece inutil
Ao que entendi, caso a Action apenas deseje exibir uma busca, sem crimes ela criar o Criteria na Action e listar os elementos.
Perai , não foi isso que eu disse.
Errado
Certo:
Actions não criam critérios. Isso é responsabilidade dos repositorios !
Agora se um Repositório chamar uns dados, outro chamar outros dados contando com o primeiro criando assim uma sequencia, seria melhor encapsular isso ae numa façade para manter as coisas em paz.
Sim. Mas o façade pode ele mesmo ser um repositorio. ( ele é um repositorio daquil o que vc está procurando)
This message was edited 1 time. Last update was at 04/12/2008 08:49:18
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2008 12:39:03
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
hlegius wrote:
Agora se um Repositório chamar uns dados, outro chamar outros dados contando com o primeiro criando assim uma sequencia, seria melhor encapsular isso ae numa façade para manter as coisas em paz.
O Repositório é uma abstração, só representa a maneira de se obter as informações, é o elemento que modelamos quando necessitamos efetuar buscar por entities, outra nota é responsável por adicionar um novo item a coleção.
sergiotaborda wrote:
Sim. Mas o façade pode ele mesmo ser um repositorio. ( ele é um repositorio daquil o que vc está procurando)
O façade "ClienteA------>BasedeBadosFaçade--->BaseDeDados > Modelo > Elemento"
; )
This message was edited 3 times. Last update was at 04/12/2008 12:40:44
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/12/2008 08:37:14
|
hlegius
JavaChild
![[Avatar]](/images/avatar/0f20c77d6afb02422603acb0329b5a41.jpeg)
Membro desde: 07/05/2006 14:29:25
Mensagens: 126
Localização: Guarulhos, SP
Offline
|
sergiotaborda wrote:não se trata do métodoA ser chamado ou não. Não se trata de reaproveitamento de codigo.
Trata-se de consumir serviços. Você pode lavar o seu carro ou consumir o serviço de um lavador de carros.
Se o lavador não está disponível ou é caro demais vc mesmo faz - sabendo que a qualidade é menor.
quanto mais o serviço é especializado e/ou importante mais uso vc fará de um serviço e menos vc tentará fazer sozinho.
Entendido. Boa explicação.
sergiotaborda wrote:Perai , não foi isso que eu disse.
Ah sim, eu estava pensando no seu "modelo certo" só que falei Critéria. Viajei hehehe...
Marcio Duran wrote: O Repositório é uma abstração, só representa a maneira de se obter as informações, é o elemento que modelamos quando necessitamos efetuar buscar por entities, outra nota é responsável por adicionar um novo item a coleção.
Então foi o que o Sergio também comentou. O próprio Façace pode ser um Repositório.
sergiotaborda wrote:Sim. Mas o façade pode ele mesmo ser um repositorio. ( ele é um repositorio daquil o que vc está procurando)
As coisas estão fazendo mais sentido agora. =)
|
http://programe.me
Zend Certified Engineer
ArchLinux - A simple lightweight Linux Distribution |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/12/2008 11:44:16
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
hlegius wrote:Então foi o que o Sergio também comentou. O próprio Façace pode ser um Repositório.
"Action a navegabilidade do serviço, a criteria a responsabilidade para o façade repositorio"
This message was edited 1 time. Last update was at 05/12/2008 11:46:22
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
|
|