windflaw
2007-05-12 23:04
还是没有答案,继续顶

banq
2007-05-14 09:23
我的做法是"通过借道服务来实现",通过服务,将Entity和它的大批量子对象使用专门批量查询组件实现。例如Jdon框架就提供批量查询快速实现,可参考jivejdon3源码

相关问题:

关于DDD的思考

http://www.jdon.com/jivejdon/thread/31792.html

欢迎大家讨论。

[该贴被banq于2007年05月21日 09:37修改过]

ulswww
2007-05-22 16:58
我认为还是业务没有分析的清楚

为什么会把许多年代数据放到一个对象里,是否真有这样的需求,是否可以分开。

还有你说每次也不用查那么多数据,模型是否应该从这个地方进行精化

custjcy
2007-07-10 12:14
对模型的精化很难解决这个问题,因为存在这样的场景:需要哪些对象是无法预先确定,必须要根据Entity中的运行时逻辑决定。

有两个方法解决这个问题:

1. 将对应的逻辑上一到它的调用者。

2. Entity中增加事件或者代理,Entity通过事件机制或代理取得需要的数据。Entity的调用者捕获并处理事件或实现代理。

sonnylys
2008-07-28 23:24
>>>

public class DayArrange // 每日排班明细

{

public WorkShiftSchedule OwnerSchedule; // 所属的排班表

public DateTime Day; // 日期

public WorkShift WorkShiftPlan; // 安排的班次

}

但是,几年下来,明细信息越来越多,显然用IList这样的数据集就算用Lazy Load性能会出现很大问题。

从以上代码及描述来看,个人认为你所提的“明细信息越来越多”的“明细”为"DayArrange"; “几年下来,明细信息越来越多“,至此,从描述中得到的信息是:”DayArrange”和“WorkShiftSchedule”实际上没存在任何关系,不然的话,一个“WorkShiftSchedule”排班表不就按排了几年的“DayArrange“?

>>>

public class WorkShiftSchedule {

public IList GetMonthArranges(string month){}

public DayArrange GetDayArrange(DateTime day){}

}

从代码及描述来看,WorkShiftSchedule 更象是个service?不理解为什么说是entity,然后苦恼其依赖Repository!请指教,谢谢。

[该贴被sonnylys于2008-07-29 00:09修改过]

xmuzyu
2008-07-30 19:55
WorkShiftSchedule是需要跟踪的,是要保存到数据库的,所以说是Entity.

banq
2008-07-31 11:47
关键还是设计分离的问题,要将持久化的实体和DDD的实体概念进行区分,而且DDD的实体也不是让你将所有业务逻辑都放到一个实体类中,然后将这个大实体类去保存数据库,这样做都是没有进行详细设计层面的考虑。

Evans DDD其实是分析模式和设计模式的牵手,也就是将这两者和谐统一了,对于我们初学者,只是学习Evans DDD是不够的,显然必要学习设计模式和分析模式,这两个基础踏实了,才能将DDD落实到实处,否则就是依葫芦画瓢。

关于OO与关系数据库阻抗的谈论

http://www.jdon.com/jivejdon/thread/34411.html

freebox
2008-07-31 21:43
按照仅存的一点化学知识理解,其实这像是分子是由原子构成的道理,而现在从整体上分析是要分析分子间的关系,但是实现的时候由于是由原子组成的所以还要分别实现原子。

windflaw
2008-08-04 15:51
banq:我的做法是"通过借道服务来实现",通过服务,将Entity和它的大批量子对象使用专门批量查询组件实现。例如Jdon框架就提供批量查询快速实现

可不可以理解批量查询组件对应到领域模型中的service?

banq
2008-08-05 10:07
>理解批量查询组件对应到领域模型中的service

可以

xmuzyu
2008-09-11 11:18
DDD中有说同一个模型可以有不同的实现。像楼主的这种情况就是可以采用不同的实现啊。比如你说的lazyload,当然banq老师的批量查询就是另一种实现了。

leomao10
2008-11-08 22:47
楼主的设计有问题吧? workshiftschedule给我的感觉就是DayArrange表里面的所有内容啊?

请问除了day arrange之外,workshiftschedule还有什么特别的数据么?

如果没有,那么workshiftschedule就不是一个entity,或者说不是和业务有关的entity,而是指代了Day Arrange table,这样的话, WorkShiftSchedule需要改名为DayArrangeService,对你来说Service类可以调用数据库的内容是很正常的吧: )

如果有的话,请指明是什么数据,同时,需要考虑的问题是,每次persentation layer显示的时候,是否需要这么多的数据(所以的day arrange),基本来说是不需要,那么可以考虑直接查询Day Arrange。

>>WorkShiftSchedule是需要跟踪的,是要保存到数据库的,所以说是Entity.

请详细说明什么是需要跟踪的,需要将work Shift Schedule的什么数据保存到数据库

另外,在设计程序之前,最好能够仔细审查domain model和用例

jokeway
2010-10-29 15:08
对于这个问题Banq能否直接指出实现方法呢?

代码一出,一切皆明

太多的链接跳来跳去,却没有一个实质性的结论

猜你喜欢
2Go