问题标签 [ddd-repositories]

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 投票
2 回答
186 浏览

orm - 子实体类应该有自己的存储库吗?

我有几个类继承自一个Admin类:Manager,Translator等。

Admin是一个聚合,所以应该有它自己的Repository。但是,某些查找 Managers 或 Translators 的方法可能特定于这些类。其他可能对所有管理员都是通用的。

这里的最佳做法是什么?我是不是该:

  • 将所有查找管理员的方法放在一个存储库中?
  • 或者使用存储库的层次结构来模仿域模型类的层次结构,然后有一个ManagerRepository和一个TranslatorRepository扩展一个AdminRepository
0 投票
2 回答
6710 浏览

asp.net-mvc-3 - DTO 可以嵌套 DTO 吗?

我有以下域模型:

我的服务有以下代码:

我的服务从数据库中获取播放列表和歌曲,然后对于播放列表中的每首歌曲,它会触发查询以从数据库中获取特定于该歌曲的其他匹配项(使用 SQL Server 全文搜索)。

然后将数据转换为 DTO,添加到结果对象并传回控制器。代码如下所示:

问题:

到目前为止,PlaylistResult 对象运行良好,但最近引入的匹配项让事情变得更加复杂。看起来我别无选择,只能修改我的 SongDTO 以考虑匹配,如下所示:

但这不违反 DTO 的目的吗?据我了解,DTO 是数据的扁平化表示,这种方法不是扁平化的。另一方面,我看不出还有什么方法可以做到这一点,因为每场比赛都是针对每首歌曲的。

我知道我可以让自己更容易做到这一点,扔掉 DTO 并将域模型直接传递给控制器​​,然后就这样结束了。但我不想这样做,因为整个目的是学习如何使用 DTO。

非常感谢任何输入。

0 投票
1 回答
886 浏览

architecture - 访问存储库的域实体

继续这些辩论:

DDD - 实体不能直接访问存储库的规则

实体可以访问存储库吗?

在某些情况下,域访问存储库感觉更好。以这个例子为例,假设我需要数据库中的 TaskStatus 表,其中包含用于报告目的的描述:

我知道我可以拥有 CompletedTaskStatus 和 OpenTaskStatus 对象,但在某些情况下这是不必要的并且可能导致类爆炸。

无论如何,如果不是为了这种事情,为什么存储库接口存储在域中?

0 投票
2 回答
716 浏览

architecture - DDD:调用应用程序服务的存储库

这是围绕我了解 DDD 的系列文章的一部分 :)

继上一个问题之后,但不需要背景知识:当底层数据库有关系时,系统使用另一个系统的 WCF 服务

有一个文件系统和一个人力资源系统。人力资源系统需要保存一个文档以及与该文档相关的一些人力资源特定数据。

我的第一个想法是对 Document System 的调用应该在 HR System 的 Application Service 中(去掉多余的代码):

存储库是这样的:

但是 Jak Charlton 在这篇文章中说: “存储库后面是什么?几乎任何你喜欢的东西。是的,你没听错。你可以有一个数据库,或者你可以有许多不同的数据库。你可以使用关系数据库或对象数据库. 你可以有一个内存数据库,或者一个包含内存项列表的单例。你可以有一个 REST 层,或者一组 SOA 服务,或者一个文件系统,或者一个内存缓存……”

所以现在我认为服务应该是这样的:

并像这样调用存储库中的文档库服务:

这样,可以说,存储库仍然只负责持久性。

我是在正确的路线上还是离开了?

0 投票
2 回答
2182 浏览

domain-driven-design - 如何更新聚合内的实体

我有一个名为 Campaigns 的聚合,每个都有一个名为 Campaign 的根实体,这个根实体有一个尝试列表(实体)

我正在使用一种方法来添加活动尝试

当我尝试编辑尝试列表中的特定项目时出现问题。我通过 AttempNumber 获得尝试并将其传递给 editAttempt 方法,但我不知道如何在不删除整个列表并重新创建它的情况下设置尝试

任何帮助将不胜感激!

谢谢,佩德罗·德拉克鲁兹

0 投票
2 回答
443 浏览

c# - 在 Web 应用程序的生命周期内实例化服务层和存储库一次

在我的 Web 应用程序的生命周期中,我知道我的所有服务和存储库都会被调用。我想在 Web 应用程序启动期间实例化它们一次,并在我的代码中引用实例化的引用。

是否有一种通用模式可以在 Web 应用程序的生命周期内仅实例化一次服务/存储库,而不使它们成为静态或单例。

我想避免使我的服务/存储库成为可测试的静态类或单例,但是当它们被设计为无状态时,在每个 Web 请求上实例化它们似乎并不正确,而且我知道在应用程序的生命周期中都需要它们。

我正在使用 c#/asp.net。

0 投票
1 回答
214 浏览

.net - 领域驱动设计 - 综合问题

简而言之,我的域允许用户提交故事(关于一个人或一组人),其中包含多种不同的状态和转换,它可以处于哪些状态,以及在这些状态下允许哪些行为。

因此,在设计的这种状态下,用户正在创建草稿并提交他们的故事。我的域包含故事、团队和团队成员。

我的第一个问题是谁有责任加载完整的聚合?应用层是否应该根据手头的任务指定这一点?他真的需要知道所有需要加载的数据吗?还是应该属于总是急切加载相关数据的存储库?也许使用延迟加载(透明度可能有点吓人)?

对于我的下一个任务,我需要允许在故事中添加评论并在用户查看故事时创建记录。这是否属于聚合,因为它们没有故事就没有意义?这是我的困惑。如果它们确实属于聚合,那么在添加评论或只是添加已查看的记录时,我必须加载整个聚合?

任何帮助都会很棒,正如您所看到的,我是 DDD 的新手。

谢谢!

0 投票
1 回答
196 浏览

orm - 实体可以访问存储库吗?

假设我有两个简单的实体:用户和评论。如果用户调用 Review 存储库有多糟糕?用户获得评论的“干净”方式是什么?

我确实看过这个问题,但尽管他们说这是一种不好的做法,但我没有在那里找到答案。

0 投票
1 回答
242 浏览

model-view-controller - DDD/MVC:如何避免从视图中访问存储库?

在阅读了其他几个问题之后,似乎不建议让实体类使用存储库。因此,鉴于这些存储库:

我不应该在课堂上这样做:

但是假设我有这个控制器,它为视图提供了一个餐厅列表:

在视图脚本中获取每家餐厅的评论的“良好做法”是什么?因此我不能这样做:

而且我想在视图中注入 ReviewRepository 也不是我们所说的“最佳实践”......

欢迎任何评论!

0 投票
3 回答
2505 浏览

java - DDD - Repository and many-to-many relationship

I am new to DDD and I am stuck in here: I have a many-to-many relationship between two entities: User and Group. THe relationship is not an Aggregate because a User can exists without a Group and a Group can exists without a User.

THis is my code for User class:

The problem is that I dont know where to associate those classes when I create a User which has groups in (I cannot use ORM). I made it in the create method of User, and also manage transactions there through Spring. Is this correct? Or should I put that code in the userRepository or in a Service?

Thanks!