别在领域模型迷失了自己

首先把图书馆系统的背景说明一下吧﹕公司每个成员通过局域网登录图书管理系统﹐然后预借书籍﹐图书管理员收到预借信息后﹐核准借阅﹐并通知借书人前来领书﹐告知相关事项。

领域模型的价值不在于它的设计优美(它只是一些对象﹐最重要的也就是对象之间的关系)﹐而在于它体现了系统的核心价值。什么是系统的核心价值呢?我想我们的图书馆系统和华尔街的一个商业系统本质的区别应该不是用了什么语言﹐OO还是过程﹐用了什么数据库。因为这两个系统使用什么语言﹐采用什么方式﹐利用什么DBMS﹐都是不能本质区别这两个系统的价值的。那什么才是系统真正的价值呢?

那就是﹕系统能为使用提供什么服务﹐以及提供的质量(即如何服务﹐这也是系统内部的我们要做的事情)。

那什么体现的系统的服务呢?系统的运行方式﹐系统的运行过程﹐系统的业务逻辑。以数据库为中心的开发方式﹐将所有业务逻辑都放在了数据库﹐并结合系统的代码来保证业务逻辑的实现。

而面向对象﹐则其表现点则是直接在对象本身上﹐在于对象之间真正的交互过程﹐结果也是保留在对象的属性和对象与对象的关系中。

从以上方式可以看出﹐无论以数据库为中心的开发如何的OO﹐如何多的设计模式﹐架构体系如何优美﹐它始终离不开数据库。它的OO只是一种手段﹐而非目的。(大家别激动﹐我始终没有提这种方式不好﹐只是实现系统的两种方法而已)

面向对象则不同﹐它将逻辑直接存在于对象上﹐这与现实情况是吻合的﹐这也是面向对象引起这么大热潮的根本原因(我想﹐不明白这一点﹐您会在ORM,AOP等等方面不知其所以然的)。

领域模型是一种思维﹐是一种方法,是在系统分析阶段使用﹐而不是程序员在自己的代码中进行纯设计时的工具。我们不是为了OO而领域﹐不是为了最终要新增数据库而领域﹐这也是为什么在没有理解领域模型本质时﹐使用它进行片断式的代码编写﹐得不到任何好处的原因。想想你在编码中弄出的那些用户﹐图书对象﹐它在系统中的位置是什么?您不能否认它就是为了让新增数据库时更方便吧?领域模型的建立决不是像如何实现某些纯软件逻辑而进行的纯软件设计。(我这里提出的纯软件设计﹐指的是如何在设计中体现扩展性﹐灵活性﹐可维护性而进行的设计)。而是为了能够分析系统提供的服务而产生的一种思维结果。 系统分析员在接手一个系统后﹐首先要做到的事情就是得出系统的服务和服务场景。也就是我们经常所讲的用例(use case)可惜的是﹐很多使用者一直将用例的作用和价值没弄清楚。我想如果没有真正理解用例的作用时﹐您的用例分析将会一直停留在和别人Demo系统之上﹐提供一個漂亮的圖形好說話而已﹐而不会对我们的系统开发有任何实质作用。 

时间: 2024-12-28 21:26:17

别在领域模型迷失了自己的相关文章

个人站长,别在流量面前迷失了方向!

昨天看了稻草"流量真的对个人站长那么重要吗?"的文章,感触颇深.没有流量,个人站长无法生存,然而,太多的个人站长,在流量面前迷失了方向. 做网址导航的时候,曾经进过不少这样的站:站内的连接大概只占了1/3的空间.剩余的2/3,则是用于放各种交换链的代码及广告.即使是站内内容连接用的1/3空间里,还有一个用于交换流量的强点浮层广告等在那里.而关闭网页退出时,四五个刷流量的弹窗则应声而至,严重的时候,我的IE一度被弹死.这样的站目标只有一个:最大限度地获取流量.至于网友的感受及网站的沾性问

领域模型的那些事儿:注意什么

前面我们讲了如何从业务领域获取知识,创建领域模型,那么建立领域模型应当注意什么呢? 建立领域模型应当注意的问题 1.领域模型不是数据模型,也不是软件对象模型 一个创建领域模型的过程中非常容易犯的错误就是,将领域模型当成了数据模型,或者软件对象模型.领域模型,又称为概念模型.领域对象模型或分析对象模型,是"专用于解释业务领域中重要的'事物'和产品"[RUP].领域模型专注于现实世界的对象(概念类)而非软件世界的对象.它不包含任何数据库元素.软件类.系统架构以及有职责的软件对象.日后的分析

