domain driven design seminario show me the code

32
Domain-Driven Design Projeto Orientado a Domínio com PHP Paulo Victor L. L. Gomes [email protected] www.profpv.com www.profpv.com/blog github.com/pvgomes github.com/profpv bitbucket.org/profpv

Upload: paulo-victor-gomes

Post on 07-Dec-2014

324 views

Category:

Technology


1 download

DESCRIPTION

Domain Driven Design Seminario Show me The Code em Porto Alegre - RS

TRANSCRIPT

Page 1: Domain Driven Design Seminario Show me The Code

Domain-Driven Design

Projeto Orientado a Domínio com PHP

Paulo Victor L. L. [email protected]/blog

github.com/pvgomesgithub.com/profpvbitbucket.org/profpv

Page 2: Domain Driven Design Seminario Show me The Code

Licenciamento desta apresentação

BY - NC - SACompartilhe - Mantenha a licença - Não comercial

http://creativecommons.org/licenses/by-nc-sa/3.0/

Page 3: Domain Driven Design Seminario Show me The Code

Domain-Driven Design?Domain-Driven Design é uma abordagem para o Desenvolvimento de Software que estabelece uma forte ligação entre a implementação e o modelo evolutivo dos conceitos de negócio. Implementação X Negócios

Não é uma tecnologia ou uma metodologia. DDD fornece uma estrutura de práticas e terminologia para a tomada de decisões de design. O foco é acelerar os projetos de software e alinhar com os domínios de negócio.

Page 4: Domain Driven Design Seminario Show me The Code

Não faz sentidoOnde eu coloco a minha regra de negócio?

Resposta desse cara ao lado no contexto em que ele se encontra: “Na camada de apresentação, no banco de dados nos controles, modelos, na configuração do webserver e não esquece do xml”

Page 5: Domain Driven Design Seminario Show me The Code

Encapsulamento...Encapsule a regra de negócio! Fazendo isso, garantimos consistência e simplicidade.

Page 6: Domain Driven Design Seminario Show me The Code

Orientação a Objetos?

Page 7: Domain Driven Design Seminario Show me The Code

Orientação a ObjetosMeu framework já usa Orientação a Objetos. Esse papo é muito antigo e eu já superei esse problema.

Page 8: Domain Driven Design Seminario Show me The Code

Orientação a ObjetosOlhem meus métodos:

Page 9: Domain Driven Design Seminario Show me The Code

Orientação a ObjetosQuando pensamos em POO logo pensamos em Classes, Encapsulamento, Polimorfismo, Herança...

POO é mais que isso, a essência da POO é alinhamento do código com o negócio, reutilização, mínimo de acoplamento, linguagem natural...

Page 10: Domain Driven Design Seminario Show me The Code

DDD na práticaColocando o modelo de domínio para funcionar.

Para que um software atenda um domínio, é necessário que se estabeleça, em primeiro lugar, uma Linguagem Ubíqua(Linguagem comum, com termos bem definidos, que fazem parte do domínio do negócio e que são usados por todas as pessoas que fazem parte do processo de desenvolvimento de software)

“Temos que emitir a fatura para o cliente antes da data limite”

Uma classe para a entidade Cliente;Uma classe para a entidade Fatura;Algum serviço que tenha um método emitir;Algum atributo com o nome de data limite.

Essa linguagem ubíqua deve ser compreendida por todos e não pode haver ambiguidades.

Page 11: Domain Driven Design Seminario Show me The Code

Linguagem UbíquaDefinições de Ubíqua

“O termo foi usado pela primeira vez pelo cientista Norte-Americano Mark Weiser em 1988 e publicado em 1991 no seu artigo The Computer for the 21st Century”

“termo usado para descrever a onipresença da informática no cotidiano das pessoas”

“Computação ubíqua tem como objetivo tornar a interação homem computador invisível, ou seja, integrar a informática com as ações e comportamentos naturais das pessoas”

Page 12: Domain Driven Design Seminario Show me The Code

Projeto Dirigido pelo Modelo (Model Driven Design – MDD). A ideia por trás de MDD é a de que o seu modelo abstrato deve ser uma representação perfeita do seu domínio.

