DDD – Part 3 – Modelo expressado no software

Posted on March 17, 2009

3


Existem dois padrões muito importantes para o DDD, ambos representam modelos do sistema, se diferenciando basicamente na questão de guardar ou não estado. Se para seu objeto é importante o estado, ou seja, se o conjunto dos valores representa algo que é mudado conforme o tempo da aplicacão, DDD chama-o Entity.
Porém se o objeto representa um modelo que não se altera uma vez criado, DDD chama-o VO (Value Object).

“Does an object represent something with continuity and identity or is it an attribute that describes
the state of something else ?”

Não confundir com o já antigo padrão VO do Core J2EE Patterns, que se confundiu durante a história com o DTO do EJB.

  • Associações
  • Antes de dar continuídade dos padrões Entity e Value Object, DDD retrata dois modos de fazer
    associações entre modelos, citando exemplo de composição e via método direto com o banco de dados por exemplo, onde os dois designs refletem o mesmo modelo

    “A one-to-many association might be implemented as a collection in an instance variable.
    But the design is not necessarily so direct. There may be no collection; an accessor method may query a database to find the appropiate records and instantiate objects based on them.”

  • Entity
  • Voltando ao assunto, DDD faz uma associação com ingressos de estádios onde a cadeira e a fileira
    fazem diferença na hora da compra de ingresso. Nesse caso, o sistema não deve guardar apenas que um ingresso
    foi vendido, mas também sua posição no estádio tem importância.

    “An object defined primarily by its identity is called ENTITY”

  • Value Objects
  • Seguindo o exemplo acima, Value Objects seriam ingressos onde não se importariam a localização, e sim
    apenas a quantidade vendida.

    Outro bom exemplo de VO do DDD podem ser as negociações da bolsa de valores, que uma vez realizadas
    não podem ser alteradas, embora diversos sistemas possam utilizar tal informação. São imutáveis.

    “Many objects have no conceptual identity. These objects describe some characteristic of a thing.”

    “When you care only about the attributes of an element of the model, classify it as a VALUE OBJECT. Make it express the meaning of the attributes it conveys and give it related functionality. Treat the VALUE OBJECT as immutable. Don’t give it any identity and avoid the design complexities necessary to maintain ENTITIES.”

    “…share just one instance of an outlets and point to it a hundred times(an exemple of FLYWEIGHT)…”

    Em DDD Entity e VO sao objetos principais do modelo dos objetos , mas ainda eh necessario conhecer SERCVICES…

    Posted in: ddd, oo