DDD > Experiências

60 %
40 %
Information about DDD > Experiências
Technology

Published on December 17, 2008

Author: giovanni.bassi

Source: slideshare.net

Description

Apresentação sobre Domain Driven Design dada no terceiro encontro do grupo .Net Architects.

.Net Architects

Descobrir o que o DDD pode fazer por você Objetivo

 

 

NHibernate Datasets Camadas Orientação a objetos Waterfall Agilidade Injeção de dependência Entity Framework Rails Cloud Computing SOA Linguagens Dinâmicas

Visão de futuro ou... Porque o arquiteto deve ser preocupar com DDD

Começando pelo começo: o que é DDD? “ É uma abordagem para o desenvolvimento de software”

 

 

Qual o foco do DDD?

X

Focado no domínio!

“ Para a maioria dos projetos de software o foco principal deve ser no domínio e na lógica do domínio .” “ Desenhos complexos de domínio devem ser baseados em um modelo .” Quais são as duas principais premissas do DDD? Eric Evans

Domínio? Esfera de conhecimento, influência ou atividade. A área em que o usuário utiliza o software.

Esfera de conhecimento, influência ou atividade.

A área em que o usuário utiliza o software.

Modelo? Não...

O mundo Século XI

O mundo Século XVIII

O mundo

Modelos são baseados em abstrações

O mundo

 

 

 

 

Modelos são abstrações Isso quer dizer que o que não interessa fica de fora Se você conseguir equalizar isso, o modelo é perfeito Modelos devem refletir o código ou são irrelevantes

Não há padrão para um modelo

Ele pode ser assim...

Ou até assim...

No modelo vão...

Ubiquitous Language (está em toda parte) Vem dos business experts É refletida no modelo É refletida no código É falada pelo time

“ Tabela” “ Classe” “ Thread” “ Banco de dados” “ Façade” “ .Net 3.5” “ Carga” “ Conta corrente” “ Serviço de tradução de itinerário” “ Repositório de clientes” “ Agendamento de horário”

Ouça o Business Expert É ele quem conhece o problema, não você

 

Camadas devem fazer sentido (verifique suas responsabilidades) Se não separou não é camada Layers != Tiers Camadas

 

“ Esta camada é o coração de um software de negócios” Eric Evans

Utilize: ( )

Entidades possuem identidade Entidades têm significado no domínio

Objetos de valor não tem identidade para o negócio Freqüentemente são imutáveis São reconhecidos por seus atributos Cores: Azul Amarelo Verde Vermelho

public struct Categoria {     public string Nome  { get ; private set ; }     public int Id      { get ; private set ; }       private static Categoria _Veiculos = new Categoria () { Id = 1 , Nome = "Veiculos" };     public static Categoria Veiculos     { get { return _Veiculos; } }     private static Categoria _Livros = new Categoria () { Id = 2 , Nome = "Livros" };     public static Categoria Livros     { get { return _Livros;} }     public override bool Equals( object obj)     {         if (!(obj is Categoria ))             return false ;         return (( Categoria )obj).Nome == this .Nome;                }     public static bool operator ==( Categoria objA, Categoria objB)     { return objA.Equals(objB); }      public static bool operator !=( Categoria objA, Categoria objB)     { return !objA.Equals(objB); }      public override int GetHashCode()     { return this .Id; }        }

Agregações reunem entidades e objetos de valor de maneira que faça sentido para o negócio Agregações definem fronteiras claras Toda agregação tem uma raiz

 

Algumas regras...

Serviços resolvem problemas de negócio mas não são entidades nem objetos de valor Serviços não possuem estado de negócio

 

Factories criam objetos Levemente diferente das factories de padrões de projeto Será responsabilidade de um objeto se construir? Objetos devem ser criados consistentes

Como criar qualquer destes objetos? Só com factories

Repositórios fingem que têm todos os dados na memória Para o consumidor do repositório não faz muita diferença onde está o objeto Os Repositórios são os responsáveis por persistir e destruir os objetos

