问题标签 [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.
apache-flex - DDD 和异步存储库
我们正在开发一个使用 RMI 和 JMS 连接到 Java 后端的富客户端(用 Flex 编写)。我正在考虑以 DDD 方式实现客户端,以便它具有用于域对象上的 CRUD 操作的存储库。
然而,问题是所有后端通信都是异步发生的,我无法强制客户端等待继续,直到它收到响应。这意味着,在低级别上,我可以调用远程对象上的方法并获得 AsyncToken 作为返回值。然后我可以监听 asynctoken 上的事件以查看调用是通过还是失败。然而,这打破了存储库背后的主要思想,向客户隐藏技术细节。
我猜可能有两种选择:
- 让存储库上的方法返回 asynctoken,这对我来说似乎是一个混乱的解决方案
- 让这些方法返回一个空集合(例如 findAll),当收到响应时该集合将被填充。
两者都有优点和缺点,我想从你们那里得到一些意见。
(更进一步,什么是好的缓存策略?根据情况,我不希望存储库在每次向它请求所有实体时都调用服务器。这将如何影响存储库上方法的签名。 )
c# - 领域驱动设计 - 逻辑删除
所以,我建立了一个很好的域模型。存储库处理数据访问等等。弹出了一个新要求,表明需要使用删除记录原因。到目前为止,删除都相当简单 => Entity.Children.Remove(child)。由于我的 ORM 工具正在处理状态管理,因此没有进行内部更改跟踪。但是,我不确定如何处理这个问题。
1)我可以在父实体中保留一个已删除的子集合,并将更改跟踪从 nHibernate 中拉出并自己处理。
2)??????
asp.net-mvc - 有没有完美的代码生成工具来生成 MVC Storefront?
有没有人知道一个好的代码生成工具(除了 Subsonic,因为它在当前版本中不支持 IQueryable)以 Rob Conery 在 MVC Storefront 中工作的方式生成存储库和其他项目?
c# - 使用 LINQ to SQL 时出现问题,每个原子操作都有一个 DataContext
我已经开始在一个(有点像 DDD 的)系统中使用 Linq to SQL,它看起来(过于简化)如下所示:
现在,我遇到了一个问题。当我尝试像这样使用 SomeEntityRepository
一切正常,直到程序到达最后一个 WriteLine,因为它抛出一个ObjectDisposedException
,因为 DataContext 不再存在。
我确实看到了实际问题,但是我该如何解决呢?我想有几种解决方案,但迄今为止我所想到的没有一个适合我的情况。
- 摆脱存储库模式,并为工作的每个原子部分使用新的 DataContext。
- 我真的不想这样做。一个原因是我不想让应用程序知道存储库。另一个是我不认为让 linq2sql 的东西 COM 可见会很好。
- 另外,我认为这样做
context.SubmitChanges()
可能会比我预期的要多得多。
- 指定 DataLoadOptions 以获取相关元素。
- 因为我希望我的业务逻辑层在某些情况下只回复一些实体,所以我不知道他们需要使用哪些子属性。
- 禁用所有属性的延迟加载/延迟加载。
- 不是一个选择,因为有很多表,而且它们的链接很紧密。这可能会导致大量不必要的流量和数据库负载。
- 互联网上的一些帖子说使用 .Single() 应该会有所帮助。
- 显然它不...
有什么办法可以解决这个痛苦吗?
顺便说一句:我们决定使用 Linq t0 SQL,因为它是一个相对轻量级的 ORM 解决方案,并且包含在 .NET 框架和 Visual Studio 中。如果 .NET 实体框架更适合这种模式,则可以选择切换到它。(我们在实施方面还没有那么远。)
domain-driven-design - 存储库模式:如何延迟加载?或者,我应该拆分这个聚合吗?
我有一个具有编辑器和项目概念的域模型。
一个Editor拥有多个Projects,一个Project不仅有一个Editor owner,还有多个Editor members。因此,一个编辑器也有许多“加入”的项目。
我正在采用 DDD 方法对此进行建模并使用存储库模式进行持久化。但是,我对模式的理解还不够好,无法确定我应该如何做到这一点。
我正在假设 Editor 和 Project 可能在同一个聚合中,根是 Editor。因此,我可以获得一个编辑器,然后枚举其项目,并可以从那里枚举项目的成员编辑器。
但是,如果我只被允许从我的存储库中检索编辑器,这是否意味着当我获得拥有它们的编辑器时,我必须从存储库中加载所有项目?如果我想延迟加载成员编辑器,项目是否也需要对存储库的引用?
或者,如果我拆分聚合并拥有一个编辑器存储库和一个项目存储库,我应该如何处理两者之间的事务,例如将新项目添加到编辑器时?例如:
我是否误解了存储库模式的意图?
language-agnostic - 使用域模型和 POCO 类时,查询在哪里?
我是域模型、POCO 和 DDD 的新手,所以我仍在努力思考一些想法。
我还没有弄清楚的一件事是如何保持我的域模型简单且与存储无关,但仍然能够以丰富的方式对其数据执行一些查询。
例如,假设我有一个包含 OrdemItems 集合的实体 Order。无论出于何种原因,我都想获得最便宜的订单商品,或者可能是目前没有库存的订单商品清单。我不想做的是从存储中检索所有订单项目并稍后过滤(太昂贵),所以我想最终以某种方式获得“SELECT .. WHERE ITEM.INSTOCK = FALSE”类型的数据库查询。我不想在我的实体中使用该 SQL 查询,或者任何变体是否会将我绑定到特定平台,例如 Linq2SQL 上的 NHibernate 查询。在这种情况下,常见的解决方案是什么?
domain-driven-design - 所有“批量”操作在 DDD 中属于哪里?
在 DDD 中,关键概念之一是存储库,它允许您检索实体(或聚合根),然后在更新后将它们保存回来。
假设我们需要对实体执行一些“批量”操作,并且实体的数量使得将它们检索到内存中是绝对不可能的。ie操作只能在数据库中进行。
这种“批量”操作的地方在哪里?它应该是存储库上的方法吗?它不会通过数据库特定操作“泄漏”存储库抽象吗?它不会将业务操作从实体转移到存储库吗?
nhibernate - 关于域对象的存储库及其保存方法的问题
关于 DDD、存储库模式和 ORM,我有一个有点荒谬的问题。在这个例子中,我有 3 个类:Address、Company和Person。一个人是公司的成员并且有一个地址。公司也有地址。
这些类反映了一个数据库模型。我删除了我的模型的所有依赖项,因此它们不会绑定到特定的 ORM 库,例如 NHibernate 或 LinqToSql。这些依赖关系在存储库中处理。
在其中一个存储库中有一个SavePerson(Person person)方法,该方法根据 Person 是否已存在于数据库中来插入/更新它。
由于 Person 对象有一个 Company,因此我目前在进行 SavePerson 调用时也保存/更新了 Company 属性的值。在此过程中,我插入/更新公司的所有数据 - 名称和地址。
但是,我真的很难想到公司的数据在与人打交道时会发生变化的情况——我只想能够将公司分配给一个人,或者将一个人移动到另一个公司。我不认为我想和一个新人一起创建一个新公司。所以 SaveCompany 调用引入了不必要的数据库调用。保存 Person 时,我应该能够更新 CompanyId 列。
但是由于 Person 类有一个 Company 属性,我有点倾向于用它来更新/插入它。从严格/纯粹的角度来看,SavePerson 方法应该保存整个 Person。
首选的方式是什么?只是在保存 Person 或保存其所有数据时插入/更新 Company 属性的 CompanyId?或者你会为这两种场景创建两种不同的方法(你会给它们起什么名字?)
另外,另一个问题,我目前有不同的方法来保存一个人、一个地址和一个公司,所以当我保存一个公司时,我也会调用 SaveAddress。假设我使用 LinqToSql——这意味着我不在同一个 Linq 查询中插入/更新公司和地址。我猜有 2 个 Select Calls(检查公司是否存在,检查地址是否存在)。然后对两者进行两次插入/更新调用。如果引入更多的复合模型类,则更多。LinqToSql 有没有办法优化这些调用?
编辑
另请参阅此后续问题。值对象如何存储在数据库中?
domain-driven-design - 实体可以访问存储库吗?
我刚刚开始使用 DDD,所以也许这是一个愚蠢的问题......
实体可以访问存储库(通过某些 IRepository 接口)以在运行时获取值吗?例如,我想对属性强制执行“默认”选择:
我的问题是,做这样的事情是否严重违反了 DDD 原则。如果不是,我的下一个问题是提供存储库以供使用的最佳方式是什么?是否应该在创建 Person 对象时提供?
谢谢,P
ddd-repositories - DDD:在哪里获取值对象列表最合适
我有一个分配给产品的名为“产品类型”的值类型。(一个产品有一个产品类型)
为了允许用户从列表中选择类型,我将填写一个下拉列表。在哪里检索产品类型列表最合适?一个实现存储库模式的类?
编辑:通过将产品代码更改为产品类型来澄清。产品类型类似于“DVD”/“CD”/“蓝光”/等。