存储库 return 的创建方法应该是什么类型?
What is the type should the create method of the repository return?
我正在尝试实现 CQRS 模式。
按照 CQRS 模式,Command
应该 return 什么都没有,因为 void
在 Java 中输入。
存储库中的 create()
方法是我认为的命令,它应该 return 没有遵循该模式。
但我正在努力构建需要创建和使用新实体的函数。
例如,我必须构建一个函数assign new child category
。在此功能中,客户端可以将 parent category id
或 new child details
发送到服务器。
parent category id
是一个简单的案例,但问题是在new child details
案例中。
我必须先根据详细信息创建一个新类别,然后使用该实体为其分配父 ID,最后保存它。目前,我无法获取新创建的实体,因为 create()
方法 return 什么都没有。
而且我无法创建新实体,分配父 ID 并保存它,因为没有 ID 无法创建实体,而 ID 仅由我使用的 ORM 分配。
我应该怎么做才能解决这个问题?存储库 return 的方法 create()
是 void
以外的实体是否违反了 CQRS 模式?
这取决于场景和业务需求。所有的设计模式、方法等只是让您了解常见问题的可能解决方案。没有一个好的原则可以适用于不同业务问题的所有场景。如果在执行命令后,每次都需要根据结果执行一些逻辑 - 那么 return 那个结果可以避免不必要的调用。这完全取决于您尝试解决的问题和您准备做出的权衡。
有关更多信息,您可以查看此 。
Following the CQRS pattern, the Command should return nothing, as the void type in Java.
我不知道这是从哪里来的,多年来人们一直相信这一点,但事实并非如此。
对于实体创建,或者你告诉存储要存储的新事物的 id,或者它为你创建它并且你可以将它(或整个实体)作为 return,它不会'违反任何规定。
返回实体不违反 CQRS 模式。
在您的命令模型中添加:
public record CreateCommand : IRequest<ModelVm>
ModelVm
是您要return 的模型。
并在您的 CommandHandler
class 中添加此代码:
public class CreateCommandHandler : IRequestHandler<CreateCommand, ModelVm>
而不是 returning Unit.Value
你应该 return ModelVm
in CreateCommandHandler
.
我正在尝试实现 CQRS 模式。
按照 CQRS 模式,Command
应该 return 什么都没有,因为 void
在 Java 中输入。
存储库中的 create()
方法是我认为的命令,它应该 return 没有遵循该模式。
但我正在努力构建需要创建和使用新实体的函数。
例如,我必须构建一个函数assign new child category
。在此功能中,客户端可以将 parent category id
或 new child details
发送到服务器。
parent category id
是一个简单的案例,但问题是在new child details
案例中。
我必须先根据详细信息创建一个新类别,然后使用该实体为其分配父 ID,最后保存它。目前,我无法获取新创建的实体,因为 create()
方法 return 什么都没有。
而且我无法创建新实体,分配父 ID 并保存它,因为没有 ID 无法创建实体,而 ID 仅由我使用的 ORM 分配。
我应该怎么做才能解决这个问题?存储库 return 的方法 create()
是 void
以外的实体是否违反了 CQRS 模式?
这取决于场景和业务需求。所有的设计模式、方法等只是让您了解常见问题的可能解决方案。没有一个好的原则可以适用于不同业务问题的所有场景。如果在执行命令后,每次都需要根据结果执行一些逻辑 - 那么 return 那个结果可以避免不必要的调用。这完全取决于您尝试解决的问题和您准备做出的权衡。
有关更多信息,您可以查看此
Following the CQRS pattern, the Command should return nothing, as the void type in Java.
我不知道这是从哪里来的,多年来人们一直相信这一点,但事实并非如此。
对于实体创建,或者你告诉存储要存储的新事物的 id,或者它为你创建它并且你可以将它(或整个实体)作为 return,它不会'违反任何规定。
返回实体不违反 CQRS 模式。
在您的命令模型中添加:
public record CreateCommand : IRequest<ModelVm>
ModelVm
是您要return 的模型。
并在您的 CommandHandler
class 中添加此代码:
public class CreateCommandHandler : IRequestHandler<CreateCommand, ModelVm>
而不是 returning Unit.Value
你应该 return ModelVm
in CreateCommandHandler
.