Probleminha OOAD (DDD Repositórios)  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Amigos,

Motivado pelo post do Paulo sobre repositórios aqui no GUJ, quero fazer uma pergunta para saber a opinião e para vocês refletirem.

Imagine que você está fazendo um sistema de hotel (que é o estudo de caso do nosso curso OOAD com UML2. Se quiser, veja o documento de visão linkado (não é necessário ler o documento todo, mas quem tiver curiosidade em ver a "big picture")

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.

Pergunta: Quem responde pela lista de quartos disponíveis para o período?

a. O repositório de Quartos?



b. O repositório de Reservas?



c. Faço uma query na UI usando Scriptlet...

Justifique sua resposta.

This message was edited 1 time. Last update was at 11/08/2009 16:48:20


Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

Voto na Opção 1,

Pois julgo ser responsabilidade do quarto saber se ele está ocupado.
Parece mais intuitivo ler o código: TodosQuartos.getDisponiveis do que TodasReservas.getQuartosDisponiveis.

Se você tiver que procurar no sistema aonde está a regra para exibir os quartos disponíveis, minha primeira tentativa seria procurar algo relacionado com quarto, e não com reserva.

[]s

Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
peerless
GUJ Master
[Avatar]

Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline

Um quarto que controla o periodo em que ele ficará reservado ?


follow me
pitacos

"The most problems that teams face are about communication, and all the others are too." - Dan North





[MSN]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Pertinente a sua pergunta. Não o quarto não sabe (ou não precisaria saber) é algo assim:



(realmente o yuml.me é viciante)

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Tenho uma dúvida: um quarto está indisponível quando está reservado? Ou apenas quando está ocupado?

This message was edited 2 times. Last update was at 11/08/2009 18:07:54


Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Quando está reservado, lógico! Veja que a pergunta é quartos disponíveis no período. Se há uma reserva futura para o quarto ele está reservado para aquele período.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

Eu implementaria de acordo com a opção 1.

Na opção 2, TodasReservas retornar uma lista de quartos não me parece muito intuitivo.

[]s

Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
joellobo
Thread.start()
[Avatar]

Membro desde: 27/08/2007 14:45:01
Mensagens: 33
Localização: Fortaleza/CE
Offline

Opção 1. O repositório TodasReservas poderia ter um método como getQuartosReservados(periodo):Quartos mas não getQuartosDisponiveis(periodo):Quartos. Apesar de ter exceções, como no exemplo do seu post (Yoshima), a regra 1 repository para cada aggregate está resolvendo a maioria dos meus problemas.

Joel Lobo
blogdojoellobo.blogspot.com
[WWW]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

joellobo wrote:O repositório TodasReservas poderia ter um método como getQuartosReservados(periodo):Quartos mas não getQuartosDisponiveis(periodo):Quartos


Qual a diferença?

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
MarceloAraujo
What is classpath?
[Avatar]

Membro desde: 01/05/2008 20:08:30
Mensagens: 6
Localização: Rio de Janeiro
Offline

Não tem essa opção, mas...pq não hotel.getQuartosDisponiveis(periodo):Quartos ?
Parece ser mais coerente com o negócio e também com a OO.

Marcelo C. Araújo
http://twitter.com/marceloaraujo
http://www.timebox.com.br

[WWW]
bruno77sa
Thread.start()

Membro desde: 19/07/2005 20:12:53
Mensagens: 34
Offline

olá rodrigo,

eu não faria em nenhum repositorio apresentado, porque este requisito não esta em nenhum deles, veja:

1-O repostorio de quartos, representa uma colecao de quartos, pelo requisitos apresentados o que define se esta reservado ou não é a relacao de agregacao entre o mesmo e sua reserva, ou seja aqui não é o lugar, aqui só tenho minha caixa de quartos, não tenho informacão sobre reservas aqui.

2-daria pra fazer no repositorio de reservas, mas a ideia deste objeto no sistema seria representar apenas os quartos com reserva no periodo, e para atender esse requisito o repositorio de reservas deveria saber sobre todos os quartos, o que acredito que não seja o intuito do mesmo.

e agora? como resolver?

Service!!!!



outra versão!!



vamos as observacões

obs:1 desconsiderem esse meu codigo java, ha 3 anos que não mexo no bichinho,sei que tem erro ai!!
obs:2 desconsiderem os nomes dos metodos, pensei rapido aqui!!
obs:3 meu teclado disconfigurou aqui linux,por isso engoli os acentos!


bem essa é minha visão, eu faria desta forma, o que achas?











FredMP
JavaBaby
[Avatar]

Membro desde: 08/04/2006 19:46:24
Mensagens: 92
Localização: São Pedro da Aldeia - RJ
Offline

Eu acho que fica mais coerente TodosQuartos.getDisponiveis, opção 1.

Mas:
rodrigoy wrote:
joellobo wrote:O repositório TodasReservas poderia ter um método como getQuartosReservados(periodo):Quartos mas não getQuartosDisponiveis(periodo):Quartos


Qual a diferença?

Nesse caso acho que ele quis dizer que TodasReservas deve conhecer quartos relacionados a elas, as reservas. Portanto, apenas os quartos reservados. Mas, no fundo se vc sabe todos os reservados para um período, a principio, os que sobram são os disponíveis. Embora isso possa não ser de todo verdade, pois podem haver outras formas de se indisponibilizar um quarto além da reserva, como colocá-lo em manutenção ou interditá-lo talvez.
[Email] [MSN]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

MarceloAraujo wrote:Não tem essa opção, mas...pq não hotel.getQuartosDisponiveis(periodo):Quartos ?
Parece ser mais coerente com o negócio e também com a OO.


Marcelo, se você for nessa linha de pensamento um monte de coisas irão ser questionada para o Hotel. E outra: Já parou para pensar que isso é um Singleton? Quem dá a instância de Hotel?

Hotel é o domínio que estou modelando. Neste caso, me é estranho ter um elemento Hotel dentro do domínio Hotel.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

bruno77sa wrote:
1-O repostorio de quartos, representa uma colecao de quartos, pelo requisitos apresentados o que define se esta reservado ou não é a relacao de agregacao entre o mesmo e sua reserva, ou seja aqui não é o lugar, aqui só tenho minha caixa de quartos, não tenho informacão sobre reservas aqui.


É uma boa justificativa.

bruno77sa wrote:
2-daria pra fazer no repositorio de reservas, mas a ideia deste objeto no sistema seria representar apenas os quartos com reserva no periodo, e para atender esse requisito o repositorio de reservas deveria saber sobre todos os quartos, o que acredito que não seja o intuito do mesmo.


A Reserva depende de Quarto independente de Quartos estarem reservados ou não. Porém, quartos não sabem da existência de reservas.

bruno77sa wrote:
e agora? como resolver? Service!!!!


Service é transacional e sua execução tem efeito colateral, o que não acontece com o requisito solicitado. É só uma busca por informações. Você está modelando um novo repositório com nome de service.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

FredMP wrote:

rodrigoy em resposta a Joel wrote: Qual a diferença?


Nesse caso acho que ele quis dizer que TodasReservas deve conhecer quartos relacionados a elas, as reservas. Portanto, apenas os quartos reservados. Mas, no fundo se vc sabe todos os reservados para um período, a principio, os que sobram são os disponíveis.


Seu raciocínio está certo. No último diagrama que postei fica claro que reservas sabem da existência de quartos. A associação deixa a dependência explícita. O contrário é que não é verdade. Quartos não dependem de reserva.

FredMP wrote:
Embora isso possa não ser de todo verdade, pois podem haver outras formas de se indisponibilizar um quarto além da reserva, como colocá-lo em manutenção ou interditá-lo talvez.


Isso não está nos requisitos!

[piadinha](cada dia que passa eu vejo que não é o cliente que aumenta o escopo... são os programadores...) [/piada]

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team