Probleminha OOAD (DDD Repositórios)  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Bruno Laturner
JWizard
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 2981
Offline

Desculpe pela minha prática de necromancia neste tópico, mas o Philip Calçado postou sobre o uso que estão fazendo num projeto de integração entre sistemas com a idéia do Yoshima de Repositórios do DDD.

http://fragmental.tw/2010/02/24/everyday-tales-anatomy-of-a-refactoring/ (em inglês)

Só quero ver a continuação dessa refatoração deles.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline

Bruno Laturner wrote:Desculpe pela minha prática de necromancia neste tópico, mas o Philip Calçado postou sobre o uso que estão fazendo num projeto de integração entre sistemas com a idéia do Yoshima de Repositórios do DDD.

http://fragmental.tw/2010/02/24/everyday-tales-anatomy-of-a-refactoring/ (em inglês)

Só quero ver a continuação dessa refatoração deles.


two wrongs don't make a right.

O problema não é semantico, como as pessoas parecem acreditar.
E a sugestão seguida foi apenas a nomenclatura e não o modelo.
O modelo do TodosX era de uma registro abstrato, não de uma interface.
Extrair a interface para TodosX mas continuar usando XRepository como implementação não mudou uma virgula no modelo.
É algo apenas estético, porque força uma separação (articial) entre o que é considerado "dominio" e o que é considerado "estrutura".

O repositorio é parte do dominio e não ha vergonha nenhuma nisso. Chame-se como se chamar , com prefixo ou sem. Ele contém regras do dominio
regras que fazem ganhar e perder dinheiro, não apenas coisas de canalização de API (plumbing).
É isto que as pessoas ainda não entenderam.

Coisas como o modelo do repositorio implementa um interface é coisa de DAO. E é realmente isso que o modelo aponto. Uma interface que é implementa na infra , mas usada como um serviço. Ou seja, amanhã é possivel eu implementar outra forma e substituir , ou até ter um façade que escreve nos dois reposiotrios (velho e novo) ao mesmo tempo. Isto é legal no DAO mas é absurdo no Repositorio. Se o repositorio muda, isso significa que o negocio mudou. As regras mudaram. O dominio foi alterado. Não a infra.

O modelo do repositorio inventado pelo proprio Fowler é muito mais coreente que isso e se as pessoas deixassem de pensar em interfaces seria muito mais simples. Definir repositorio como interfaces é como definir cliente e produto como interfaces. É programaticamente válido, mas um erro de abstração.

Repositorios sempre são acompanhados de estratégias. São dois objetos diferentes não uma interface e uma implementação (isso é um Service).
O repositorio contem e concentra as regras de negocio, especialmente que são relevantes a procuras. não contem codigo de infra.
A estratégia só contém codigo de infra e nada de negocio. Ela intrpereta a intenção do repositorio para a tecnologia real.

Um UserRepository tem (não "é", composição, não herança) estratégias de pesquisa. Em particular ele contém várias. Uma estratégia por rede social. È como se, num sistema de banco de dados o repositorio comunicasse com vários bancos . ele teria uma estratégia por banco.

This message was edited 1 time. Last update was at 24/02/2010 15:37:30


Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
osmio
Java Ninja

Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline



Não é o caso do repositório saber quais quartos devem ser disponibilizados de acordo com a reserva?


"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert
[Email]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline

osmio wrote:

Não é o caso do repositório saber quais quartos devem ser disponibilizados de acordo com a reserva?



Isso é o uso de Template Object para fazer a pesquisa.
Vc poderia escrever o mesmo assim



Ou, o que é equivalente



Isto desacopla a Reserva. Mas veja que cada Quarto tem N reservas, mas cada reserva apenas um quarto.
Então nesse seu modelo, eu tenho um conjunto de quartos, mas ainda terei que escolher 1 e depois criar a reserva.

Poderiamos pensar que a sua pesquisa é equivalente a


Que o Rodrigo já descartou porque "Reserva disponivel" não é um conceito do dominio. Nessa mesma logica "Quarto disponivel" também não é, e portanto nenhuma das duas pesquisas pode ser feita.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
osmio
Java Ninja

Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline

sergiotaborda wrote:
Isto desacopla a Reserva. Mas veja que cada Quarto tem N reservas, mas cada reserva apenas um quarto.
Então nesse seu modelo, eu tenho um conjunto de quartos, mas ainda terei que escolher 1 e depois criar a reserva.



E não é este o requisito?
Olhe o primeiro post:

rodrigoy wrote:
Num determinado ponto do sistema há o seguinte requisito:

- Ao efetuar a reserva o sistema deverá exibir uma lista de quartos disponíveis para o período da estadia do hóspede.


sergiotaborda wrote:
Poderiamos pensar que a sua pesquisa é equivalente a


Que o Rodrigo já descartou porque "Reserva disponivel" não é um conceito do dominio. Nessa mesma logica "Quarto disponivel" também não é, e portanto nenhuma das duas pesquisas pode ser feita.


Reserva controlar, também esta fora de questão para mim.



"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert
[Email]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline

osmio wrote:
sergiotaborda wrote:
Isto desacopla a Reserva. Mas veja que cada Quarto tem N reservas, mas cada reserva apenas um quarto.
Então nesse seu modelo, eu tenho um conjunto de quartos, mas ainda terei que escolher 1 e depois criar a reserva.


E não é este o requisito?
Olhe o primeiro post:

rodrigoy wrote:
Num determinado ponto do sistema há o seguinte requisito:

- Ao efetuar a reserva o sistema deverá exibir uma lista de quartos disponíveis para o período da estadia do hóspede.



não atende porque vc não efetuou a reserva.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
osmio
Java Ninja

Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline

sergiotaborda wrote:
não atende porque vc não efetuou a reserva.


Então, nesse caso, não é necessário um quarto para fazer uma reserva?

Mas de qualquer forma, a reserva foi feita. Veja novamente:


This message was edited 2 times. Last update was at 24/02/2010 19:25:23


"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert
[Email]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline

osmio wrote:
sergiotaborda wrote:
não atende porque vc não efetuou a reserva.


Então, nesse caso, não é necessário um quarto para fazer uma reserva?

Mas de qualquer forma, a reserva foi feita. Veja novamente:


não foi feita,exactamente, porque, vc não associou um quarto à reserva
Além disso essa reserva que vc cria é apenas um template ela não existe ainda.


Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
osmio
Java Ninja

Membro desde: 22/08/2006 20:27:54
Mensagens: 252
Offline

sergiotaborda wrote:
não foi feita,exactamente, porque, vc não associou um quarto à reserva
Além disso essa reserva que vc cria é apenas um template ela não existe ainda.


Então eu tenho que associar um quarto a reserva, depois listar os quartos disponiveis?
Aparentemente, estamos entendendo de forma diferente o requisito.

O objetivo de listar os quartos é justamente selecionar qual o quarto que será associado a reserva. E não efetuar a reserva com um quarto e depois listar os quartos disponíveis.

"O pensamento lógico pode levar você de A a B, mas a imaginação te leva a qualquer parte do universo."
- Einstein, Albert
[Email]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team