当前位置: 首页 > 知识库问答 >
问题:

使用Scala实现一个域层,该域层跨越一系列基于java的服务

易阳云
2023-03-14

我们有一个java系统,它在几个层中实现。在最低层,有些服务抽象了一系列基础结构组件,如数据库、BLOB存储、处理队列等。在此基础上,我们有一个领域层,它实现了使用一个或多个这些服务(使用命令和复合命令模式)的工作流。最后,在该层之上有一个基于jax-rs(jersey)的层,它提供了一个REST接口/协议,根据域层的工作流来实现。

我对Scala的经验有限,但我怀疑它可能是一个很好的工具,可以编写一个更有表现力的领域层版本,因为Java代码非常冗长,有时很难调试。部分原因是对命令组合和执行的控制是由通过具体命令扩展的基类处理的。事后看来,这可能不是一个理想的设计选择。

我希望这个非常高层次的描述能够说明我想要达到的目标。如果我需要更详细的信息请告诉我。我最感兴趣的是如何在保留基于Java的服务层的同时用Scala构建域层。此外,关于如何在域层之上实现HTTP/REST协议以便将其部署在java web应用程序容器中的建议也将非常有趣。

共有1个答案

符功
2023-03-14

在战术上,一个明显的出发点是利用Scala的结构类型,并将命令表示为特征:

trait CommandType1 { def operation() }

然后就可以根据以下特性构建命令组合:

case class CompositeCommand(commandOperand: CommandType1*) extends CommandType1 {
  def operation() = commandOperand foreach { _.operation() }
}

对于您的工作流层,Scala相对于Java的另一个优势是,您可以将命令定义为可通过的函数。这为创建表示抽象操作的通用高级命令提供了可能性,然后为您常用/访问的工作流创建和存储这些命令的部分功能。

 类似资料:
  • 3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi

  • 3.1 ABP领域层 - 实体 实体是 DDD(领域驱动设计)的核心概念之一。Eric Evans 是这样描述的“很多对象不是通过它们的属性定义的,而是通过一连串的连续性事件和标识定义的”(引用领域驱动设计一书)。 译者注:对象不是通过它们的属性来下根本性的定义,而应该是通过它的线性连续性和标识性定义的。所以,实体是具有唯一标识的ID且存储在数据库中。实体通常被映射成数据库中的一个表。 3.1.1

  • 本文向大家介绍java web服务器实现跨域访问,包括了java web服务器实现跨域访问的使用技巧和注意事项,需要的朋友参考一下 一、CORS概述 跨源资源共享标准通过新增一系列 HTTP 头,让服务器能声明那些来源可以通过浏览器访问该服务器上的各类资源(包括CSS、图片、JavaScript 脚本以及其它类资源)。另外,对那些会对服务器数据造成破坏性影响的 HTTP 请求方法(特别是 GET

  • 链接 实体 值对象 仓储 领域服务 工作单元 领域事件 数据过滤器 规约模式

  • 1、jsonp原理详解——终于搞清楚jsonp是啥了 2、最流行的跨域方案cors cors是目前主流的跨域解决方案,跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP

  • 域内有一个接口“DetectPriorityInterface”。两个实现必须同时处于活动状态;一种“混合”必须实时地选择一种而不是另一种。 问题是:这些实现(两个实现)应该住在哪里:在域层还是基础结构层?? 内部实现充满了业务规则,应该驻留在域层。外部实现是一个简单的调用,应该存在于基础结构中。 null 客户端使用接口,因此,对于应用层,所有这些东西都是trasparent;接下来,我们将删除