Voi*_*ter 5 java architecture design-patterns scala
我们有一个在多个层中实现的java系统.在最低级别,有一些服务可以抽象出一系列基础架构组件,例如数据库,blob存储,处理队列等......最重要的是,我们有域层实现使用其中一个或多个的工作流服务(使用命令和复合命令模式).最后,在其上面有一个基于jax-rs(jersey)的层,它提供了根据域层的工作流实现的REST接口/协议.
我对Scala的经验是有限的,但我怀疑它可能是编写更具表现力的域层版本的好工具,因为Java代码非常冗长且有时难以调试.部分原因是命令组合和执行的控制由具体命令扩展的基类处理.事后看来,这可能不是一个理想的设计选择.
我希望这个非常高级别的描述能够说明我想要实现的目标.如果我需要更具体,请告诉我.我最感兴趣的是如何在保持基于Java的服务层的同时使用Scala构建域层.此外,关于如何在域层之上实现http/REST协议以便可以将其部署在java Web应用程序容器中的建议也将非常有趣.
从战术上讲,一个明显的起点是利用 Scala 的结构类型并考虑将命令表示为特征:
trait CommandType1 { def operation() }
Run Code Online (Sandbox Code Playgroud)
然后就可以根据这些特征构建您的命令组合:
case class CompositeCommand(commandOperand: CommandType1*) extends CommandType1 {
def operation() = commandOperand foreach { _.operation() }
}
Run Code Online (Sandbox Code Playgroud)
对于工作流层来说,Scala 相对于 Java 的另一个优势是您可以将命令定义为可传递的函数。这使得创建表示抽象操作的通用高级命令,然后为常用/访问的工作流程创建和存储这些命令的部分功能成为可能。
面向前端的 Scala 协议层可以考虑旋转 Actor 来处理传入的请求。此外,可能值得研究一下Scala 的 Cake Pattern之类的东西,以提供 DI 来控制您的业务逻辑,并在前端代码中提供用于动态调度的多种方法。