当前位置: 首页 > 知识库问答 >
问题:

丰富的领域模型意味着大的领域类是可以接受的吗?

赵珂
2023-03-14

我读了很多关于实体和领域驱动设计的文章,然后是关于贫乏的领域模型和丰富的领域模型的争论。我个人更喜欢一个对象封装它自己的领域知识的方法,但是,由于似乎有一些不同的意见,我有一些问题:

  1. 根据系统的类型,主域类可能会变得相当大,即使方法的逻辑在不同的类中。在这里忽略单个责任主体是可以接受的,还是有一种方法可以将一个包含50个字段和50个方法的订单封装到一个不错的结构中,而不会给您留下一个1MB的类,或者在封装方法的情况下,这是可以接受的?
  2. 在试图维护丰富的域模型和封装时,对于域服务甚至域工厂中应该包含哪些内容,是否有任何指导原则或经验法则?

共有1个答案

法浩壤
2023-03-14

SRP始终适用。我会问自己,这个实体作为一个整体是否有意义,或者,如果你能找到一些内部的子结构并以这种方式拆分它,那么理解它和使用它会更容易。

如果您有一个50字段的订单,这实际上可能是应用有界上下文的典型情况,也就是说,不同的子系统可以不同地查看订单,并且每个子系统只需要订单的一部分。

对于“领域工厂”,经验法则是它包含任何与对象创建相关的内容。

对于“域服务”来说,它似乎是一堆逻辑,在逻辑上不适合实体。看看这个。

 类似资料:
  • 问题内容: 我正在尝试在Realm中使用Optional Int,并且出现了我认为的旧错误。 码 错误 我正在将Realm 0.96.1与XCode 7.1一起使用 我的境界文档中了解它说,不支持作为,但https://twitter.com/realm/status/656621989583548416。那是来自Realm Twitter的,这就是为什么我感到困惑。被支持还是仍然没有? 问题答案

  • 3.6 ABP领域层 - 领域事件 在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合

  • 3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi

  • DDD DSL DSL(domain-specific languages)即领域特定语言,唯一能够确定DSL边界的方法是考虑“一门语言的一种特定用法”和“该语言的设计者或使用者的意图。在试图设计一个DSL的时候,发现了一些有意思的简单的示例。 DSL示例 jQuery 最流行的DSL jQuery是一个Internal DSL的典型的例子。它是在一门现成语言内实现针对领域问题的描述。 $('.m

  • 链接 实体 值对象 仓储 领域服务 工作单元 领域事件 数据过滤器 规约模式