领域模型的那些事儿:从领域获取知识

前言:你写过用例模型吗?也许有:你写过领域模型吗?也许还没有.在这里,我们可以尝试写写领域模型,看看它的作用.带给我们的好处. 随着RUP在中国的传播,人们开始尝试用RUP统一过程来指导软件的设计和开发,但这些尝试并不成功.比较普遍的,大家都开始使用用例模型来进行需求阶段的分析和设计了.当然,能做出第一步已经非常不错了,但这远远不够.要做好需求分析,用例模型可以帮助我们分析清楚软件需求中要求的各个流程,但我们还缺少OO分析.过去,一旦需求分析完成以后,经过简短的分析过程,马上就开始进入开发阶段.

OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型

上一篇说到我们经过初步的业务分析,得到了用户.业务用例以及业务场景模型.这三项工作成果形成了基本的需求框架,并圈定了业务范围.这时应当做一份基线. 当然,第一份基线所包括的内容是非常粗的,要达到完整的需求说明还有更多工作要做.这一篇就来说说详细的需求过程和产出物,以及这些成果对需求的贡献.在开始之前,还是提醒读者下载实例,本文下面只会从实例中挑选很少一部分来说明,对照实例读者将能更好的理解. 上一篇确定了业务用例,以及业务场景.该场景只描述了业务框架,接下来要对业务用例进行场景分析.用例场景分析

对领域模型实现的总结性观点

陶文发起的对领域模型的最新讨论:领域模型的价值与困境,在这个讨论当中,我的关注点是,在现在的技术水平下,我们如何把领域模型的理论和我们实际应用开发框架结合起来,总结出最佳实践: 第一.DAO层和TransactionScript层是邪恶的! 我们在2004年一直跨度到2007年讨论来讨论去,其实都有一个隐含的前提条件:你的领域模型终究无法脱离对DAO层的依赖,以及需要 TransactionScript层的包裹.而这样一来,领域模型的通用性.可移植性.业务逻辑的表达能力基本全部丧失,沦为框架限制

使用View Model从表现层分离领域模型

Model-View-Controller(模型-视图-控制器,MVC) 模式将你的软件组织并分解成三个截然不同的角色: Model 封装了你的应用数据.应用流程和业务逻辑. View 从 Model 获取数据并格式化数据以进行显示. Controller 控制程序流程,接收输入,并把它们传递给 Model 和 View. 与其它设计模式不同,MVC 模式并没有直接反映一个你能够编写或配置的类结构.相反,MVC 更像一个概念上的指导原则或范型.概念上的 MVC 模式被描述为三个对象 -- Mod

从领域、对象、角色、职责、对象交互、场景等方面去分析和设计领域模型(附源码)

好久没有写文章了,最近比较忙,另一方面也是感觉自己在这方面没什么实质性的突破.但是今天终于感觉自己小有所成,有些可以值得和大家分享的东西,并且完成了两个可以表达自己想法的Demo.因此,趁现在有点时间,是写文章和大家分享的时候了. 首先给出这两个Demo的源代码的压缩包的下载地址,因为之前有博友说他没有装VS2010而没办法运行Demo,所以这次我分别用VS2008和VS2010实现了两个版本. http://files.cnblogs.com/netfocus/DCIBasedDDD.rar

基于事件驱动的领域模型实现框架 - 分析框架如何解决各种典型业务逻辑场景

任何一个领域对象是"活"的,它不仅有属性(对象的状态),而且有方法(对象的行为).为什么说是"活"的呢?因为领域对象的行为都不是被另外的领域对象调用的,而是自己去响应一些"事件" ,然后执行其自身的某个行为的.在我看来,如果一个领域对象的方法是被其他的领域对象调用的,那这个对象就是"死"的,因为它没有主动地去参与到某个活动中去.这里需要强调的一点是,领域对象只会更新它自己的状态,而不会更新其他领域对象的状态. 所有的领域对象之

关于领域模型与技术架构的关系的思考

人类社会的一切事物都是来源于对造物主智慧的学习,人类本身是不会创造任何东西的. 外国新技术并不能作为软件架构的终极准则,因为老外也是人.我认为客观世界的架构应该是软件架构的唯一准则,换而言之,上帝也是一个架构师,而这个客观世界就是他的作品. 有这么完美的学习对象,为什么要舍本逐末呢? 就拿领域对象的设计来说,在客观世界中,人如果要做某件事情,比如扫地这个动作,扫地难道是人自己完成的吗?其实扫地是人借助扫帚这个工具完成的. 换而言之,领域对象的一些动作,也根本不属于他自己,如果你把这些动作硬要强加