问题标签 [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 回答
401 浏览

domain-driven-design - 在实体中使用基础设施服务或存储库

我有一个实体,Exchange。Exchange 需要在启动时填充 VO 列表 CurrencyPair。CurrencyPair 的集合作为主数据存储在数据库中,并有一个名为 ICurrencyPairRepository 的存储库来获取所有可用的货币对。因此,一旦应用启动,我希望在 Exchange 实体中获取 CurrencyPair 集合。

我的问题是,我可以直接将 ICurrencyPairRepsoitory 的实现注入到 Exchange 中吗?还是应该有一个从存储库中获取 CurrencyPairs 的基础设施服务实现?(当然,ICurrencyPairRepository 接口在域层内部,它的实现在基础设施层)

还是应该在 Exchange 中注入应用程序服务?我们是否允许仅将域服务注入实体或其他服务/存储库也可以注入?

用例:

在启动时,交易所需要获取应用程序中允许交易的所有货币对。每当有新订单进入交易所时,它都会包含它想要交易的货币对。交易所随后需要检查该货币对是否允许交易。如果是,则转发该订单,否则,丢弃该请求。

由于 Exchange 是一个聚合根,我可以从应用程序启动的位置对其进行初始化,并为其提供一组货币对,但我很想知道允许在本例中也是聚合根的实体中注入什么.

0 投票
2 回答
396 浏览

service - SOA 服务与其他类型的服务

SOA 服务与其他类型的服务(如应用程序或域服务)之间有什么区别?

0 投票
1 回答
922 浏览

php - 领域驱动设计应用层可以有模型吗

ddd 中的应用层可以有模型吗?

更明确地说,我的credential系统中有一个与我的域层之外的身份验证过程相关的实体,那么这个实体将在哪里?我是领域驱动设计的新手。

0 投票
1 回答
830 浏览

domain-driven-design - 我需要在哪里放置与在域驱动设计中存储实体相关的代码

我正在尝试使用域驱动设计来设计应用程序,但我对实体数据的存储有疑问。首先,我正在创建一个实体并在该实体上应用业务规则。最后我想存储这些数据。我正在使用存储库模式来抽象数据库操作。现在我需要放置与将实体数据保存到数据库相关的代码。它在实体中吗?还是域服务?

0 投票
3 回答
1842 浏览

rest - 将外部数据源封装在存储库模式中

我正在为一项新服务创建高级设计。服务的复杂性需要使用 DDD(我认为)。所以我做了常规的事情并创建了域服务、聚合、存储库等。我的存储库封装了数据源。所以一个查询可以在缓存中查找一个对象,在数据库中查找失败,失败创建一个REST调用外部服务以获取所需信息。这是相当标准的。现在我的同事提出的论点是,以这种方式抽象数据源是危险的,因为使用存储库的开发人员将不知道执行 api 所需的时间,因此无法计算任何 api 的执行时间。上面写着。如果他知道他的调用会导致调用,他可能会想要以不同的方式设置他的组件的行为REST。他们建议我移动REST在存储库之外调用,甚至可能是缓存策略。我可以理解他们的观点,但存储库模式背后的整个想法正是隐藏此类信息,而不是让每个组件都处理缓存策略和数据访问。我的问题是,是否有解决这个问题的模式或模型?

0 投票
0 回答
100 浏览

service - HyperLogLog 的概率域服务幂等性

我正在评估一种使用 HyperLogLog [ HLL ] 实现域服务幂等性的方法。

这种方法的目的是提供确保幂等性而不存储大量无用信息的通用方法。唯一的要求是容忍偶尔的重复(发送 2 封电子邮件而不是 1 封)。

在我的场景中,每个服务请求都是一个带有 toHashCode 函数的消息对象。该算法如下所示:

  1. 收到请求后,域服务计算 HLL[ S1 ] 基数并将其存储为C1
  2. 请求hash[ H ] 被添加到HLL[ S2 ] 的副本中,并且基数存储为C2
  3. 如果C1 == C2则请求被复制并且S2应该被丢弃。
  4. 否则请求将被处理,hash[ H ] 将被添加到 HLL[ S1 ]。

有没有人遇到过类似的解决方案?(如布隆过滤器
这种解决方案的缺点是什么?

0 投票
1 回答
3550 浏览

architecture - DDD应用服务领域模型查看模型映射

我对应用程序服务的理解是它们将域和用户界面联系在一起。换句话说,它们服务于控制器以在域上执行操作。

我的应用程序中有以下项目布局:

  • 领域核心
  • 基础设施
  • 服务接口
  • 网页界面
    • 视图模型
    • 意见
    • 控制器
    • 服务(应用服务)

我在项目Service Interfaces之外的谎言。Web UI然后在Web UI项目中,我在Services.

然而,这种结构有点缺陷,当我们将其付诸实践时会产生循环依赖。我尝试遵循此链接中的架构:https ://www.develop.com/onionarchitecture

对于给定的服务,我想传入视图模型,基于视图模型对域执行操作,然后返回更新的视图模型。这种方法是错误的吗?

我的理解是否正确,应用程序服务本质上将视图模型作为参数,如果需要,更新域和视图模型中的一些细节,然后返回视图模型?

或者

应用服务是否只处理 c# 数据类型和域模型作为参数并返回相同的数据类型?换句话说,不会在视图模型中获取或设置任何信息。实际上并不知道视图模型存在。

我只需要澄清一下严格的 DDD 方法中的最佳方法是什么。

0 投票
1 回答
603 浏览

php - “计费”在 DDD php 项目中属于哪里?

我正在构建一个新的 SaaS 应用程序并希望遵循 DDD 原则。

我正处于草拟想法的阶段,我遇到了这个问题。我希望人们能给我一些想法。我认为这不一定是对或错。但我很想听听你的想法……

本质上,我不确定 Billing 属于哪里以及如何最好地实施它。

我不知道用户是否应该知道计费界面。用户实体是否有责任进行计费?

我认为用户实体知道他们是否有订阅是公平的,但不知道它是如何实现的。

在这个阶段,我认为领域层将指定 BillingInterace,而实现将存在于基础设施层中。(我将使用 Stripe 开始)

您是否会创建计费服务并传入用户实体以在条带上创建客户帐户并执行计费功能?

或者您是否会编写一个特征,该特征会被放到用户实体上,以便用户可以自己计费($user->charge() - 或其他)。

希望这是有道理的。我只是想提出一些想法,因为我在网上找不到任何像样的指导。

谢谢!!李

0 投票
1 回答
417 浏览

domain-driven-design - DDD、外部数据和存储库

我正在考虑将 DDD 用于我们的下一个应用程序。我已经找到了很多有趣的论文和答案,但找不到解决我的问题的方法:

我们有一个 SOA。某些服务被称为其数据的主人的架构。这很好,但我不知道如何将它们与 DDD 很好地结合使用。

给定一个作为数据主人的服务“员工” Employee,它是几个简单值(名字和姓氏,生日,地址)的杂物。我的新应用程序应该跟踪为这些员工提供的培训。所以我有一个概念Participant,aParticipant与 an 具有相同的值,Employee加上一个培训列表和一项技能。

我们可以假设“培训”应用程序有一个数据库,其中包含一个参与者表,其中包含一个participant_id,skill并且一个employee_id用于检索名字和姓氏。

我对么 ?

但是现在,我可以使用哪个组件来调用“员工”服务?是不是ParticipantRepository这样,当我得到一个参与者时,我就​​有了名字。或者是应用服务Participant在使用数据之前完成数据。或者我可以在需要时明确调用员工服务?

非常感谢。

0 投票
0 回答
36 浏览

php - 如何(以及在​​哪里)构造具有大量参数的实体?

这是一个与 DDD 相关的问题,我正在用 php 编写代码。

用户提交包含大量值的表单。有些是可选的,但我们暂时忽略它。

所以现在在控制器中我们验证表单数据,假设验证成功,我们现在有一个充满值的命名数组。

我很好奇将这些数据传递到域的最佳方式以及应该在哪里创建值对象......

一种方法是将数组传递给应用程序服务,然后将值数组解构为变量。在这一点上,一些变量被一起拉到值对象中。然后这些单独的部分(VO 和标量数据的混合)被发送到我最终尝试创建的实体的构造函数(表单的点)。

但是这个应用程序服务可以接收一组值吗?该数组本质上与 UI 相关联,因为数组键是表单输入名称......

我可以将数组分解为控制器中的变量,但这会导致传递 20-30 个变量,这显然是愚蠢的。

这个应用程序服务还可以对域对象做这么多吗?这可能会导致相当繁重的服务......

这使我想到了另一个解决方案:只需将数组传递给域服务,该服务将数组分解,创建 VO,然后实例化实体。

但是将表单请求中的数组传递到我的域中也感觉本质上是错误的。

这感觉像一个简单的问题,但我的经验是有限的,所以任何帮助将不胜感激。

谢谢!