问题标签 [domain-driven-design]

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 投票
9 回答
12355 浏览

domain-driven-design - 我在哪里可以找到好的领域驱动设计资源?

什么是最好的地方来了解有关领域驱动设计的所有信息,从初学者到高级。

  • 图书
  • 网站
  • 邮件列表
  • 用户组
  • 会议
  • ETC
0 投票
3 回答
9918 浏览

domain-driven-design - 使用 Linq to Sql 和 C# 的 Repository 模式的实现示例

我正在为我的 ASP.net MVC 应用程序寻找遵循域驱动设计原则的存储库模式实现示例/资源。有没有人可以分享一个很好的例子或学习资源?

0 投票
12 回答
13202 浏览

c# - 有没有使用 DDD(领域驱动设计)的开源项目?

我试图理解 DDD 背后的概念,但我发现仅通过阅读书籍很难理解,因为它们倾向于以相当抽象的方式讨论该主题。我想在代码中看到一些好的 DDD 实现,最好是在 C# 中。

有没有在开源世界中实践 DDD 的项目的好例子?

0 投票
10 回答
4136 浏览

c# - 领域特定语言 (DSL) 和领域驱动设计 (DDD)

领域特定语言 (DSL) 和领域驱动设计 (DDD) 之间有什么区别和相似之处?

0 投票
2 回答
1796 浏览

domain-driven-design - 如何避免贫乏的领域层仍然有丰富的验证和业务规则

如果你有一个域对象,并且你想做一些有用的和对该域对象的核心责任的事情,比如确保它是有效的,你有时需要访问相关对象的状态来执行这个验证。

如何避免需要调用存储库或数据访问层的域对象?由于性能原因,您不能总是遍历集合关系,即使使用延迟加载也是如此,并且您经常希望在域对象中执行查询。您可以将存储库实现依赖注入到域中,但不是真正纯粹的并且使测试复杂化。

我总是放松一些事情,并允许使用 DI 从域访问存储库。我没有看到如何在一个复杂的应用程序中拥有一个“纯”域层的明确示例,它也不是贫血的,并且有一个服务/应用程序层来做所有的工作,并弄乱应该是域对象的内部结构。

0 投票
3 回答
3305 浏览

apache-flex - DDD 和异步存储库

我们正在开发一个使用 RMI 和 JMS 连接到 Java 后端的富客户端(用 Flex 编写)。我正在考虑以 DDD 方式实现客户端,以便它具有用于域对象上的 CRUD 操作的存储库。

然而,问题是所有后端通信都是异步发生的,我无法强制客户端等待继续,直到它收到响应。这意味着,在低级别上,我可以调用远程对象上的方法并获得 AsyncToken 作为返回值。然后我可以监听 asynctoken 上的事件以查看调用是通过还是失败。然而,这打破了存储库背后的主要思想,向客户隐藏技术细节。

我猜可能有两种选择:

  1. 让存储库上的方法返回 asynctoken,这对我来说似乎是一个混乱的解决方案
  2. 让这些方法返回一个空集合(例如 findAll),当收到响应时该集合将被填充。

两者都有优点和缺点,我想从你们那里得到一些意见。

(更进一步,什么是好的缓存策略?根据情况,我不希望存储库在每次向它请求所有实体时都调用服务器。这将如何影响存储库上方法的签名。 )

0 投票
3 回答
699 浏览

c# - 领域驱动设计 - 逻辑删除

所以,我建立了一个很好的域模型。存储库处理数据访问等等。弹出了一个新要求,表明需要使用删除记录原因。到目前为止,删除都相当简单 => Entity.Children.Remove(child)。由于我的 ORM 工具正在处理状态管理,因此没有进行内部更改跟踪。但是,我不确定如何处理这个问题。

1)我可以在父实体中保留一个已删除的子集合,并将更改跟踪从 nHibernate 中拉出并自己处理。

2)??????

0 投票
2 回答
157 浏览

dns - 实体视角

