57
Arquitetura e modelagem de Software orientada a domínio Domain Driven Design Lorival Smolski Chapuis MCPD ASP.NET http://blog.lorival.com / [email protected] Centro de Inovação Microsoft SOCIESC 2010 Sociedade Educacional de Santa Catarina

Domain driven design - Visão Geral

Embed Size (px)

Citation preview

Page 1: Domain driven design - Visão Geral

Arquitetura e modelagem de Software orientada a domínio

Domain Driven Design

Lorival Smolski ChapuisMCPD ASP.NET

http://blog.lorival.com / [email protected]

Centro de Inovação MicrosoftSOCIESC 2010

Sociedade Educacional de Santa Catarina

Page 2: Domain driven design - Visão Geral

“... 1 hora não dá pra nada. Você vai mostrar amecânica do DDD, e o pessoal vai sair achando queDDD é entidades+repositórios... Já percebi que pormais esforço que façamos, técnicos tendem asimplificar o que viram, e sobra só isso na cabeçadeles ...”

Giovani BassiArquiteto de Software, MVP

Considerações iniciais

2

Page 3: Domain driven design - Visão Geral

• O que é Domain Driven Design• Surgimento, objetivos e vantagens• Essência do Domain Driven Design• Modelando um domínio real• Regras para modelagem• Arquitetura em camadas• Caixa de ferramentas Microsoft• Apresentação de uma aplicação• Considerações finais

Agenda

3

Page 4: Domain driven design - Visão Geral

É uma abordagem de design de softwaredisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

4

Page 5: Domain driven design - Visão Geral

É uma abordagem de design de softwareDisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

5

Page 6: Domain driven design - Visão Geral

É uma abordagem de design de softwareDisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

6

É todo e qualquer conhecimento (esfera de conhecimento) utilizado em uma

determinada área.Um domínio possuí regras de negócio.

Page 7: Domain driven design - Visão Geral

É uma abordagem de design de softwareDisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

7

Page 8: Domain driven design - Visão Geral

É uma abordagem de design de softwareDisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

8

Pode ser expresso de várias formas: apresentação de slides, UML, rascunhos

em papel, organograma, etc...

Page 9: Domain driven design - Visão Geral

É uma abordagem de design de softwareDisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

9

Page 10: Domain driven design - Visão Geral

É uma abordagem de design de softwareDisciplinada que reúne um conjunto deconceitos, técnicas e princípios paraconstrução de softwares baseados em ummodelo de domínio.

Domain Driven Design

10

Object Orientedprogramming

UbiquitousLanguage

Domainpatterns

Layeredarchitecture

Design patterns

...

...

Page 11: Domain driven design - Visão Geral

Surgimento

11

Há 20 anos criam-se padrões

e técnicas para arquitetura emodelagem de softwareOrientada a Objetos.

Há 6 anos Eric Evanscompilou várias destastécnicas e unindo com suasexperiências criou o DDD

Page 12: Domain driven design - Visão Geral

Há 20 anos criam-se padrões

e técnicas para arquitetura emodelagem de softwareOrientada a Objetos.

Há 6 anos Eric Evanscompilou várias destastécnicas e unindo com suasexperiências criou o DDD

Surgimento

12

Design de domínio

Pouco foi escrito sobre isso

Não se tinha claro como

deveria ser feito

Page 13: Domain driven design - Visão Geral

Há 20 anos criam-se padrões

e técnicas para arquitetura emodelagem de softwareOrientada a Objetos.

Há 6 anos Eric Evanscompilou várias destastécnicas e unindo com suasexperiências criou o DDD

Surgimento

13

Padrões de arquitetura

Mais de 10 anos como arquiteto

de software

Boas práticas

Padrões de desenvolvimento

Grandes e pequenos projetos

Page 14: Domain driven design - Visão Geral

1. Aproximar desenvolvimentode software do domínio doproblema.

2. Aumentar a vida de umsoftware.

3. Ter códigos mais claros efáceis de entender.

4. Utilizar o principal recurso daorientação a objetos: aaproximação do mundo realatravés de abstrações.

Objetivos

14

Page 15: Domain driven design - Visão Geral

Vantagens

15

1. Fácil comunicação entredesenvolvedores, analistas eclientes.

2. Construir software testáveis.

3. Fácil manutenção ecrescimento do software.

4. Agregar ou trocarcolaboradores na equipe dedesenvolvimento não é maisum problema.

5. Entenda o cliente, o modelo eo código.

Page 16: Domain driven design - Visão Geral

• Para a maioria dos projetos de software o focoprincipal deve ser no domínio

• O modelo deve ser baseado em um domínio

• Você conhece software, o BusinessExpert conheceo domínio, ouve-o.

• A Ubiquitous Language deve predominar desde oBusinessExpert até a equipe de desenvolvimento

Essência do Domain Driven Design

16

Page 17: Domain driven design - Visão Geral

Modelos são baseados em abstrações

17

Page 18: Domain driven design - Visão Geral

