问题标签 [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 投票
1 回答
101 浏览

entity-framework-4 - 为关系表构建存储库

我有一个健身应用程序的数据库模式,其中包括以下一些关系表 - 客户、会话、锻炼。Cust 到 Sess 是一对多,Sess 到锻炼是一对多。在 EF 4 中通过存储库构建时,我应该只创建一个吗?由于每个表都是相关的,因此我可以在单个查询中公开所有表的数据。或者,每个表是否会保留它自己的存储库?

更多信息:一个 _customer 创建一个 _session,一个 _session 与一个 _workout 相关联。a _workout 跟踪每组、该组的重量、代表的数量和身体部位的工作量。每个 _session 将有多个与之关联的锻炼。同样明智的是,每个 _customer 都会有多个 _sessionId。_customer 似乎是聚合根,所有其他信息都可以通过它检索。那么我是否会有一个名为 customer 的存储库来完成所有工作。那些我们只想要客户但对锻炼不感兴趣的场景呢,在打电话给客户时会被拖回来吗?希望这有意义吗?

非常感谢

斯图

0 投票
3 回答
1921 浏览

asp.net-mvc - 真实世界的 ASP.NET MVC 存储库

在现实世界中,控制器可能需要使用来自各种数据库表和其他数据存储的数据。例如:

所以:

  1. 我应该为每个表使用存储库吗?

  2. 我想这就是聚合概念发挥作用的地方?我应该每个聚合有一个存储库吗?

  3. 我是否只需向 Controller 的构造函数中添加所需数量的存储库?

  4. 这是否表明我的设计是错误的?

笔记:

IMember 接口本质上代表了一个帮助器对象,它为成员资格提供者提供了一个漂亮的面孔。即,它将所有代码放在一个地方。例如:

一个问题肯定是缓存这种输出。我能感觉到另一个问题要来了。

编辑:

我将 Ninject 用于 DI,并且在整个 DI、DDD 和 TDD 方面都非常畅销。嗯,有点。我也努力做一个实用主义者...

0 投票
1 回答
211 浏览

domain-driven-design - DDD和Ent Lib

是否有任何可用的示例应用程序显示使用 Enterprise Library 5.0 实现 DDD。

0 投票
3 回答
2401 浏览

domain-driven-design - DDD - 我怎样才能避免在这里跨越聚合边界?

我们正在开发一个新项目(重写现有应用程序),并且我的域模型/存储库设计遇到了问题。

这是我们领域模型中两个关键部分的(简化)版本:

替代文字

如您所见,我有一个Post的抽象概念,可以是评论、讨论、照片、视频等。帖子也可以有评论。

我还有一个Location的抽象概念,显然是 Streets、Cities、Neighbourhoods 等。

现在,这在我看来自然是两个清晰的总根。

所以我创建了两个存储库,一个名为PostRepository,另一个名为LocationRepository

这一切正常,我可以添加/获取任何类型的帖子(或评论),并通过这两个存储库之一添加/获取任何类型的位置。

但是现在我处于一个城市的“登陆页面”的场景中(例如)。

在此页面上,我基本上需要显示“此位置的所有帖子”。

那是怎么定义的?好吧,可以(可选地)在某个位置标记帖子。实现细节,所以我不想深入研究数据(因为这不是 DDD 的内容),但本质上是地理空间智能可以通过位置的形状文件来确定特定位置包含哪些帖子,以及标记的帖子的纬度/经度。

但是我怎样才能在不跨越边界的情况下检索这些信息呢?

我使用哪个存储库?我需要一个新的吗?

如果它很重要(或出于好奇),这是一个带有 SQL Server 2008 数据库和 Entity Framework 4.0 的 Web 应用程序 (ASP.NET MVC)。

如果您需要任何澄清,请告诉我。

编辑

我们目前使用规范模式的修改版本来检索域模型。

例如,这是我们 BLL 中用于检索所有评分 >= 4 的评论的代码:

但现在我需要一些这样的代码:

问题是我不知道如何在不添加中间连接实体(LocationPost - 因为它是多对多的)的情况下执行上述查询,并将 FK 添加到 Post 域模型。

但是通过这样做,我跨越了总体界限——不是吗?

0 投票
1 回答
2348 浏览

.net - 使用 DataContext.GetTable() 得到一个 'QueryProvider'

DataContext.GetTable() 方法将返回一个对象类型:

System.Data.Linq.Table

通过这样做,我假设我没有调用数据库来检索整个表。否则,LINQ 会有些低效。

因此,我所做的只是深入研究我的强类型 Datacontext 类(例如,dbDataContext)以获取例如它的“Customers”属性的句柄,该属性代表 SQL Server 中的 Customers 表。

然后,我可以从 GetTable() 返回的对象中获取 IQueryable,但仍然没有命中数据库。即,我的“服务层”代码将是 LINQ to Objects 而不是 Linq to Sql。

通过这样做,我将减少我需要的存储库的数量。

问题:

上述假设是否正确?

笔记:

我正在尝试找出一种方法来使用接口和泛型构建我的查询,以使其可测试以及所有这些。

因此,按照@zowen 对以下内容的回应进行思考:

存储库模式:每个实体一个存储库类?

我正在尝试实施

我知道不是绝对必要的,但我正在经历学习曲线并查看适合我的架构选项以及我的想法。

我正在尝试做的事情:

我正在尝试为 SQL Server 而不是 MongoDb 实现以下内容:

我想要的是获取 GetTable() 的句柄,然后针对它编写我的服务层 Linq 代码。

我怀疑我将不得不编写一个包装器接口来获取 IMongoDatabase 数据库变量的等价物。

但是,问题是上述问题,而不是其他问题。就像我说的,我只是在这里学习。在这部电影中,任何生产代码都不会受到伤害。

0 投票
5 回答
4459 浏览

tdd - TDD 演示/指南/视频,包括假存储库或域模型

我必须重写一个旧的应用程序,我想开始使用存储库模式进行数据访问,并为所需的功能编写尽可能多的测试。

您能否推荐一些视频/指南,其中包含更复杂的 TDD 示例,包括假存储库或域模型(最好从头开始)?

0 投票
2 回答
347 浏览

domain-driven-design - 通过域封装的持久性,还是通过存储库的持久性?

如果我的域模型不应该知道/关心存储库,那么.UpdateOrder(...)封装 CRUD-Update 的一些行为如何与存储库接口?通过域服务?

好的,那么我的存储库有一个有效的 CRUD 更新,它与我的.UpdateOrder(...). 没关系。但我不希望有人在存储库上使用 Update 方法,我希望他们通过实体上的行为(改用 UpdateOrder() )。我更喜欢与我的域模型满足不变量的方式相似 - 通过它的设计(私有集属性等) - 我的存储库公开替代方法来“更新”/持久化实体。

这只是一个访问修饰符问题,我没有在 Repo public 中使用 Update 方法来解决。还是有“更好”的答案?请帮助我 DDD 忍者。

0 投票
2 回答
530 浏览

entity-framework - 对于简单的 Web 应用程序,我是否需要使用 DDD、工作单元、存储库或类似的东西?

我正在使用 .net4 (c#) 开发一个简单的 eCart 系统。我一直在阅读有关工作单元模式、存储库模式和持久性无知的大量内容。我想我已经掌握了以这种方式构建我的层的策略和好处,但是对于我的简单应用程序,我想知道这是否有必要,是否有人可以指出我的范围内的良好架构。

如果我错了,请纠正我- 使用存储库的主要好处是减少对数据库的访问,并将应用程序架构与数据库架构分开。IE——对数据库性能好的东西并不总是对应用程序设计好的东西,所以最好设计对两者都最好的东西,然后在两者之间创建一个接口。

所以这里有一个问题——我希望任何发生的业务事务一旦发生就保存到数据库中,所以在存储库中排队数据然后立即保存似乎没有意义。为什么不直接保存呢?

我是否缺少 DDD 的其他好处,或者为每个出现的简单项目构建如此强大的架构是否会过度工程?谢谢你的帮助。

0 投票
8 回答
552 浏览

domain-driven-design - DDD - 领域模型问题

我让我与合作伙伴讨论我们有这种情况:

这些实体中的每一个都共享公共信息: 电子邮件、BillingAddress、NormalAddress、性别、SSN 等。

我已经决定:具有值对象地址和其余属性的人员实体。这样,如果我想访问有关某个人的特定信息(电子邮件、性别、dateofbird),我不必通过发布商或广告商根实体来获取它(将人视为聚合根)。

我的队友建议使用抽象类来实现,广告商和发布者继承自 Person 抽象类,以便拥有所有通用属性。

最好的方法是什么?如果你有请指导我们。

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

0 投票
2 回答
228 浏览

c# - DDD - 标签云

我想使用 DDD 做标签云,但对我来说对象标签是一个 VO,但一个 VO 不能插入、编辑、加载,因为它没有自己的存储库。我该如何解决这个问题?我知道我可以在 Entity 中制作 VO 标签,但这是错误的。我该如何解决这个问题?