背景:所以,我正在尝试构建一个复杂得离谱的领域模型。与用户交谈,系统的使用方式有多种(例如:一种是从员工的角度;另一种是从雇主的角度)。实际上,它们是重用核心域的多个应用程序。

问题:从多个角度创建域是错误的吗?例如,在业务运行时构建域意味着创建各种关系类,这些关系类包含有关实体的额外信息等等......但是,从特定角度运行时,情况会更加清晰,因为大多数关系类可以滚动到它们的父实体中。

想法?反驳?我完全脱离基地了吗?

0 投票
4 回答
350 浏览

orm - 需要的意见:连接或断开域模型中的实体更好吗?

我正在开始一个新项目;我希望遵循 DDD 方法。我们已经与业务部门进行了交谈,并在某些细节(互联网电视)方面获得了对该领域的一些了解。

该团队五人强大且分布广泛。我们采用了存储库模式进行数据访问。我们总体上遵循基于服务的方法;服务负责执行操作,我们将通过 REST API 公开一些操作,一些通过我们自己的客户端应用程序公开。

没有使用 ORM 经验的人(目前我也没有大量经验)希望对实体之间没有关系的实体进行建模,其理由是这迫使使用存储库的开发人员准确地知道他们的影响正在数据库上。我想指出的是,这最终会导致一组非常健谈的服务、更多需要维护和测试的代码,以及一个根本没有抓住重点的领域模型。我认为这不是一个好方法,我与之交谈过的任何人也没有。

他们对实现这种方法的渴望是存储库外观下的 Linq2SQL。这需要第二个模型,它与域模型之间的映射类/层,以及存储库中的大量重复,因为编写通用存储库似乎是不可能的(我们目前已经看到)。也无法映射利用继承的 L2S 实体(这意味着每个实体都必须具有 created-on、created-by 等属性)

第一个问题: 谁能给我一些关于如何改变主意的建议?我正在编写一个使用 NHibernate 的副项目,它当然很好地支持 DDD 方法,基于“给我看代码”是一个强有力的论点。

第二个问题: 我应该尝试在我的 NHibernate 使用我自己的时间副项目中演示什么样的事情?我是新手;他们对 NHibernate 的厌恶之一是学习曲线和对 XML 的要求;我的反驳是它是一个强大的工具,而且 Fluent NHibernate 消除了对 XML 的需求。他们还是不喜欢。

0 投票
3 回答
221 浏览

c# - 将字符串集放入表示层

我们正在开发一个使用 C# 编写并使用 NHibernate 将对象映射到数据库的医院信息系统。MVC 模式用于将业务逻辑与 UI 分离。问题来了,

如何将可变大小的不同字符串集传递给 UI?

例如,一个Contact对象有一个名为的属性,该属性City保存了哪个城市联系人居住。在编写应用程序的国家/地区有 80 多个城市。你怎么能把这些城市写到一个组合框中?(或数据网格、表格……)在此示例中,城市编号是固定的。很长一段时间没有必要添加另一个城市。(如果城市列表发生变化,重新编译不是问题)

例如,一个Contact对象有另一个名为的属性FooBar,它将保存 1000 个不同的字符串值,这些值将从该属性的组合框中选择。如果用户愿意,这个集合可以增长。您如何使用这些值加载组合框?(如果字符串列表静态写入组合框对象,重新编译是有问题的)

我有不同的解决方案如下

  1. 在代码或设计器中静态写入组合框的所有字符串值
  2. 从资源文件中获取值
  3. 将这些值写入 XML 文件(实际上与上面相同,但无需重新编译)
  4. 使用 NHibernate创建一个City对象并将值从表中获取到列表中CITY
  5. 创建一个StringHolder具有TypeandValue属性的类。所有字符串值(包括CityFooBar)都将写入一个名为 的表中STRINGHOLDER。并通过 NHibernate 使用“CITY”或“FOOBAR”等键获取这些值。

你会选哪一个?或者你能给我推荐一个吗?

谢谢大家