问题标签 [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.

0 投票
1 回答
1605 浏览

asp.net-mvc - 哪种架构适合在这个项目中实施?

我是架构新手。我有一个 MVC Web 应用程序项目,我想首先使用 EF 代码。我想为这个项目使用架构。我想使用 DDD(域驱动设计),但它适用于大型项目。我想要一个简单的 DDD 来支持我的项目中的这些东西: 1-存储库模式 2-IOC 3-服务层 如果有人建议架构或示例架构,您对我的建议是什么,这对我会更有帮助,谢谢。

0 投票
2 回答
170 浏览

interface - 非域服务接口

在学习领域驱动设计时,我一直在整理以下解决方案(请注意,此排序是字典顺序的,而不是依赖关系的表示):

在此处输入图像描述

以下是每个项目的概要:

Domain.Models: 域实体和值对象(例如Order

Domain.Interfaces: 域服务接口和存储库接口(例如IOrderServiceIOrderRepository

Domain.Services: 领域服务接口的具体实现(例如OrderService

Infrastructure.Data: 存储库接口的具体实现(例如OrderRepository

Infrastructure.DependencyResolution: 依赖注入解析。

问题

现在我想提供非域服务。一个示例是用于发送电子邮件的电子邮件网关。我为此创建了以下项目:

Infrastructure.Components: 非域服务的具体实现

问题

我会将此类非域服务的接口放在哪里(例如, an IEmailGateway)?

它需要可由Domain.Services项目访问(OrderService可能需要您发送通知),所以它会进入Domain.Interfaces吗?我会说不,因为发送电子邮件不是特定于域的活动。

0 投票
2 回答
409 浏览

design-patterns - 域层是否适合映射对象(DTO)?

我的域层中有一些映射对象[实体],需要由我的 Web 服务使用,它将这些映射对象暴露给外部世界。这些映射对象的正确位置在哪里?您将如何构建映射对象以及它们的正确位置在哪里?

我的项目是一个 MVC5 .NET 项目,它使用实体 framework6 并具有以下层:

UI+应用层域层(Entities.MappedObjects 是我现在放置映射对象的地方)基础设施层(是否所有管道和访问数据库)

0 投票
1 回答
200 浏览

java - 数据层需要域驱动的ApplicationService DTO

应用领域驱动设计我有点困惑。我正在使用 C# 和 Java

我有这样的层:

  • 领域
  • 应用服务
  • 数据层
  • 表示层

ApplicationService 层位于表示层和数据层之间。AppplicationService 从数据层获取数据并将其转换为 PresentationDTO 对象并发送到表示层。

我是否需要在 ApplicationService 和数据层之间建立一个新的数据传输对象 (EntityFrameworkDTO)。我应该生成 DTO 以在存储库中使用,还是直接在存储库层使用域实体?

你有没有应用过领域驱动设计?

0 投票
2 回答
2051 浏览

asp.net - DDD中有没有关于共享值对象的概念

我需要知道如何在 DDD 中使用共享值对象,例如?

如果我有两个名为Registration 和 Admission 的聚合根,这两个聚合都消耗一个名为 Address 的值对象。即使我的通用语言不同(录取地址和注册地址),此地址对象的模型也是相同的(我的意思是它具有共同的属性)。所以我决定将这个值对象从这两个聚合根移动到我的上下文中的公共位置(Say SharedValuess)。我想知道这种做法很好,或者有什么成熟的方法可以处理这种情况。

注意:这篇文章可能违反了堆栈溢出的规则,因为它的答案是基于意见的,但我没有找到任何其他活跃的论坛来问这个问题。

0 投票
1 回答
92 浏览

php - UserService 中是否允许使用 emailExist 方法?

我正在使用领域驱动设计。

我有以下模型(类):

  • 用户
  • 用户DAO
  • 用户存储库
  • 用户服务

我知道 UserService 应该包含所有相应的应用程序逻辑。所以我得到了signUp(),logIn()update()里面的方法。

我的signUp()方法是注册用户,但在违反电子邮件唯一约束时抛出 PDO 异常。现在,由于异常仅针对异常错误并且对控制流不利,我的问题是:

方法是否emailExist()允许在 UserService 类中?

所以我可以先在我的控制器中调用它(如果电子邮件已经存在,我可以用表单错误报告),然后再实际注册用户。我知道这种方法实际上属于数据映射器,但由于它们不应该直接在控制器中使用,我考虑将它添加到我的 UserService 类中,然后从那里将它映射到我的存储库的findByEmail()方法。

0 投票
1 回答
432 浏览

validation - DDD - 实体的存储库相关验证

我很难找出实现业务规则验证的最佳方法,这取决于存储在数据库中的数据。在下面的简化示例中,我想确保 Username 属性是唯一的。

我已经阅读了很多关于实现这一目标的不同方法的内容,包括将存储库注入实体(并防止它进入无效状态)、创建扩展方法等。

但是,我认为这些都不是最好的方法。

所以我决定使用应用程序服务来编排使用规范的实体验证。

起初,它看起来不错。但是单元测试有点困难,因为服务与规范实现紧密耦合,并且必须手动处理规范的依赖关系。我也考虑过抽象规范,但我不确定我是否是正确的道路。

也有可能我开始错了,因为实际上我正在学习 DDD,但我仍然不清楚哪一层应该负责这种验证。

任何帮助,将不胜感激。

0 投票
2 回答
621 浏览

architecture - 在哪里保留公共服务?

在领域驱动方法中 - 在哪里保留公共服务?

例如,有时我们可能需要一些通用函数,如 getcountrylist、getstatelist、getcitylist(或 MASTER 表中的一些其他数据)来在 UI 的不同页面/模块中显示下拉列表。假设这些数据是否存在于数据库中,那么我们需要在哪里拥有这些功能。

  1. 我可以将这些函数保存在 Domain/Common/CommonServices.php 中吗(我的意思是在域层内部很好?)(或)

    我可以将这些功能保存在 Infra/Common/CommonServices.php 中吗(在这种情况下,我需要直接从我认为不正确的 Infraservice 层连接到 dao 层?)

  2. 包含这些常用功能的文件的正确名称/建议名称是什么。(CommonServices.php(或)CommonHelper.php(或)CommonUtils.php(或)MetadataService.php(或)您的任何建议)

0 投票
1 回答
894 浏览

domain-driven-design - DDD 中的标识符与引用

我有两种情况可以使用实体的 id 或将其作为参考传递。

1) 域服务。例子:

2) 实体。例子:

哪种方法更好,为什么?

0 投票
1 回答
97 浏览

design-patterns - 如何使用 DDD 方法从以下语句中定义业务模型

定义领域模型是最重要的任务。不幸的是,这是 DDD 中最困难的一步。我想知道,如何从以下语句设计一个简单的域模型。

"每个用户都必须有一个电子邮件才能操作系统。用户必须使用电子邮件和密码进行注册。管理员/用户可以启动注册过程。一旦用户成功注册,管理员必须为用户分配预定义的角色,单个用户可以分配给许多角色。注册过程完成后,必须向用户发送一封有关凭据详细信息的电子邮件以及欢迎消息。每个用户都有一个或多个键/值配对标识符,称为声明。因此管理员能够将声明分配给单个或一组用户。 "

这可能/可能看起来不像业务需求..但是如果一些业务专家解释了一些看起来像的东西,那么我们如何从上述陈述中塑造领域模型..任何人都可以识别实体、价值对象、领域事件, 聚合根

注意:考虑到堆栈溢出的规则和规定,这个问题可能是一个题外话。而不是阻止/删除这篇文章,请建议我在哪里可以发布它以获得一些反馈。