Modelagem de Domínio Funcional e Reativa (FRDM)

24
O DDD COM DEVERIA SER FUNCTIONAL AND REACTIVE DOMAIN MODELING (FRDM) ÉDSON PATRÍCIO

Transcript of Modelagem de Domínio Funcional e Reativa (FRDM)

Page 1: Modelagem de Domínio Funcional e Reativa (FRDM)

O DDD COM DEVERIA SER

FUNCTIONAL AND REACTIVEDOMAIN MODELING (FRDM)

ÉDSON PATRÍCIO

Page 2: Modelagem de Domínio Funcional e Reativa (FRDM)
Page 3: Modelagem de Domínio Funcional e Reativa (FRDM)

Verde Tecnologia

Programação Funcional Reativa

Visão Computacional

Inteligência Artificial

Page 4: Modelagem de Domínio Funcional e Reativa (FRDM)

Blitz InteligenteMOBILIDADE URBANA

Page 5: Modelagem de Domínio Funcional e Reativa (FRDM)

MOBILIDADE URBANA

SigAnalyzer

Page 6: Modelagem de Domínio Funcional e Reativa (FRDM)

WhereletMOBILIDADE URBANA

Page 7: Modelagem de Domínio Funcional e Reativa (FRDM)
Page 8: Modelagem de Domínio Funcional e Reativa (FRDM)

QUEMSOUEU?

E, se sou, quantos

sou?

Édson Patrício Co-Fundador, Diretor Técnicoe meme “challenge accepted”

Page 9: Modelagem de Domínio Funcional e Reativa (FRDM)

2010 Artigo na Java Magazine

2011 Java Funcionale Scala a sério

2013 Primeiro projeto reativo e FP "puro"

2008 Descoberta de Scala e scala-br

2012 Primeiro grande projeto (WhereLet) com Scala

2009 Fenômeno FP e algumas contribuições

2015 ValetWay

2014 SmartFix

FRDM

Page 10: Modelagem de Domínio Funcional e Reativa (FRDM)

Tem experiência profissional em Java?

E usando DDD?

Perguntas Expressivas

Page 11: Modelagem de Domínio Funcional e Reativa (FRDM)

DDD

Page 12: Modelagem de Domínio Funcional e Reativa (FRDM)

DDDBounded Context

Entities Value Objects

Services

Factories

Aggregates Repositories

Ubiquitous Language

Page 13: Modelagem de Domínio Funcional e Reativa (FRDM)

DDD

State

Domain constraints (laws: rules)

(Problem Domain)

behavior

Page 14: Modelagem de Domínio Funcional e Reativa (FRDM)

FRDMDebasish Ghosh

Functional in the Small, OO in the Large

Page 15: Modelagem de Domínio Funcional e Reativa (FRDM)

FRDM

State ➜Entities ➜ Set of types

Domain constraints (laws: rules)

(Solution Domain)

Behavior ➜Functions

➜ Algebra

Page 16: Modelagem de Domínio Funcional e Reativa (FRDM)

FRDM

1. Design da algebra da sua API

2. Definir a algebra como um serviço do domínio

3. Definir padrão de ciclo de vida do modelo do domíno

(Solution Domain)

Page 17: Modelagem de Domínio Funcional e Reativa (FRDM)
Page 18: Modelagem de Domínio Funcional e Reativa (FRDM)
Page 19: Modelagem de Domínio Funcional e Reativa (FRDM)
Page 20: Modelagem de Domínio Funcional e Reativa (FRDM)

trait AccountService[Account, Amount, Balance] {

def open(no: String, name: String, openingDate: Option[Date]): Try[Account]

def close(account: Account, closeDate: Option[Date]): Try[Account]

def debit(account: Account, amount: Amount): Try[Account]

def credit(account: Account, amount: Amount): Try[Account]

def balance(account: Account): Try[Balance]

def transfer(from: Account, to: Account, amount: Amount): Try[(Account, Account, Amount)] = for { a <- debit(from, amount) b <- credit(to, amount) } yield (a, b, amount)}

Page 21: Modelagem de Domínio Funcional e Reativa (FRDM)

sealed trait AccountTypecase object Checking extends AccountTypecase object Savings extends AccountType

trait AccountService[Account, Amount, Balance] { type AccountOperation[A] = Kleisli[Valid, AccountRepository, A]

def open(no: String, name: String, rate: Option[BigDecimal], openingDate: Option[Date], accountType: AccountType): AccountOperation[Account]

def close(no: String, closeDate: Option[Date]): AccountOperation[Account]

def debit(no: String, amount: Amount): AccountOperation[Account]

def credit(no: String, amount: Amount): AccountOperation[Account]

def balance(no: String): AccountOperation[Balance]

def transfer(from: String, to: String, amount: Amount): AccountOperation[(Account, Account)] = for { a <- debit(from, amount) b <- credit(to, amount) } yield ((a, b))}

Page 22: Modelagem de Domínio Funcional e Reativa (FRDM)

Algebra Algebra como contrato

Não precisa se manter entre os Bounded Contexts

Desacopla espaço e tempo

Vocabulário separado

A menor abstração que resolve o problema

Page 23: Modelagem de Domínio Funcional e Reativa (FRDM)

Saiba mais…https://github.com/debasishg/frdomain

http://debasishg.blogspot.com.br

Functional Patterns in Domain Modeling - Anemic Models and Compositional Domain Behaviors:

http://debasishg.blogspot.com.br/2014/05/functional-patterns-in-domain-modeling.html

Page 24: Modelagem de Domínio Funcional e Reativa (FRDM)

FRDMFUNCTIONAL AND REACTIVE DOMAIN MODELING

ÉDSON PATRÍCIO

Muito Obrigado