软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

领域模型﹐打开OO的另一扇窗
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2011-10-12 点击:280
园子里这么多讨论OO的﹐我也来凑一下热闹吧。

 

面向对象开发一个最重要的思想就是对真实世界进行模拟。

 

然而﹐在大量的使用面向对象语言开发的系统中﹐您却很难看到这种模拟﹐而依然是些以数据库为中心的增删改查动作﹐很少能看到”真实的世界”的身影。

 

出现这种情况﹐很大程度上都是受数据库为中心的影响。

 

以数据库为中心开发系统﹐有一套成熟的理论﹐也经历住了多年的考验﹐是到今天为止﹐大部分信息系统开发时的不二选择。

 

以一个图书管理系统为例﹐有这样的一些功能﹕新书上架﹐借阅﹐归还。

 

按照数据库方法﹐我们会设计出这样的三个关系﹕

书籍(BookID,ISBN﹐书名﹐作者﹐出版社﹐内容简介)

借书证(CardID﹐姓名﹐电话﹐身份证号﹐地址)

借阅(BookID,CardID,借阅时间,归还时间,)

 

然后在数据库中建表

 

接下来提供书籍新增﹐删除﹐修改﹐查询﹐借书证增删改查﹐图书借阅﹐归还的人机界面

 

再围绕数据库编写增删改查对象和方法。大家争论的Book.Save和BookManager.Save方法也是在此吧。其实只要不重复代码﹐使用起来方便﹐高效﹐统一﹐无论将Save方法放在哪﹐都是有其道理的。

 

对于大部分信息系统﹐以数据库为中心是十分合适的﹐这种方法也是非常高效且成熟。

 

然而﹐您还是可以尝试另外一种方法

 

我们想象这样的场景﹕

 

有一个[图书馆]

[图书馆]里有很多[书架](可以理解为﹕书籍分类目录)

[书架]上有很多[书籍]

一个读者进入系统﹐系统帮助他浏览[图书馆]的[书架],然后在其中一个[书架]中找到了他想借阅的[书籍]﹐接下来﹐它将[借书证]交给管理员﹐要求借阅该[书籍]﹐管理员办理借阅手续﹐产生一笔[借阅记录]﹐完成借書過程

 

这个场景可以由下面这个对象完成

 

Class图书馆帮助者

{

       

       PublicList<书架>所有书架

{

               Return图书馆.Instance.所有书架  

       }

 

       Publicvoid选择书架(书架)

       {

               记录当前书架

}

 

Publicvoid选择图书(图书)

{

记录所选图书}

 

       Publicvoid借阅(借书证)

       {

               If(借书证.借出记录!=null)

                       ThrowException“该书已借出”;

               New借阅记录();

               借阅记录.Book=当前图书

               借阅记录.Card=借书证

               借阅记录.时间=Now

               当前图书.借出记录=借阅记录

对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