Domain driven design com functional programing(f#)

65

Transcript of Domain driven design com functional programing(f#)

Page 1: Domain driven design com functional programing(f#)
Page 2: Domain driven design com functional programing(f#)
Page 3: Domain driven design com functional programing(f#)

De onde veio e porque voltou?

Page 4: Domain driven design com functional programing(f#)
Page 5: Domain driven design com functional programing(f#)
Page 6: Domain driven design com functional programing(f#)
Page 7: Domain driven design com functional programing(f#)
Page 8: Domain driven design com functional programing(f#)

Menos código

Page 9: Domain driven design com functional programing(f#)
Page 10: Domain driven design com functional programing(f#)

Higher order function

Page 11: Domain driven design com functional programing(f#)

Pure function

Page 12: Domain driven design com functional programing(f#)

Currying

Page 13: Domain driven design com functional programing(f#)

Recursion

Page 14: Domain driven design com functional programing(f#)
Page 15: Domain driven design com functional programing(f#)
Page 16: Domain driven design com functional programing(f#)

Map

Page 17: Domain driven design com functional programing(f#)

List comprehension or for comprehension

Page 18: Domain driven design com functional programing(f#)

Filter

Page 19: Domain driven design com functional programing(f#)

Pattern Matching

Page 20: Domain driven design com functional programing(f#)

Fold

Page 21: Domain driven design com functional programing(f#)
Page 22: Domain driven design com functional programing(f#)
Page 23: Domain driven design com functional programing(f#)
Page 24: Domain driven design com functional programing(f#)
Page 25: Domain driven design com functional programing(f#)
Page 26: Domain driven design com functional programing(f#)
Page 27: Domain driven design com functional programing(f#)
Page 28: Domain driven design com functional programing(f#)

Herança/Polimorfismo

Page 29: Domain driven design com functional programing(f#)
Page 30: Domain driven design com functional programing(f#)

Herança

Page 31: Domain driven design com functional programing(f#)

Polimosfismo

Page 32: Domain driven design com functional programing(f#)
Page 33: Domain driven design com functional programing(f#)
Page 34: Domain driven design com functional programing(f#)
Page 35: Domain driven design com functional programing(f#)
Page 36: Domain driven design com functional programing(f#)
Page 37: Domain driven design com functional programing(f#)
Page 38: Domain driven design com functional programing(f#)
Page 39: Domain driven design com functional programing(f#)
Page 40: Domain driven design com functional programing(f#)
Page 41: Domain driven design com functional programing(f#)
Page 42: Domain driven design com functional programing(f#)
Page 43: Domain driven design com functional programing(f#)

Principais pontos do DDD

Page 44: Domain driven design com functional programing(f#)

Alinhamento de código com Negócio

Page 45: Domain driven design com functional programing(f#)

Favorece a reutilização

Page 46: Domain driven design com functional programing(f#)

Diminui o Acoplamento

Page 47: Domain driven design com functional programing(f#)

Independência de Tecnologia

Page 48: Domain driven design com functional programing(f#)

In DDD, we don’t consider any databases.

DDD is all about the domain , not about the database, and Persistence

The domain layer is the heart of the software and this is where the interesting stuff happens

DDD não é uma bala de prata para todo o desenvolvimento do aplicativo, ele apenas ajuda a gerenciar a complexidade, quando a complexidade vem do domínio.

Eric Evans

Page 49: Domain driven design com functional programing(f#)

Tudo se resume à complexidade do comportamento em seu sistema. Se você complicada e a cada mudança de regras de negócios que envolvem a validação, cálculos, e derivações ... você vai querer um modelo de objeto.

Martin Fowler

Page 50: Domain driven design com functional programing(f#)

Layers

Page 51: Domain driven design com functional programing(f#)

User interface

Responsável por apresentar informações ao usuário e interpretar os comandos do usuário.

Page 52: Domain driven design com functional programing(f#)

Coordena a atividade de aplicativos.

Aplication layer

Page 53: Domain driven design com functional programing(f#)

Domain layer

Contém informações sobre o domínio do negócio.

Page 54: Domain driven design com functional programing(f#)

Infrastructure layer

Esta camada atua como uma biblioteca de suporte para todas as outras camadas. Ele fornece comunicação entre as camadas, implementa persistência para objetos de negócios

Page 55: Domain driven design com functional programing(f#)
Page 56: Domain driven design com functional programing(f#)
Page 57: Domain driven design com functional programing(f#)
Page 58: Domain driven design com functional programing(f#)

Value Object != EntityVocê compra um livro para formar a biblioteca. Se você perder esse livro e comprar outro e você não se importa qual é qual, em seguida, o livro é um Value Object.

Mas se o livro que você compra é assinada pelo autor, e é muito difícil substituí-lo. Você se preocupa com esse livro específico, outra cópia simples não irá substituí-lo. Esse livro é uma Entity.

Page 59: Domain driven design com functional programing(f#)
Page 60: Domain driven design com functional programing(f#)
Page 61: Domain driven design com functional programing(f#)

F# / DDD

Page 62: Domain driven design com functional programing(f#)
Page 63: Domain driven design com functional programing(f#)
Page 65: Domain driven design com functional programing(f#)