UpT*_*eek 5 nhibernate orm domain-driven-design
我正在尝试关注DDD,或者至少我对它的理解有限.
我在将一些东西装入DDD盒子时遇到了麻烦.
一个例子:我有一个用户实体.此用户实体具有对UserPreferencesInfo对象的引用 - 这只是一个包含许多有关用户首选项的属性的类.这些属性是相当无关的,除了它们都是用户首选项(不像地址VO,其中所有属性形成一个有意义的整体).
问题是 - 这个UserPreferencesInfo对象是什么?
1)显然它不是一个实体(我只是将它作为'组件'存储在流利的nhibernate说话中(即在与User实体相同的DB表中).
2)VO?我理解Value Object应该是不可变的(所以你不能把它们装起来,只是新建它们).当对象是例如地址时(地址属性形成有意义的"整体"),这就完全有意义.但在UserPreferencesInfo的情况下,我认为这没有意义. 可能有100个属性(实际上)这个对象可能有20个属性 - 为什么我需要在需要更改一个属性时丢弃重新创建对象?
我觉得我需要在这里打破规则以获得我需要的东西,但我真的不喜欢这个想法(这是一个滑坡!).我在这里错过了什么吗?
谢谢
答案1(实用的)
我是DDD的巨大支持者,但不要强迫它.您已经认识到,不可变的VO添加的工作量超出了要求.DDD旨在利用复杂性,但在这种情况下,管理的复杂性非常低.
我只是将其UserPreferencesInfo视为实体,并从User聚合中引用它.您可以选择将其存储为组件还是单独的表.
恕我直言,整个实体与VO辩论可以说得没有实际意义.在6个月的时间内,另一位开发人员不太可能会在6个月内查看您的代码并说" WTF!他没有使用不可变的VO!他在想什么!! ".
答案2(DDD纯粹主义者)
是UserPreferencesInfo实际业务领域的一部分?其他人提到了解决这个问题.但是如果你坚持使用纯DDD,你可能需要确定哪些偏好属于哪个Bounded Context.
这反过来又可能导致添加服务层,在你知道之前,你已经过度设计了解决方案,解决了一个非常简单的问题......
据我了解,UserPreferenceInfo是实体的一部分User。尔格用户实体是一个聚合根,它与其他对象UserRepository一起作为一个整体进行检索或保存。UserPreferenceInfo
就我个人而言,我认为这UserPreferenceInfo是实体类型,因为它具有身份 - 它可以更改、保存并从存储库中检索,并且仍然被视为相同的对象(即具有身份)。但这取决于你的使用情况。
恕我直言,对象在 DAL 中的表示方式并不重要——它是存储在单独的表中还是其他表的一部分中。DDD 的好处之一是持久的无知,这通常是一件好事。
当然,我可能是错的,我也是DDD新手。
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |