c# - 有丰富的领域模型示例吗?

标签 c# java domain-driven-design domain-model

<分区>

我正在寻找一个简单的例子来说明使用富领域模型的好处。理想情况下,我想要前后代码 list (应尽可能短)。

之前的代码 list 应该显示使用贫血领域模型解决的问题,以及大量相当程序化的服务层代码,之后的代码 list 应该显示使用丰富的面向对象领域解决的相同问题模型。

理想情况下,代码 list 应该使用 Java 或 Groovy,但任何非常相似的语言(例如 C#)都可以。

最佳答案

我会给你一个真实生产代码的简单例子:

Person.groovy:

  List addToGroup(Group group) {
    Membership.link(this, group)
    return groups()
  }

成员(member)资格.groovy:

 static Membership link(person, group) {
    def m = Membership.findByPersonAndGroup(person, group)
    if (!m) {
        m = new Membership()
        person?.addToMemberships(m)
        group?.addToMemberships(m)
        m.save()
    }
    return m
}

每当我想将一个人绑定(bind)到一个组时,我只需执行 person.addToGroup(group)

程序代码在你的 Controller 上是这样的:

def m = Membership.findByPersonAndGroup(person, group)
 if (!m) {
        m = new Membership()
        person?.addToMemberships(m)
        group?.addToMemberships(m)
        m.save()
}

乍一看,您可以说您可以将其包装在一个函数中,这样就可以了。 但恕我直言,富域设计的优势在于它更接近您的思维方式,从而更接近于合理化。在这个特定的示例中,我只想将一个人添加到一个组中,代码将只读取该内容。

如您所问,这是一个简短的示例,但很容易扩展此示例并发现您可以通过适当的域建模构建复杂的交互。

您还可以查看 Martin Fowler 的 Transaction Script对比Domain Model对于这两种模式的简要解释,我认为它们与 DDD 相关。

关于c# - 有丰富的领域模型示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663980/

相关文章:

c# - 从 DatePicker 和 TimePicker 控件创建 DateTime 对象

c# - 显示验证消息,但清除值

database-design - 如何在 DDD 中设计与数据库无关的引用

c# - 检查 HtmlHelperMethod 中是否存在(部分) View

java - 如何从 doc 或 pdf 文件中读取特定页面。

java - Java 中的 JsonArray 列表

java - 一个java应用程序可以有多少个线程池

python - 为什么域驱动设计似乎只在 C# 和 Java 等静态语言中流行?

.net - 逻辑什么时候属于业务对象/实体,什么时候属于服务?

c# - 将DataTable保存到文本文件的最短方法