Modelos são baseados em abstrações

18

Page 19: Domain driven design - Visão Geral

Modelos são baseados em abstrações

19

Page 20: Domain driven design - Visão Geral

Modelos são baseados em abstrações

20

Page 21: Domain driven design - Visão Geral

Modelos são baseados em abstrações

21

Page 22: Domain driven design - Visão Geral

Modelos são baseados em abstrações

22

Page 23: Domain driven design - Visão Geral

Modelos são baseados em abstrações

23

Page 24: Domain driven design - Visão Geral

Modelos são baseados em abstrações

24

Page 25: Domain driven design - Visão Geral

• Objetivo principal: Extrair empresas de sites

Vamos modelar...

25

Empresa: Emp ARua A, 001. cep: AA

Cidade: Cidade A, AA

Empresa: Emp BRua B, 002. cep: BB

Cidade: Cidade B, BB

Empresa: Emp CRua C, 003 . cep: CC

Cidade: Cidade C, CC

Empresa Rua Nº CEP Cidade Estado

Emp A A 001 AA Cidade A AA

Emp B B 002 BB Cidade B BB

Emp C C 003 CC Cidade C CC

Page 26: Domain driven design - Visão Geral

Atividades atuais

26

Page 27: Domain driven design - Visão Geral

Regras de modelagem

27

Page 28: Domain driven design - Visão Geral

• São identificadas através de uma identidade• Um objeto pode ter uma identidade em um domínio

e não ter em outro

versus

• Se uma entidade mudar a regra de negócio é afetada

Entidades

28

Page 29: Domain driven design - Visão Geral

• São identificadas através de suas propriedades (atributos)

• Um objeto de valor não pode ser alterado, ele é sempre removido e adicionado um novo

• Não são o foco do negócio

Objetos de valor

29

Page 30: Domain driven design - Visão Geral

Atividades atuais

30

Page 31: Domain driven design - Visão Geral

Entidades

31

Page 32: Domain driven design - Visão Geral

Atividades atuais

32

Page 33: Domain driven design - Visão Geral

Entidades

33

Page 34: Domain driven design - Visão Geral

Atividades atuais

34

Page 35: Domain driven design - Visão Geral

Entidades

35

Page 36: Domain driven design - Visão Geral

Atividades atuais

36

Page 37: Domain driven design - Visão Geral

Objetos de valor

37

Page 38: Domain driven design - Visão Geral

Objetos de valor

38

Page 39: Domain driven design - Visão Geral

• Reúnem entidades e objetos de valor de modo a fazer sentido para o negócio.

• Definem fronteiras claras

• Toda agregação tem uma raiz

Agregações

39

Page 40: Domain driven design - Visão Geral

Agregações

40

Page 41: Domain driven design - Visão Geral

Agregações

41

Page 42: Domain driven design - Visão Geral

Agregações e suas raizes

42

Page 43: Domain driven design - Visão Geral

Agregações e suas raízes

43

Page 44: Domain driven design - Visão Geral

• Fingem que tem todos os dados em memória.

• Para o consumidor do repositório não faz diferença onde está o objeto.

• São responsáveis por guardar ou destruir objetos.

Repositórios

44

Page 45: Domain driven design - Visão Geral

Repositórios

45

Page 46: Domain driven design - Visão Geral

Modelo incompleto

46

Page 47: Domain driven design - Visão Geral

• Resolvem problemas de negócio mas não sãoentidades nem objetos de valor, pois possuemapenas comportamentos e não estados de negócio.

Serviços

47

Page 48: Domain driven design - Visão Geral

Serviços

48

Page 49: Domain driven design - Visão Geral

• Cria objetos complexos ou que possuam dificuldade de construir.

• Será responsabilidade de um objeto se construir?

Fábricas

49

Page 50: Domain driven design - Visão Geral

Fábricas

50

Page 51: Domain driven design - Visão Geral

Modelo completo

51

Page 52: Domain driven design - Visão Geral

Arquitetura

52

Page 53: Domain driven design - Visão Geral

• Mínimo:– Microsoft Visual Studio 2010 (IDE)– Microsoft.Net Framework

• Comum:– Microsoft Entity Framework 4.0 (ORM)– Microsoft Unity Framework (Inje. Dependência)– Microsoft Sql-Server 2008

• Recomendado:– Microsoft Test (Testes automatizados)– Code Coverage– Microsoft MVC Framework (web)

Caixa de ferramentas

53

Page 54: Domain driven design - Visão Geral

Aplicação

54

Page 55: Domain driven design - Visão Geral

Considerações finais

55

Page 56: Domain driven design - Visão Geral

Considerações finais

56

Page 57: Domain driven design - Visão Geral

Domain Driven Design

Dúvidas?

Centro de Inovação MicrosoftSOCIESC 2010

Sociedade Educacional de Santa Catarina

Lorival Smolski ChapuisMCPD ASP.NET

http://blog.lorival.com / [email protected]