MDD – Model Driven Design

O MDD defende o processo ágil, o trabalho em equipe ou seja, especialistas em negócio, desenvolvedores e arquitetos trabalhando juntos.

Diagramas da UML ajudam o entedimento do domínio.

Page 13: Domain Driven Design Seminario Show me The Code

Encapsulando o modelo de domínio.

Blocos de ConstruçãoInterface de Usuário – Interação com o usuário;

Aplicação – essa camada não possui lógica de negócio. Ela é apenas uma camada fina, responsável por conectar a Interface de Usuário às camadas inferiores;

Domínio – representa os conceitos, regras e lógicas de negócio. Todo o foco de DDD está nessa camada. Nosso trabalho, daqui para frente, será aperfeiçoar e compreenderprofundamente essa parte;

Infra-estrutura – fornece recursos técnicos que darão suporte às camadas superiores. São normalmente as partes de um sistema responsáveis por persistência de dados, conexões com bancos de dados, etc.

Page 14: Domain Driven Design Seminario Show me The Code

Entidades

Muitos objetos não são fundamentalmente definidos por seus atributos, mas sim por uma linha de continuidade e identidade

Page 15: Domain Driven Design Seminario Show me The Code
Page 16: Domain Driven Design Seminario Show me The Code

Objetos de valor

Muitos objetos não possuem nenhuma identidade conceitual. Esses objetos descrevem alguma característica de alguma coisa.

Page 17: Domain Driven Design Seminario Show me The Code
Page 18: Domain Driven Design Seminario Show me The Code

Serviços

Ás vezes, a situação simplesmente não se trata de alguma coisa. Em algums casos, um design mais limpo e mais pragmático inclui operações que não pertencem conceitualmente a nenhum objeto. Em vez de forçar a questão, podemos seguir os limites naturais do espaço do problema e incluir SERVIÇOS explicitamente no modelo.

Page 19: Domain Driven Design Seminario Show me The Code
Page 20: Domain Driven Design Seminario Show me The Code

Agregados

O design detalhado de associações ajuda a simplificar um comportamento de um objeto mas, em diversos casos, existe a necessidade de explorar a modelagem se adequando com o domínio complexo.

Page 21: Domain Driven Design Seminario Show me The Code
Page 22: Domain Driven Design Seminario Show me The Code

Fábricas

Quando a criação de um objeto ou um AGREGADO inteiro se torna complicada ou revela uma grande parte de estrutura interna, as FÁBRICAS fornecem o encapsulamento.

Page 23: Domain Driven Design Seminario Show me The Code
Page 24: Domain Driven Design Seminario Show me The Code

Repositórios

Associações nos permitem achar um objeto baseado em sua relação com outro objeto. Mas é preciso ter um ponto de partida para uma travessia até uma ENTIDADE ou um VALOR no meio do seu ciclo de vida.

Page 25: Domain Driven Design Seminario Show me The Code
Page 26: Domain Driven Design Seminario Show me The Code

Tijolos de construção

Page 27: Domain Driven Design Seminario Show me The Code

Plataforma EducacionalMagiZ, a Plataforma Educacional Online completa, configurável e fácil de usar.www.magiz.com.br

Page 28: Domain Driven Design Seminario Show me The Code

Tecnologias utilizadas

Page 29: Domain Driven Design Seminario Show me The Code

Arquitetura base

Page 31: Domain Driven Design Seminario Show me The Code

Perguntas?

Page 32: Domain Driven Design Seminario Show me The Code

ReferênciaTudo sobre DDDhttp://dddcommunity.org/

Mini-book de DDDhttp://www.infoq.com/minibooks/domain-driven-design-quickly

Domain Driven Designhttp://domaindrivendesign.org/

Vídeo de Introdução a DDDhttp://vimeo.com/3545313

Vídeos sobre Projeto Estratégiohttp://vimeo.com/3972348

http://www.infoq.com/presentations/strategic-design-evans

Vídeo Colocando o Modelo para Funcionarhttp://www.infoq.com/presentations/model-to-work-evans