public class RepositoryCargaSQLServer : IRepositoryCarga {     public Carga RecuperarCarga( int id)     {         var cmd = new SqlCommand ( "SELECT ..." );         var adapter = new SqlDataAdapter (cmd);         var dataset = new DataSet ();         adapter.Fill(dataset);         var factory = new FactoryCarga ();         var carga = factory.CriaCarga(dataset.Tables[0].Rows[0]);         return carga;     }     public void ArmazenaCarga( Carga carga)     {         var cmd = new SqlCommand ();         if (carga.ID == -1)             cmd.CommandText = "INSERT..." ;         else             cmd.CommandText = "UPDATE..." ;                    cmd.ExecuteNonQuery();     } } Podem ser assim...

public void SalvarVeiculacao( IVeiculacao veiculacao) {     using ( var db = new VendasOnlineEntities ( this ._conn)     {       var veiculacaoDB = ( from veics in db.Veiculacao.Include( "Produto" )             .Include( "Pagamento.PagamentoBoleto" )             .Include( "Pagamento.PagamentoCartaoCredito" )                 where veics.Id == veiculacao.Id               select veics).First();       AtualizarVeiculacao(veiculacaoDB, veiculacao, db);       db.SaveChanges();     } } Assim...

veiculacaoDB.Custo = veiculacao.Custo; veiculacaoDB.DataLiberacao = veiculacao.DataLiberacao; veiculacaoDB.Dias = veiculacao.Dias; veiculacaoDB.EstaLiberada = veiculacao.EstaLiberada; veiculacaoDB.Inicio = veiculacao.Inicio; veiculacaoDB.Prioridade = (short)veiculacao.Prioridade; pgtoDB.Aprovado = pgto.Aprovado; pgtoDB.MeioPagamento = (short)pgto.MeioDePagamento; pgtoDB.Valor = pgto.Valor; if (pgto.DataDaRealizacaoDoPagamento.HasValue) pgtoDB.DataDaRealizacaoDoPagamento = pgto.DataDaRealizacaoDoPagamento.Value;

Ou assim...

Ciclo de vida: Factories criam Repositórios recuperam Repositórios alteram Repositórios destroem

Processo

Funciona assim?

Feedback é fundamental O tempo todo!

Assim é bem mais fácil

Aceite as mudanças... ... não brigue com elas

 

 

Mas pode dar trabalho Então o foco são projetos com regras de negócio complexas

Arquitetos são chamados para trabalhar em projetos que não são complexos?

 

 

 

 

 

 

 

 

 

 

 

Add a comment

Related presentations

Related pages

Experiencias de cátedra en las clases de física de ...

We have performed a set of lecture room experiences in a Physics course at the Escuela Universitaria de Informática, of the Universidad Politécnica de ...
Read more

LAVADORA DDD | Experiencias LG

Empecemos a enumerar sus cualidades. La lavadora DDD de LG, cuenta con panel de control LED y su moderno panel sensible al tacto facilita el manejo de la ...
Read more

DDD | Experiencias LG

SERVICIO TÉCNICO El mejor equipo, el mejor servicio 0800-1-2424 SUSCRÍBETE ÚNETE A NUESTRO NEWSLETER PARA CONOCER MÁS DE NUESTRAS NOVEDADES
Read more

Herramientas para DDD - Google Groups

El tema de DDD ó DDM ... Quisiera conocer sus opiniones sobre herramientas y compartir experiencias. Gracias.--MAC. Re: [ddd-es] Herramientas para DDD:
Read more

DDD – Introdução a Domain Driven Design | AgileAndArt

... baseados em experiências do autor ao longo de mais de 20 anos ... DDD pode ser visto por alguns como a volta da orientação a ...
Read more

LA EXPERIENCIA FASCISTA. DOCTRINA, VIVENCIA Y ... - DDD ...

Document/File: la-experiencia-fascista-doctrina-vivencia-y-ddd-uab.pdf, filesize: n/a. Filetype: pdf.
Read more

#Curtas do Ddd | Episódio 6:EU SOU RICA!!! - YouTube

#Curtas do Ddd | Episódio 6:EU SOU RICA ... Fiquem um tempo sem gravar pois tava fazendo novas experiências,testando o ... #Curtas do Ddd ...
Read more

DDD Servicios Estratégicos

DDD Servicios Estratégicos. 739 likes · 8 talking about this. DDD Servicios Estratégicos les ayuda a optimizar cada uno de sus contactos para aumentar la...
Read more

Enseñanza de las ciencias : - Dipòsit Digital de ...

Sobre el DDD Català ... Enseñanza de las ciencias : revista de investigación y experiencias didácticas Universitat Autònoma de Barcelona.
Read more