Ddd – Domain driven design
Domain-Driven DesignDomain-DrivenDesign não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domainmodel.
Domain-Driven Design	O modelopode ser expresso de váriasformas, comoumaapresentaçãoem PowerPoint, diagramasem UML, rascunho de papel, peças de Lego, o mesmo o códigodaaplicação.
Padrões	É umaregra de trêspartesqueexpressa a relação entre um contexto1, um problema² e umasolução³.
O que é DDD?Livro de Eric Evans (2004)PadrõesBoas práticasExperiência
Foco: DomínioAlinhamento com negócioIsolamento entre domíniosReutilizaçãoMínimoacoplamentoIndependente de tecnologia
DDDA voltadaOrientação a Objetos?
Padrões no DDD[Contexto][Discussão do problema]Resumo do problemaDiscussãodasoluçãoPorestarazãoResumodasoluçãoConsequências, implementação, exemplos.[Contextoresultante]
DDD
Colocando o modelo de domínioparafuncionarLinguagemUbíqua
Model Driven DesignDomínioGuiaModeloDesignRefatoraçãoDesenvolvedoresperdidos e tecnologiainadequadaSofwarenão serve para o domínioAperfeiçoa
Blocos de Construção doModelDrivenDesign
ArquiteturaemCamadas
Entidades
Objetos de ValoresPraquemnãoprecisa de identidade;Imutáveis;Descrevemcoisas;Ciclo de vidarápido;Exemplos: strings, números, cores.
AgregadosEntidadeAgregadoEntidadeObjeto de ValorObjeto de Valor
FábricasQuandoconstruir (Agregados) for complexo;Devem ser sempreabstratas;Nãofazem parte do modelo, mas do domínio.
ServiçosA operaçaonãofaz parte de nenhumaEntidadeouObjeto de Valor;Interface fala a língua do Domínio;Semestado.
MódulosAgrupeconceitos do modelo, nãocódigo;Baixoacoplamento / altacoesão;NomesdaLinguagemUbíqua.
MódulosModelo = HistóriaMódulo = CapítuloMódulo = CapítuloMódulo = CapítuloMódulo = CapítuloMódulo = CapítuloMódulo = Capítulo
RepositóriosCódigoClienteRepositórioBuscaEntidadeEntidadesCriaAgregadosAgregadosEntidadesAgregadosRemoverEntidades
LinguagemUbíquaModel Driven DesignExpressamodelocomoMódulosServiçosEntidadesObjetosValorAcessa comEncapsula comMantémIntegridade comEncapsula comRepositóriosAgregadosFábricasAcessa comEncapsula com
Refatorandoparacompreenderprofundamente o modelo
Padrõespararefinar o modeloInterfaces de intençãoreveladaEufaçoexatamenteisso. Nãoprecisa se preocuparcomo.
Padrõespararefinar o modeloFunçõessemefeitoscolateraisColocartudo o que for possívelemfunções, principalmenteemcálculoscomplexosOndenãoder, usarcomandosquefazempoucasoperações e nãoretornamobjetos do domínio
Padrõespararefinar o modeloAsserçõesTestes de unidade;Usarfacilidadesdalinguagem;Testam o comportamento dos comandos.
LinguagemUbíquaModel Driven DesigndesenhadasusandoExpressamodeloatravés deInterfaces de IntençãoReveladaTorna efeitoscolateraisexplícitos comAsserçõescria segurase simplesFunçõessemEfeitosColateraisTornacomposiçãosegura
ProjetoEstratégico
ProjetoEstratégico - PadrõesContextoDelimitado	As célulasexistemporquesuamembrana define o queestádentrooufora e determina o quepodeentrar.
ProjetoEstratégico - PadrõesIntegraçãocontínuaFazerfigurapróximo slide
IntegraçãoContínuaNovo Elemento do ModeloCodificaçãoTestes automatizados;Processo de build automático;Sincronizaçãodiária;Relatórios.
ProjetoEstratégico - PadrõesMapa do Contexto
ProjetoEstratégico - PadrõesNúcleoCompartilhadoÉ maisdifícilfazermudanças;Evita (masnãoelimina) duplicações.
ProjetoEstratégico - PadrõesProdutor – ConsumidorTestes automatizadosCliente - Fornecedor
ProjetoEstratégico - PadrõesConformistaTime fornecedornãointeresseemajudar;Tiracomplexidade de tradução entre contextos;Mesmalinguagemubíqua;Parecido  com NúcleoCompartilhado , masclientenão tem poder de modificação.
ProjetoEstratégico - PadrõesCamada Anti-Corrupção
ProjetoEstratégico - PadrõesCaminhosseparadosQuandointegrarcustacaro e o benefício é pequeno;Contextodelimitadoquenão tem nenhumaconexão com osoutros.
ResumindoTrabalhando com um modelo;Blocos de construção;Refatorando e evoluindo;Refinando, destilando.
Refinando um modelo
IssoNão é Tudo
DDDOs padrõescitadossãoapenasalguns dos descritosem Domain Driven Design. DDD é uma forma de desenvolver software que, porestarligado a boas práticas de Orientação a Objetos, tem muito a ver com desenvolvimentoágil. A própriaidéia de Padrões, quepromoveeficácianacomunicação, é um dos valorespregadospelosagilistas. São técnicasquelevarãoaodesenvolvimento de serviços de qualidade, sistemasseguros e fáceis de darmanutenção, levando, consequentemente, à satisfação dos seusclientes com a rapidezque o mercado de hojeexige.
Vantagens de adotar o DDDQuantomaispróximovocêestá do negócio, menossofre com mudançasO entendimento do desenvolvedorsobre o negócio, evitandoerros e ajudando no negócioemsi, questionando e sugerindootimizações.Códigomenosacoplado e maiscoeso.
ConclusãoProcure utilizar DDD emaplicações com domínioscomplexosLinguagemUbíqua e MDD são o cerneda DDDNão se apegue à rigidezconceitual, e claro, não lute contra os frameworks.
ReferênciasEvans, Eric. Domain Driven Design. Addison – Wesley, 2004.http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/en/pdf/DomainDrivenDesignQuicklyOnline.pdfhttp://vimeo.com/3545313

DDD - Domain Driven Design