Modelagem de Domínio Funcional e Reativa (FRDM)
-
Upload
edson-patricio -
Category
Software
-
view
70 -
download
2
Transcript of Modelagem de Domínio Funcional e Reativa (FRDM)
![Page 1: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/1.jpg)
O DDD COM DEVERIA SER
FUNCTIONAL AND REACTIVEDOMAIN MODELING (FRDM)
ÉDSON PATRÍCIO
![Page 2: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/2.jpg)
![Page 3: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/3.jpg)
Verde Tecnologia
Programação Funcional Reativa
Visão Computacional
Inteligência Artificial
![Page 4: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/4.jpg)
Blitz InteligenteMOBILIDADE URBANA
![Page 5: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/5.jpg)
MOBILIDADE URBANA
SigAnalyzer
![Page 6: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/6.jpg)
WhereletMOBILIDADE URBANA
![Page 7: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/7.jpg)
![Page 8: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/8.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/9.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/10.jpg)
Tem experiência profissional em Java?
E usando DDD?
Perguntas Expressivas
![Page 11: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/11.jpg)
DDD
![Page 12: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/12.jpg)
DDDBounded Context
Entities Value Objects
Services
Factories
Aggregates Repositories
Ubiquitous Language
![Page 13: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/13.jpg)
DDD
State
Domain constraints (laws: rules)
(Problem Domain)
behavior
![Page 14: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/14.jpg)
FRDMDebasish Ghosh
Functional in the Small, OO in the Large
![Page 15: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/15.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/16.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/17.jpg)
![Page 18: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/18.jpg)
![Page 19: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/19.jpg)
![Page 20: Modelagem de Domínio Funcional e Reativa (FRDM)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/20.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/21.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/22.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/23.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022020203/58729e511a28ab07208b52f7/html5/thumbnails/24.jpg)
FRDMFUNCTIONAL AND REACTIVE DOMAIN MODELING
ÉDSON PATRÍCIO
Muito Obrigado