➡️ 引言
近两年,一直在折腾用FP与OO共存的编程语言Scala,采取以函数式编程为主的方式,结合TDD和BDD的手段,采用Domain Driven Design的方法学,去构造DDDD应用(Domain Driven Design & Distributed)。期间,尝试了大量的框架:业务领域主要适用Akka、Scalaz等框架,UI和基础设施方面主要适用Spring、Kafka等框架,测试则主要适用Spock、ScalaTest、Selenium等框架。
两年的折腾,不能说没有一点收获。在核心的领域模型设计方面,通过尝试用传统Akka的Actor包裹聚合,以自定义的Command和Event进行信息交换,用Free Monad构造表达树实现延迟计算,用Akka Persistence实现Event Store,用Kafka维护命令和事件队列,让我依稀看到了以FP的方式实现ES+CQRS架构应用的曙光。
但如此多的框架不仅让人眼花缭乱,还要学习Scala、Groovy、Java等编程语言以及Gradle等Build工具的DSL,如果再加上Cluster、Cloud和Micro Service,这无疑是一个浩大的工程。所幸,伴随Akka 2.6版本推出的Akka Typed,解决了消息难以管理、框架入侵过甚、节点部署繁复等痛点和难点。特别是在ES和CQRS方面,Akka Typed可以说是提供了一个完整的解决方案。就如同当初LINQ的出现一样,给我打开了一扇新的窗口。
以下,便是我学习Akka Typed官方文档时随看随写留下的笔记(语种Scala,版本2.6.5,在学习过程中已更新至2.6.6),以备查考。内容和路线均以我个人的关注点为主,所以只是节选且难免有失偏颇。