Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Modelagem de Domínio Funcional e Reativa (FRDM)

259 views

Published on

Quando migramos para funcional, sentimos muita falta de algo que disciplinasse alguns aspectos da arquitetura e práticas de engenharia. A FP muitas vezes parece de "atuação local", como se as várias partes do código "tocassem músicas diferentes", difícil de orquestrar. Microserviços ajudam muito, mas não é uma disciplina unificada, uma referência universal a seguir. Nos afogávamos nos milhões de formas que FP tem de fazer a mesma coisa. Faltava algo como o DDD faz com OO. Então achamos FRDM. Usamos há pouco tempo e não temos convicção ainda se é tudo que achamos que é, mas parece ser um caminho. Numa apresentação de FRDM, certamente deixarei mais perguntas que respostas. Até porque não acreditamos em bala de prata.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Modelagem de Domínio Funcional e Reativa (FRDM)

  1. 1. O DDD COM DEVERIA SER FUNCTIONAL AND REACTIVE
 DOMAIN MODELING (FRDM) ÉDSON PATRÍCIO
  2. 2. Verde Tecnologia Programação Funcional Reativa Visão Computacional Inteligência Artificial
  3. 3. Blitz Inteligente MOBILIDADE URBANA
  4. 4. MOBILIDADE URBANA SigAnalyzer
  5. 5. Wherelet MOBILIDADE URBANA
  6. 6. QUEM
 SOU
 EU? E, se sou, 
 quantos 
 sou? Édson Patrício Co-Fundador, Diretor Técnico
 e meme “challenge accepted”
  7. 7. 2010 Artigo na Java Magazine 2011 Java Funcional
 e 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
  8. 8. Tem experiência profissional em Java? E usando DDD? Perguntas Expressivas
  9. 9. DDD
  10. 10. DDD Bounded Context Entities Value Objects Services Factories Aggregates Repositories Ubiquitous Language
  11. 11. DDD State Domain constraints (laws: rules) (Problem Domain) behavior
  12. 12. FRDM Debasish Ghosh Functional in the Small, OO in the Large
  13. 13. FRDM State ➜ Entities ➜ Set of types Domain constraints (laws: rules) (Solution Domain) Behavior ➜ Functions ➜ Algebra
  14. 14. 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)
  15. 15. 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) }
  16. 16. sealed trait AccountType case object Checking extends AccountType case 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)) }
  17. 17. 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
  18. 18. 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
  19. 19. FRDM FUNCTIONAL AND REACTIVE DOMAIN MODELING ÉDSON PATRÍCIO Muito Obrigado

×