问题标签 [ddd-service]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何在 DDD 中命名域服务
我是 DDD 的新手,在使用 DDD 原则编写新项目时遇到问题,它是关于创建域服务的。我总是用相应的域对象名称前缀来命名我的服务,例如UserService
or OrderService
,并将所有与 DO 相关的业务逻辑方法放入这些服务中。因此UserService
,例如,我有创建新用户、禁用现有用户、执行其他用例等的方法。
现在我注意到我可以为每个用例创建一个服务,而不是为每个 DO 创建一个大服务。例如,一个服务命名CreateUserService
,另一个命名RemoveUserService
等等。
问题是,是推荐这种新方法还是以前的方法更好?
api - 在 DDD(域驱动设计)中创建域之前的中间计算调用
我有一个接受访客订单的用户界面。访客下订单后,UI 有一个计算税金的按钮,并在下实际订单之前返回 UI。
我有 基于 DDD 的订单 API,带有 ADD、UPDATE、GET、GET ALL 和 DELETE 端点。但是对于中间的“获取税”按钮,我该怎么办?它是查询(CQRS)端操作还是与不同服务类对话以在域创建之前获取结果的 API 端点。
domain-driven-design - DDD 域实体与持久性实体
在 DDD 中,我们说域实体不是数据库模型/实体的表示。我们还说,为了正确地从应用程序中提取领域模型,领域模型不应该有任何关于它的持久化方式或返回给客户端的方式的信息。
我遇到的问题是,在处理大多数 ORM 或数据库抽象时,我们需要使用一些特定于数据库的注释来注释数据库实体,从而违反规则。
这是否意味着我们应该为域创建一个实体,为持久化创建另一个实体?
我对此很陌生,不确定正确的方法是什么。
domain-driven-design - 我在同一个有界上下文中有两个不同的聚合,它们都需要创建——我应该使用最终一致性还是域服务?
假设我有一个聚合调用 JobSeeker 和另一个名为 ResumeBank 的调用,其中包含一组简历并与 JobSeeker 相关联。
业务问题:当我创建 JobSeeker 时,我还需要创建一个与该 JobSeeker 关联的 ResumeBank。
我应该创建一个协调这个的域服务还是应该使用最终一致性?
domain-driven-design - 在 DDD Aggregate 中修改 Aggregate Root 的子实体的逻辑在哪里?
我使用 Microsoft DDD 微服务示例作为我的问题的基线(https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/microservice-domain-model)。
我了解在聚合中的所有外部修改请求都通过根(在本例中为订单)。假设我想修改 OrderItem 中的单位数,我是否对 Order 进行了名为“ModifyOrderItem”的操作,然后它将检索 OrderItem 并对其进行修改?在“ModifyOrderItem”命令处理程序与操作中应该做什么?
domain-driven-design - 添加跨两个聚合的域服务的解决方案中的哪个项目?
我目前在一个 Visual Studio 解决方案中有两个项目。每个项目代表不同的聚合。我需要添加一个与两个聚合根交互的域服务。我应该将它添加到哪个项目?有关系吗?
domain-driven-design - DDD 考虑实体的存储库和服务
我一直在熟悉DDD
并试图了解这种方式Entities
和Aggregate Roots
互动方式。
以下是该情况的示例:
假设有一个用户,他/她有多个电子邮件地址(例如,最多可以有 200 个)。每个电子邮件地址都有自己的身份,用户也是如此。用户和他们的电子邮件之间存在one to many
关系。
从上面的例子中,我认为Users
和Emails
作为两个实体,Users
而aggregate root
我遇到的 DDD 规则:
- 规则:只能
aggregate root
访问存储库。
问题 1:这是否意味着我不能有一个单独的数据库表/集合来单独存储电子邮件?这意味着电子邮件必须嵌入到用户文档中。
- 规则:
Entities
外部aggregate
只能通过 via访问其他entities
。aggregate
aggregate root
问题 2:现在考虑我确实将它们分成两个不同的表/集合,并通过在电子邮件中有一个名为的字段来链接电子邮件,该字段associatedUserId
包含对电子邮件所属用户的引用。我不能直接拥有类似的 API 端点/users/{userId}/emails
并直接在EmailService.getEmailsByUserId(String userId)
? 如果不是,我该如何建模?
如果这个问题看起来有点太天真,我很抱歉,但我似乎无法弄清楚。
domain-driven-design - 设置图像路径 url 的最佳层(Presentation、Service、Domain、Repository)在哪里
我有一个问题问你。
我有一个六边形架构的 .NetCore 项目。在我的存储库类中,我填写我的域类,它的名称是公司,并且有两个属性:Id 和 Logo。
我的存储库返回 de Id 和徽标名称,但不是所有 url 路径,所以我想设置 logo 属性,将我的图像路径 url 放在 de 名称之前,例如http://example.com/imageName.jpg。
所以我的问题是,在六边形架构中,设置此属性的最佳实践在哪里?
现在,在我的控制器中,我创建了一个 DataModel,它为构造函数传递了我的域类,并在模型内部构建了图像徽标 url。
那么,您认为这是最好的方法吗?
谢谢!
events - DDD如何为搜索服务进行通信
我在电子商务应用程序上工作。我使用带有 ddd 的微服务。我有产品服务。它存储标题描述等。定价服务存储产品价格和促销。类别服务商店类别和产品类别。装运服务存储所有关于装运数据和产品装运细节的货物运输公司 isFreeCargo 等。
我不想使用组合模式进行搜索。我创建了存储所有服务数据的搜索服务。定价、产品信息、发货信息、类别信息等。我将所有数据与事件联系起来。就像 cQRS 一样,所有服务都通过事件相互通信。
我的问题是;当 CreateProductRequest 来到产品服务。它包括 categoryId、price、shippingFirm 等。我的意思不仅仅是产品服务信息。我只在产品服务中保存标题描述等。产品服务中没有价格或类别等数据。因为他们不属于这个域。当产品创建和事件引发 productCreatedEvent 包括创建的产品 id 和其他服务信息时, request.price , category 等。
其他服务监听这个事件。并消费。定价保存 productId 和 price。Cagegory 保存 productId 和 categoryId ...
搜索服务也消费事件。但是没有关于价格或类别的数据,因为它们刚刚发布。Okey 我可以在价格变化或类别保存后证明与事件的一致性。但起初可能不会有 2-3 秒的价格或类别。如何立即保存搜索服务的类别和价格。因为 productCreatedEvent 中没有价格和类别非规范化和计算数据。只有 categoryId 之类的参考 Id 或未计算价格。在自己的服务保存和发布 ProductCategoryUpdated 或 ProductPriceCaculeted 等事件后,它们将存在于搜索服务上
.
model - 如何从持久存储构建域模型?#DDD
我正在尝试学习领域驱动设计(DDD)。而且我不明白如何从持久性存储中构造域模型。我正在制作没有公共设置器的域模型,以保持我的状态安全和一致,但另一方面,要从持久性存储构建它们,我需要拥有这些设置器。在“实施DDD”中,只要我使用ORM工具就可以。但是如果我不想使用 ORM,实际上我想使用 NoSQL 怎么办。我可能会使用事件溯源。如果大家有更好的建议。在这种情况下,最佳做法是什么。