DomainDriven DesignProgramando com prazer com DDDGiovanni BassiMVP, MCSD, MCPD, CSM
Giovanni BassiArquiteto de softwareConsultoria, gestão e mentoringTreinamentoMicrosoft MostValuable Professional em C# (MVP)InetaBoardMemberC#, VB, J#, F#, etc....Net de Beta a BetaDezenas de artigos na .Net MagazineEditor técnico da .Net MagazinePalestranteProfessor universitárioLíder e fundador do .Net Architects
Online @:Email: giggio@giggio.net Blog: http://unplugged.giggio.netSite: http://giovannibassi.comTwitter: @giovannibassi
ObjetivoEntender porque é mais divertido programar com DDD
Agenda
Visão de futuroou... 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?
Focado no banco?
Focado no domínio!
Motivo 1:Estamos livres do banco de dados!(pelo menos até o final da iteração)
Quais são as duas principais premissas do DDD?“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.”Eric Evans
Domínio?Esfera de conhecimento, influênciaouatividade.A áreaemque o usuárioutiliza o software.
Motivo 2:Acabou a briga com o usuário!
Modelo?Não...
Não precisa ser impecavelmente realistaO mundo segundo os chineses do século XVIII
Usadopara resolver problemas
Modelos são abstraçõesIsso quer dizer que o que não interessa fica de foraSe você conseguir equalizar isso, o modelo é perfeitoModelos devem refletir o código ou são irrelevantes
Não há padrão para um modeloEle pode ser assim...Ou assim...
No modelo vão...
Motivo 3:Use o que faz sentido pra você e para sua empresa!
UbiquitousLanguage(está em toda parte)Vem dos business expertsÉ refletida no modeloÉ refletida no códigoÉ falada pelo time
NãoSim“Carga”“Conta corrente”“Serviço de tradução de itinerário”“Repositório de clientes”“Agendamento de horário”“Tabela”“Classe”“Thread”“Banco de dados”“Façade”“.Net 3.5”
Ouça o Business ExpertÉ ele quem conhece o problema, não você
Motivo 4:Entenda o cliente!Entenda o resto do time.Entenda o código!
CamadasCamadas devem fazer sentido (verifique suas responsabilidades)Se não separou não é camadaLayers != Tiers
“Esta camada é o coração de um software de negócios”Eric Evans
Motivo 5:Livre-se do código macarrônico que mistura responsabilidades
Entidades têm significado no domínioEntidades possuem identidadeCores:AzulAmareloVerdeVermelhoObjetos de valor não tem identidade para o negócioObjetos de valor são reconhecidos por seus atributosObjetos de valorfreqüentemente são imutáveis
Agregaçõesreunem entidades e objetos de valor de maneira que faça sentido para o negócioAgregações definem fronteirasclarasToda agregação tem uma raiz
Algumas regras...
()Utilize:POCOsPlain Old CLR ObjectsBom e velhoobjeto do CLR
Motivo 6:Classes de negócio de verdade são muito mais fáceis de entender.
Serviços resolvem problemas de negócio mas não são entidades nem objetos de valorServiços não possuem estado de negócio
Motivo 7:Resolvido o problema de “onde eu ponho esse método?”
Factories criam objetosLevemente diferente das factories de padrões de projetoObjetos devem ser criados consistentesSerá responsabilidade de um objeto se construir?
Como criar qualquer destes objetos?Só com factories
Motivo 8:Defina claramente onde seus objetos nascem.Fim dos problemas de referência circular em entidades.
Repositórios fingem que têm todos os dados na memóriaPara o consumidor do repositório não faz muita diferença onde está o objetoOs Repositórios são os responsáveis por persistir e destruir os objetos
publicvoidUpdateCustomer(Customercustomer)        {using (var transaction = _session.BeginTransaction())            {try                {                    _session.Update(customer);transaction.Commit();                }catch (NHibernate.HibernateException)                {transaction.Rollback();throw;                }            }        }
Algumas regras...
Mais regras...
Esclarescendo...A idéia do repositório vem do repositorypattern (Fowler, PoEAA)DDD != Repositorypattern
Motivo 9:Fim (quase) dos problemas de transação.
Motivo 10:Um ponto único para obter e salvar as entidades
Ciclo de vida:Factories criamRepositórios recuperamRepositórios alteramRepositórios destroem
Motivo 11:Definições claras de come interagir com dados persistentes.
Processo
Funciona assim?
Feedback é fundamentalO tempo todo!
Assim é bem mais fácil
Aceite as mudanças...... não brigue com elas
Motivo 12:DDD + agilidade =(Paz * Produtividade) ^ 		satisfação do cliente
DDD pode dar trabalhoEntão o foco são projetos com regras de negócio complexas
Downloads
ReferênciasDomainLanguage (empresa do Evans)http://domainlanguage.com/Grupo do Yahoo sobre DDD (eminglês)http://groups.yahoo.com/group/domaindrivendesignGreg Young(MVP - eminglês)http://codebetter.com/blogs/gregyoung/Domain Driven Design.org (eminglês)http://www.domaindrivendesign.org/Jimmy Nilsson (eminglês)http://jimmynilsson.com
Recomendação de leitura
Demonstração
Perguntas?
Não se esqueçam de preencher as fichas de avaliação
Obrigado!Giovanni Bassigiggio@giggio.nethttp://giovannibassi.com

Programando com prazer com DDD