Software complexo? Entenda o seu domínio e desenhe um modeloAbordagem sobre o Desenho Dirigido ao Domínio (Domain-Driven  Design ou DDD)
Quem sou eu?Thiago HolderSoftware DeveloperEstudante de Sistemas da Informação
ObjetivoEntender a importância de se pensar em um domínio, a linguagem que você usa para falar sobre ele.
“O desafio da complexidade”
O que é DDD?“ É uma maneira de pensar e um conjunto de prioridades, voltado para a aceleração de projetos de softwares com domínios complicados ”  Eric Evans.
O que o DDD apresenta?Boas práticasPadrõesExperiência
Qual o foco do DDD?Regras de negócio complexosIsolamento entre domíniosReutilizaçãoDomínioBaixo acoplamentoIndependente de tecnologia
Padrões do DDDContextoResumo do problemaPor esta RazãoDiscussão da soluçãoDiscussão do problemaConseqüências, Implementações e exemploResumo do problemaContexto resultante
Partes do DDD
O que é Domínio?Esfera de conhecimento, influência ou atividade.A área em que o usuário utiliza o software.
Modelo?NãoNão
Excesso de informação atrapalha
Modelo
Os ingredientes  de uma modelagem eficaz
Ligando o modelo e a implementaçãoConsultaPaciente**Protótipo rudimentar
Cultivando uma linguagem baseada no modeloConsulta AAgenda()PacienteConsulta BAgenda()Agenda()Consulta CFrases consistentes com a estrutura do modelo e ser entendido sem ambigüidade e sem tradução
Desenvolvendo um modelo rico em conhecimentoConsultaAgendamentoSecretáriaPacienteAtendidoMédicoVerificaDisponibilidadeAgendaCaptar vários tipos de conhecimento
Destilando o modeloAgenda MédicaSecretáriaVerificaPacienteAtendidoAgenda a consultaMédicoConsultaRealizaNovo modelo que distingue o conceito essencial
Colhendo idéia
Linguagem Ubíqua“ Quer dizer que estar em todos os lugares, ou seja onipresente”.
ModelDriven Design (MDD)ModeloDomínioGuiaDesignRefatoraçãoEvoluiSoftware perdido, dependente de tecnologia.Desenvolvedores perdidos.
Distância no o contexto do domínioAnalista de NegócioAnalista de SistemasArquitetoDesenvolvedor
Tijolos de construção
Arquitetura em camadasCamadas dever ter sentido“Verifique suas responsabilidades”As camadas tem que ter separação.
Arquitetura proposta no DDD
Blocos que compõe o modelo
EntidadeEntidade: têm significado no domínioEntidade: possuem identidades
Objeto de valornão tem identidade para o negócioSão imutaveisDescrevem coisas, tipos...Ciclo de vida rápidoExemplo: cores, especialidade, tipo de dados.
AgregadosEntidadeEntidadeObjeto de valorObjeto de valor
Exemplo<<Raiz>>Motor<<Raiz>>CarroRodaClientePosiçãoPosição
Algumas regras
FábricasQuando a criação de um objeto, ou AGREGADO inteiro, se torna complicada ou revela uma grande parte da estrutura interna, as FÁBRICAS fornecem o encapsulamento
Interação básica com uma fábricaA FÁBRICA faz o objeto que satisfaz o cliente e as regras internasO cliente especifica o que querClienteFábricaProdutonovos(parâmetros)criarproduto
ServiçosNão tem estado próprioFica isolado do modeloDefinido como o que ele pode fazer por um “cliente”“Verbo em vez de substantivo”Fala a linguagem ubíqua
Módulos ou PacotesOs módulos existentes na camada de domínio devem surgir como uma parte significativa do modelo.Modelos = HistóriasMódulos = CapítulosMódulos = CapítulosMódulos = CapítulosMódulos = CapítulosMódulos = CapítulosMódulos = Capítulos
Código ClienteEntidadeRepositórioRepositóriosBuscaAgregadoEntidadeEntidadeCriaEntidadeRemoverAgregadoEntidadeAgregado
Linguagem UbíquaDesign Dirigido por ModelosExpressar o modeloNomes entram emIsolar o modeloArquitetura em camadasMódulosServiçosEntidadesObjeto de ValorIntegridadeEncapsulaEncapsularRepositóriosFábricasAcessarAgregados
ObrigadoE-mail:thiagoholder@gmail.comBlog:http//thiagoholder.wordpress.comMsn: thiagoholderSkype: thiagoholder

Uma introdução ao Domain Driven Design