在普通的DDD项目中,我希望从存储库中检索到的实体作为DTO从域层发送到应用层。
CQR存在的一个原因似乎是,应用层所需的查询(主要是读取操作)与域层所需的查询不同。因此,即使是同一对象的查询结果在不同层之间也可能不同。
在我的域层中,我已经将查询结果映射到域实体中。我对一些CQRS示例将查询结果直接映射到跳过匹配实体的DTO感到困惑。
假设数据库返回:
{"person": {
"id:": 5323423,
"name": "John",
"family_name": "Smith"
...
}}
但是,实体布局将姓氏映射为姓氏:
class Person
{
Identity id;
String name;
String surname;
}
如果在我看到的一些CQR示例中发生这种情况,则提取的DTO将看起来不同,在将实体与其DTO匹配时会导致冲突。这些冲突是如何解决的?在我看来,任何DTO(与实体相关)都应该始终从其实体生成。然而,在这种情况下,在应用层执行不同类型查询的自由就失去了。
完全赞同@MikeSW,只需添加一个图(借用自axon框架)来解释架构。
Read模型是由查询用例驱动的,可以将其视为命令操作的输出。
关键是你不需要将实体映射到DTO。DTO由特定上下文所需的内容定义,并成为查询/读取模型。更新实体时,事件处理程序也会使用它来更新读取模型。
所以基本上,读取模型是从所有需要的实体(1个或更多)生成和更新的,通常是以增量的方式。
我希望在我正在从事的一个项目中使用CQR,但是我目前正在努力寻找实现CQR查询端的最佳方法。基于我有限的理解,有一个瘦数据层(有时称为瘦读取层),用于查询数据库并返回DTO,其中包含应用程序UI层使用的查询结果。 由于这是一个Java的EE应用程序,我正在开发薄数据层,使用JPA使用EntityManager.createNamedQuery查询数据库,返回一个包含结果的实体,然后将其映射到DTO
如果实体之间存在继承,那么我应该如何在DTO中表示它?例如: 我应该如何使用它们?例如,我发现:我正在做一个web项目。网页的用户想要注册。他/她填写表单,并将其发送到服务器。在服务器端,我首先创建一个DTO,因为它的字段有验证。我从DTO创建一个实体并将其持久化到数据库中。当有对实体的请求时,我将被请求的实体转换为DTO,并将其提供给客户端的用户。这是一个很好的想象,还是不是?
我有一种情况,在一个DTO中有另一个DTO,我必须映射到它对应的实体。 我正在使用mapstruct,我已经有antherEntityMapper已经存在。 如何更改EntityMapper接口,以便我可以将一个另一个EntityDTO映射到另一个Entity? 谢谢
本文向大家介绍promise的定义与 的具体实现?相关面试题,主要包含被问及promise的定义与 的具体实现?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Promise对象是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。 f1().then(f2); 一个promise可能
我想创建一个与JHipster的用户实体有多对一关系的实体。 我使用JDL-Studio创建了以下实体和与用户的关系,它使用jhipster port-jdl作为. jh文件导入到我的微服务中: 在编译我的微服务时,我得到以下错误: 轮廓java:44:错误:找不到符号私人用户;符号:类用户位置:类配置文件 轮廓映射器。java:12:错误:找不到symbol@Mapper(componentMo
对于新学生和新课程的情况,它工作得很好,但是在新课程和现有学生的情况下,我会从数据库中抛出一个唯一的约束冲突。关系类似于下面。 在持久化之前,我尝试使用entitymanager查找一个学生,如果该学生存在,则使用该实例而不是新的学生实例。这也不起作用,它仍然尝试执行插入而不是更新