请教对象设计
虽然长期关注J道关于对象设计的帖子,但是自己真正去设计的时候还是会被对象的职责混淆。请高手指点。
首先说说业务:在一个地图上画一个区域,实现对这个区域的管理。
1。划分区域
a.首先提示用户在地图上某水平上画一个区域,区域不能与同水平的其他区域相交(是三维的地图)。区域的图形必须保存到图形空间中才可以显示,
b.用户指定区域的名称,点击保存。把这个区域保存到数据库中。
c.关闭界面时,如果用户在地图上画了区域,但是又没有保存这个区域,提示用户保存。否则关闭界面。
2.查询区域
a.查询一个水平的所有区域,然后点击显示可以在地图上显示出来。
3.修改区域
a.查询某个区域后可以对这个区域进行修改,修改主要是修改区域的名字,和区域的图形,修改后保存,
b.如果修改后的区域与同一水平的其他区域相交,提示用户区域相交,图形恢复到以前。
c.如果区域图形修改后未保存,提示用户区域已修改是否保存。
以下是我设计的类图:
Region:区域类,领域核心
RegionId:区域标识
RegionGraphise:区域图形
Graphise:图形
GraphiseId;图形标识:把图形放入图形空间中,图形空间会给图形一个标识。
GraphiseUtil:图形工具,可以提示用户在地图上画一个区域,也可以提示用户修改这个区域图形
GraphiseSpace:图形空间:提示用户画的区域必须加入到图形空间中才可以显示
Point:区域图形由点构成
RegionRespository:区域仓库
RegionService:应用服务
下面粘贴部分代码:
|
我有以下疑问:
1.我觉得区域和区域图形应该属于聚合关系,区域是聚合跟,区域图形必须依赖与区域图形存在,那么创建区域图形的职责是不是要区域来承担呢?在RegionService中有一个判断新画的区域图形是否与已经存在的区域图形相交的方法,这个方法的职责到底应该谁来承担呢?
2。用户在划分区域的时候,应该是先按绘制区域图形按钮画区域图形,然后在点保存按钮,把区域和区域的图形数据保存到数据库中。那么区域图形的生命周期应该是先与区域这个聚合跟。是不是说创建区域图形的职责不给区域,但是把修改区域图形的职责划分给区域。
呢,按我上面的做法,我怎么感觉,区域和区域图形的生命周期之间并没有太大的联系呢?它们好像独立的存在一样。如果我把区域图形的修改放在区域的职责里面,是不是就需要发出一个修改的区域图形的DomainEvent,然后在事件处理器里面处理呢?在事件处理器里面处理和在服务里面处理有什么区别呢?
3、我上面说了这么多的核心问题就是:到底区域和区域图形是否是聚合关系,聚合关系的两个实体,区域内部实体的创建,修改,删除是不是应该有聚合跟负责。但是区域图形的生命周期应该早于区域,那怎么让区域负责呢?
4。有时候又感觉区域图形是值对象,但是我却要记录区域图形是否保存到数据库这样一个状态,这个状态是否应该有区域图形对象来承担呢(这一般怎么实现呢,好像hibernate的Session一样)
5。整个代码我觉得很多职责的分配都有问题,但是我却找不到一个很好的思路,请大家指点。