楼主: superatao

[FAQ] 关于领域模型

[复制链接]
论坛徽章:
115
至尊黑钻
日期:2011-12-27 16:46:47紫钻
日期:2011-12-27 16:46:47粉钻
日期:2011-12-27 16:46:47绿钻
日期:2011-12-27 16:46:47黄钻
日期:2011-12-27 16:46:47红钻
日期:2011-12-27 16:46:4719周年集字徽章-19
日期:2020-10-21 16:05:37
11#
 楼主| 发表于 2011-12-30 15:18 | 只看该作者
张恂 发表于 2011-12-30 11:52
>>也就是分析类和设计类的区别,如何由提取分析类,如何由分析类生成或形成系统的设计类。

推荐你读下 C ...

一直都听说这本书不错,但还没机会阅读,一定要买本读一读。

使用道具 举报

回复
论坛徽章:
62
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
12#
发表于 2011-12-30 16:25 | 只看该作者
superatao 发表于 2011-12-30 13:34
而我个人又觉得,以上两种方式都不应该被称作为“领域模型”抽取,其实都是在从软件开发和实现的角度,去抽 ...

>>以上两种方式都不应该被称作为“领域模型”抽取,其实都是在从软件开发和实现的角度,去抽取持久层的实体类。真正的领域模型应该是客观世界对象的真实反映,再把它们进行建模。

对!这个真正的领域模型,就是我说的业务领域模型(BDM),其中的类都是业务实体类(Business Entity),属于问题域(Problem Domain),是领域建模的真正起点。通常这些类是没有(计算)方法/操作的。

之所以造成混淆,是因为你所说的是业务领域模型,是业务实体,是因;而他们说的是软件架构中的领域(设计)类,属于解决域(Solution Domain),是软件实体,是果。从问题域的领域类开始,导出解决域的领域类,这是一个更合理的跨界分析过程。

理论上,两者都可以简称为“领域模型”,如果不加区分说明,很容易造成鸡同鸭讲。

使用道具 举报

回复
论坛徽章:
62
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
13#
发表于 2011-12-30 17:31 | 只看该作者
superatao 发表于 2011-12-30 13:18
我举个例子吧:拿一个采购系统为例,其中涉及到采购申请单、采购合同等。我在设计领域模型的时候总会从系统 ...

>>我在设计领域模型的时候总会从系统实现(也就是持久层)的角度出发去抽取“领域模型”

通常这个做法和习惯不好,相当于逆向工程。

业务建模、领域建模最好从业务需求描述和文档开始,尽量不要考虑软件实现。这样有可能做出更稳定、更优化的领域模型。

正确的顺序是:Problem Domain -> Solution Domain

使用道具 举报

回复
论坛徽章:
62
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
14#
发表于 2011-12-30 17:33 | 只看该作者
superatao 发表于 2011-12-30 12:45
感谢张恂老师的解答,您的回复非常清晰。
站在不同层面来看这个问题,确实有时候会搞晕(应该说现在还是有 ...

呵呵,谢谢!

欢迎加入太极派!

使用道具 举报

回复
论坛徽章:
115
至尊黑钻
日期:2011-12-27 16:46:47紫钻
日期:2011-12-27 16:46:47粉钻
日期:2011-12-27 16:46:47绿钻
日期:2011-12-27 16:46:47黄钻
日期:2011-12-27 16:46:47红钻
日期:2011-12-27 16:46:4719周年集字徽章-19
日期:2020-10-21 16:05:37
15#
 楼主| 发表于 2012-1-4 11:16 | 只看该作者
感谢张恂大师高论。

使用道具 举报

回复
论坛徽章:
62
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
16#
发表于 2012-1-4 15:47 | 只看该作者
呵呵,不用客气!

使用道具 举报

回复
论坛徽章:
62
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
17#
发表于 2012-1-4 16:48 | 只看该作者
本帖最后由 张恂 于 2012-1-4 16:52 编辑
superatao 发表于 2011-12-30 13:22
但是又有人指出,我这样抽取是不合理的,领域模型不能够有“自己创建自己,自己更新自己”的所谓操作。所以 ...

>>主信息中的操作有“添加明细项、修改明细项、删除明细项”等操作。我个人总觉得不合适,因为这岂不是不符合高内聚低耦合的原则了,因为“采购申请”类跨类去操作了“申请明细”类。

这个模型他们说的对,“申请明细”对象的 CRUD 等操作应该由“采购申请”对象负责。

“采购申请”和“申请明细”是一种组成(强聚合)关系。

A 聚合了 B,或 A 是 B 的容器,这时由 A 来管理 B 对象的生命周期、访问和更新是很合理的,符合高内聚、低耦合原则。

不过这里,我们是在软件架构-设计(实现)类的层面上讨论领域模型,所以类、属性、操作名称最好不要用中文,建议用英文重新写。

中文名称在太极建模(UTM)中,通常用来表示业务领域模型和业务实体类,这样就可以避免混淆。

使用道具 举报

回复
论坛徽章:
115
至尊黑钻
日期:2011-12-27 16:46:47紫钻
日期:2011-12-27 16:46:47粉钻
日期:2011-12-27 16:46:47绿钻
日期:2011-12-27 16:46:47黄钻
日期:2011-12-27 16:46:47红钻
日期:2011-12-27 16:46:4719周年集字徽章-19
日期:2020-10-21 16:05:37
18#
 楼主| 发表于 2012-1-5 16:46 | 只看该作者
张恂 发表于 2012-1-4 16:48
>>主信息中的操作有“添加明细项、修改明细项、删除明细项”等操作。我个人总觉得不合适,因为这岂不是不 ...

张恂老师用“容器”和“主信息与明细信息的强聚合关系”解释得太通俗易懂了,我怎么就发现之前没有人给我这么讲解过呢,否则也不会搞得到现在都在困惑。呵呵。

另外,张恂大师,对于采购申请主信息自身的CRUD操作,您觉得是否要定义在其实体类本身的操作中呢?还是剥离出来,放到逻辑层的类里面,由逻辑层的类去调用持久层的DAO作数据保存?

使用道具 举报

回复
论坛徽章:
0
19#
发表于 2012-1-6 12:34 | 只看该作者
本帖最后由 杭州李云 于 2012-1-6 12:36 编辑
superatao 发表于 2011-12-30 13:18
我举个例子吧:拿一个采购系统为例,其中涉及到采购申请单、采购合同等。我在设计领域模型的时候总会从系统 ...

这个图很让人晕的。首先,我将图中的“采购申请”和“申请名细”当作是名词。以申请明细为例,如果其中可以有“创建明细”这个动作,那到底是先有申请名细还是先有“创建明细”这个动作?建模的重点是要符合人的思维常识,我们的常识是通过“创建明细”这个动作可以获得“申请名细”,而这张图就没有符合这一常识。

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2012-1-6 12:39 | 只看该作者
张恂 发表于 2011-12-30 17:31
>>我在设计领域模型的时候总会从系统实现(也就是持久层)的角度出发去抽取“领域模型”

通常这个做法 ...

很认同这一观点。我们有时将因果给倒置了,等同于问题都没有分析好就去解决问题了,这种做法所获得的设计很容易概念不清。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表