我正在尝试通过示例学习领域驱动设计,我需要您的建议。 假设我有一个名为Tender的实体。 我收到外部服务的肥皂消息; 该消息包含有关招标的所有信息(tenderId,tenderSum,...)
我必须做的事情:
我尝试以正确的方式进行,但最后我发现,大多数代码都存在于服务,存储库等中。 我真的很困惑。我做错了什么?我应该在域对象中做所有这些吗?
答案 0 :(得分:3)
DDD中的某些实体/值对象的行为很少,这种情况并不少见。我几乎可以肯定,在任何项目中,你至少会有一些实体/ VO只有一些构造逻辑并且是不可变的。这些不是DDD的主要关注点。
您应该专注于识别和(重新)定义有界上下文和聚合。你会在网上找到很多有关这方面的信息(dddcommunity是一个很好的起点,但我强烈建议至少观看几次你能从Eric Evans,Udi Dahan和Greg Young那里找到的视频)
并且不要太担心 - 无论你有多好,都需要几次失败才能做到正确:)
答案 1 :(得分:2)
我发现,随着模型的发展,生活在服务中的所有东西都会随着时间的推移而变化。在您的示例中,一个选项可能是让您的实体的方法成员名为Tender.LoadValuesFrom[ServiceName](val1, val1, etc)
(提供的服务名称在域中具有意义)。
这样至少你让实体负责加载自己的值。有时奇怪的服务会显得贫血。如果它发生在任何地方或感觉真的很尴尬,那么它可能试图告诉你一些事情。否则我不会过分强调它。
答案 2 :(得分:1)
猜猜你并不是唯一一个这样的想法。通常在我的模型中最终得到的是验证,聚合管理,我也尝试着重于Value Objects。尽量减少自动属性,邀请您快速开发而不用考虑...... 前段时间我在博客上写了一篇关于这篇文章的文章...... http://magnusbackeus.wordpress.com/2011/05/31/preventing-anemic-domain-model-where-is-my-model-behaviour/
但这是一项迭代工作,找到了正确的模型。准备好做很多重构......