DDD Sample - Demonstrating Domain-Driven Design  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Para aqueles interessados em Domain-Driven Design

Upcoming Events

domaindrivendesign.org/events wrote:Oct 8 Community Event: Stockholm
Release party for DDD Sample

During the last year or so, Domainlanguage and Citerus have been working on an example application that demonstrates how some typical DDD concepts can be realised when it comes to code. The applications is now ready to be shown in public.

http://dddsample.sourceforge.net/


DDD Sample - Demonstrating Domain-Driven Design

Trechos que eu destaco

dddsample wrote:One of the most requested aids to coming up to speed on DDD has been a running example application. Starting from a simple set of functions and a model based on the cargo example used in Eric Evans' book , we have built a running application with which to demonstrate a practical implementation of the building block patterns as well as illustrate the impact of aggregates and bounded contexts.


dddsample wrote:Lab mouse for controlled experiments

There's a lot of interest in new tools or frameworks for DDD.

Reimplementing the sample app using a new platform will give a side-by-side comparison with the "conventional" implementation, which can demonstrate the value of the new platform and provide validation or other feedback to the developers of the platform.


Seria legal se de fato acontecer debates e comparações lado a lado entre essa arquitetura 'convencional' e outras que já tenhamos desenvolvido ou que possamos desenvolver. Com certeza este é um exemplo que contribui muito para o entendimento de DDD.


Abraço,
Thiago
[Email]
raulmferreira
What is classpath?
[Avatar]

Membro desde: 19/05/2008 00:53:54
Mensagens: 7
Offline

Thiago, achei o exemplo bem interessante, mas surgiu uma duvida.

Se o Entity Cargo retorna uma referencia para um Location que tambem eh um Entity, o exemplo nao esta violando o proprio padrao?

O livro diz "Nothing outside the AGGREGATE boundary can hold a reference to anything inside, except to the root ENTITY." e nesse caso eu tenho uma referencia fora da "fronteira".

Talvez eu nao entendi bem o padrao, nao sei.

Se alguem puder me ajudar agradeco.

Valeu!

raulmeloferreira@gmail.com
cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

raulmferreira wrote:Thiago, achei o exemplo bem interessante, mas surgiu uma duvida.

Se o Entity Cargo retorna uma referencia para um Location que tambem eh um Entity, o exemplo nao esta violando o proprio padrao?

O livro diz "Nothing outside the AGGREGATE boundary can hold a reference to anything inside, except to the root ENTITY." e nesse caso eu tenho uma referencia fora da "fronteira".

Talvez eu nao entendi bem o padrao, nao sei.

Se alguem puder me ajudar agradeco.

Valeu!


Tanto Cargo quanto Location sao ROOT, nao entendi qual a duvida.
[Email]
raulmferreira
What is classpath?
[Avatar]

Membro desde: 19/05/2008 00:53:54
Mensagens: 7
Offline

cmoscoso, obrigado por responder.

Mas acho que provavelmente eu nao entendi o padrao entao. No meu entendimento nao podem existir dois roots:

"Choose one Entity to be the root of each Aggregate, and control all access to the objects inside the boundary through the root."

http://domaindrivendesign.org/discussion/messageboardarchive/Aggregates.html

Pelo que eu entendi, se o Cargo eh o root, o Location nao pode ser root dos objetos na mesma fronteira.

raulmeloferreira@gmail.com
cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

Definition:
A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the Aggregate, designated as the root. A set of consistency rules applies within the Aggregate's boundaries.


Se num to enganado vc ta se referindo ao exemplo do sistema de rotas que possui casos de uso que envolvem os agregados Cargo e Location. De acordo com a definicao acima nada impede Cargo possuir uma referencia externa ao Location. Mas sua duvida é pertinente porque o Location é passado pelo Cargo pra varios membros internos do seu agregado.

Acontece que agregados devem ser considerados do ponto de vista da atualizacao dos dados. Neste caso Location é um objeto sem muitas responsabilidades. É usado no exemplo pra criar um specification e outras coisas mas sempre apenas como "coadjuvante" (se bem que as vezes o objeto mais importante para uma regra de negocio, é aquele que retorna uma informacao importante ao inves de alterar o estado do sistema.).
[Email]
cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

Exemplo, se Location causasse alguma alteracao nos membros internos teria que ser atraves do Cargo (ja que ele é o Root). Assim como Cargo poderia receber nova Location caso necessario alterar o itinerario.
[Email]
raulmferreira
What is classpath?
[Avatar]

Membro desde: 19/05/2008 00:53:54
Mensagens: 7
Offline

Humm, acredito que entendi entao.

Minha ideia inicial sobre o padrao era que ele fosse implementado como uma especie de "facade", com outro proposito claro e trabalhando com objetos atributos.

Por exemplo, se o objeto Location fosse persistido pelo Cargo entao nao poderia ser retornada uma referencia?


raulmeloferreira@gmail.com
cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

raulmferreira wrote:Humm, acredito que entendi entao.

Minha ideia inicial sobre o padrao era que ele fosse implementado como uma especie de "facade", com outro proposito claro e trabalhando com objetos atributos.

Por exemplo, se o objeto Location fosse persistido pelo Cargo entao nao poderia ser retornada uma referencia?



Agregados pertencem ao mesmo dominio, nao sao 2 partes separadas comunicando atraves de uma API. Logo, nao tem nada de facade.

Pense que o importante para um agregado nao é o que se retorna, mas que as operacoes que venham a alterar dadaos nos membros seja feito pelo root (Cargo).

Persistir Location vc estaria alterando o agregado Location, quem persiste neste caso (Cargo) nao importa, mas geralmente é feito por um service.

This message was edited 1 time. Last update was at 26/11/2008 13:41:33

[Email]
cmoscoso
Virtual Machine Man

Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline

Outro detalhe que, o agregado so existe a partir do momento que entidade root ja existe no repositorio, neste caso a fronteira do agregado delimita o escopo das atualizacoes.

This message was edited 1 time. Last update was at 26/11/2008 13:45:14

[Email]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team