是否可以进行DDD和REST接口以及语言映射?

前端之家收集整理的这篇文章主要介绍了是否可以进行DDD和REST接口以及语言映射?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
REST具有统一的接口约束,以非常压缩的基于意见的格式进行以下操作.

>您必须使用HTTP,URI,MIME等标准…
>您必须使用超链接.
>您必须使用RDF词汇来注释具有语义的数据和超链接.
>您完成所有这些操作以将客户端与服务的实现细节分离.

根据我的理解,带有CQRS(或没有它)的DDD非常相似.

>通过CQRS,您可以定义与域模型交互的接口.该接口由命令和查询类组成.
>通过DDD,您可以定义域事件以将域模型与持久性详细信息分离.
>通过DDD,每个有界上下文都有一种无处不在的语言来表达语义.
>您完成所有这些操作以将域模型与外部世界完全分离.

是否可以将REST统一接口映射到由命令和查询以及域事件定义的域接口? (因此,REST服务代码自动生成.)

是否可以将链接数据语义映射到无处不在的语言? (所以你不需要定义非常相似的术语,只需找到并重用现有的词汇.)

请为您的答案添加一个非常简单的映射示例,为什么不是,为什么不呢!

我不认为这是可能的.我认为有一个术语描述了这个问题,它被称为 ontology alignment.

在这种情况下,至少有3个本体:

>域模型的普遍存在的语言(UL)
> REST服务的应用程序特定词汇(ASO)
>应用程序特定词汇使用的链接开放数据词汇(LODO)

所以我们至少有2个路线:

> UL:ASO对齐
> ASO:LODO对齐

我们的问题与UL:ASO对齐有关,所以我们来谈谈这些本体.

UL是面向对象的,因为我们讨论的是DDD和域模型.因此,大多数域对象实体,值对象都是真实对象而不是数据结构.它的非面向对象部分是命令domainEvent,查询结果和域模型接口上的错误等DTO.

相比之下,ASO是严格程序性的,我们使用一组标准方法(程序)来操纵资源(数据结构).

所以从我的角度来看,我们讨论的是两个非常不同的东西,我们有以下选择:

>使ASO更加面向对象 – > RPC
>使UL不那么面向对象 – >贫血领域模型

所以从我的角度来看,我们可以做以下事情:

>我们可以通过CRUD自动将实体映射到资源和命令到操作,例如HydraBundle使用活动记录(我们可以使用DDD和没有CQRS执行相同操作)
>我们可以通过复杂的域模型手动将命令映射到操作

>操作POST事务{…}可以导致SendMoneyCommand {…}
>操作GET orders / 123 / total可以导致OrderTotalQuery {…}

>我们无法通过复杂的域模型将实体映射到资源,因为我们必须定义新资源来描述新服务或新实体方法,例如

>操作POST事务{…}可以导致account.sendMoney(anotherAccount,…)
>操作GET orders / 123 / total可以在读取数据库上产生SQL查询,而不会触及单个实体

我认为在DDD CQRS和REST之间进行这种本体对齐是不可能的,但我不是这个主题的专家.我认为我们可以做的是创建一个具有资源类,属性和操作的特定于应用程序的词汇表,并将操作映射到命令/查询以及将属性映射到命令/查询属性.

猜你在找的设计模式相关文章