面向对象中分层模块化设计的运用

时间:2022-08-29 11:01:25

面向对象中分层模块化设计的运用

摘要:为了能对科研活动过程进行统一管理,提高科研资料的利用率,极大地方便科研工作者,从而开发文档管理系统。在面向对象思想的指导下,采用分层模块化设计,阐述模块独立性即耦合与内聚,以及模块间数据交换过程,最终将模块归集成文档管理系统。在分层模块化设计的过程中,同时采用MVC设计模式,引入实体类,数据库访问类,业务类,使得整个文档管理系统在.NET环境下具有扩展性突出、结构良好、易于维护的优点。

关键词:分层模块化设计;文档管理系统;MVC;面向对象;模块独立性

中图分类号:TP3文献标识码:Adoi: 10.3969/j.issn.1003-6970.2011.03.010

Object-oriented Programming Method of the Use of Layered Modular

WANGHui-e1, WANG Xin-ping2, XUE Ting-ting3, WANG Chao4

(Department of Information Engineering , Taishan Medical University, Taian Shandong271016, China)

【Abstract】 In order to research activity process of unified management, improve the utilization rate of scientific data, greatly convenient researchers, the document management system is developed. Under the guidance of an object-oriented ideas,taking the stratified modular design, this paper expounds the module independence namely coupling and cohesion between modules, and data exchange process, then get the document management system. In the process of layered modular design, while the MVC design patterns, introducing entity class, database access class, business class, make the whole document management system in environment with good structure, prominent scalability,and easy to maintenance

【Key words】Layered modular; Document-management system(DMS); Model-view-controller (MVC); Object-orient; Module independence

0引言

随着计算机科学技术的发展,软件开发方法不断涌现,但是模块化的设计思想并没有被遗弃,以其独特的编程方法得到了广泛的应用与发展。分层模块化设计是传统软件工程中提出的软件设计方法,目的是运用“分而治之”,“逐步求精”的思想,把一个庞大的系统分成若干各模块,然后根据系统的层次关系组合成一个完整的系统。以文档管理系统为例,来阐述分层模块化设计的原理与过程。

1需求分析

面向对象的系统分析就是把系统的设计过程看成是把系统所要求的问题分解为一些对象,以及对象间传送消息(message)的过程。面对初始无头绪、没重点的分析过程,可以将模块化与面向对象分析结合在一起,以功能模块划分用例,不仅实现了面向对象方法所提出的将数据和处理数据的过程结合为一个整体,增加面向对象分析的可操作性,又体现了模块化中使得每个模块完成一个相对独立的特定子功能的思想,最终建立起简洁、准确、可理解的正确模型。

图1DMS功能模块图

2模块化设计

采用分层的模块化方法,首先将系统划分成几个大模块,然后再对大模块进行划分,如此下去,直至分解到功能明确、易于实现的原子模块为止,这样就能形成结构层次清晰的模块化结构树,实现了对系统的分层的模块化设计[1]。每个模块就是相对独立,达到高内聚低耦合,模块的增、删不会影响整个系统的运行。各模块之间的数据调用都是通过对应的接口来实现[3]。这种结构的设计思想完全遵循面向对象的设计方法,将各个类内部的属性和方法进行封装起来,内部接口都采用类方法来实现。

下面以文档管理系统为例具体阐述面向对象软件开发过程中分层的模块化的运用。(采用Visual Studio 开发,单机版)

2.1

在指导老师的指导下采用MVC模式,将整个系统划分为视图层、模型层、控制器层三大模块[2]。该三大模块相互独立,其中视图层为单机版窗体,模型层代码只与数据库相关,控制器层包含事件中的具体操作方法,而并不依赖于从数据库中检索数据的方式。

2.2

进一步将MVC中的模型层划分为实体层、业务层和数据访问层[4],然后给出各模块的具体设计。

2.2.1实体类

在该文档管理模块中,将实体对象的属性单独拿出组成程序的“实体类”放进命名空间为EL的实体层中。例如文档对象(Doc)对应的数据库中表是Files(Fno,Title,Author,Parentno,Pno,Path, IsDir,Createtime)那么对应的实体类做如下定义:

class Doc

{ private intfno;

public int Fno

{

get { return fno; }

set { fno = value; }

}・・・・・・ }

图2项目的实体-对象模型

各个实体对象将自己的属性封装在不同名的类里面放在实体层中,这就是对实体的模块化处理。

2.2.2业务类

把对象与主界面或控件之间的调用关系使用的方法归到“业务类”放进命名空间为BLL的业务层中。该层中的方法通过调用数据访问层获取需要处理的数据, 进行处理后将结果封装成实体层中的对象, 如果是多个对象则将这些对象存进一个动态数组集合中,然会返回[1],如上述“文档实体”(Doc)的业务类 BizDoc。

class BizDoc

{

//取出所有信息

public static List GotDocInfo()

//以文件名、作者、刊物号、日期为查询标准(省略)

//添加、删除、修改一条记录(省略)

}

2.2.3数据库访问类

把不同对象调用数据库访问的方法封装形成“数据库访问类”放进命名空间为DAL的数据访问层中,该类用以封装对数据库的连接和访问, 可以直接对数据库进行增、删、改和查询操作,在查询时返回的数据集为Sql-DataReader 或DataSet 类型[1]。例如上述“文档实体”(Doc)的数据访问类:

class DalDoc

{

//从数据库中查出所有的信息

public static SqlDataReader GetDoc()

//以文件名、作者、刊物号、日期为查询标准(省略)

//添加、删除、修改一条记录(省略)

}

简单介绍程序运行的原理:

图3各类之间关系

业务类通过调用数据库访问类获取需要处理的数据, 进行处理后将结果封装成实体类中的对象, 如果是多个对象则将这些对象存进一个动态数组集合中,然会返回[1]。

通过MVC模式的模块化设计,使得实体对象、数据库访问功能、业务执行模块在MVC各层中实现了良好的封装,提高了可读性、重用性,更有益于后期的测试与维护。

2.2.4以业务类为例阐述模块化设计

在该文档管理系统中有三个业务类:BizDoc、BizDu、BizPub,以BizDoc为例介绍将该模块进一步划分为各功能明确、易于实现的原子模块:查询所有信息,以文件名Title、作者Author等为查询条件查询,增加、删减、修改。部分代码如下:

using DalD;//导入实体层的命名空间

using DOC;//导入数据访问层的命名空间

class BizDoc

{ public static List GetDInfo_sele_title(Doc d)//[1]

{List list = new List();

SqlDataReader dr = DalD.DalDoc.GetD_sele_title (d.Title);//[3]

while (dr.Read())

{ Doc doc = new Doc();

//此处省略

li.Add(doc);}

return list;

}

public static List GetDInfo_sele_author(Doc d) // [2]

{ List list = new List();

SqlDataReader dr = DalD.DalDoc.GetD_sele_author(d.Author);//[4]

//此处省略}

}

(1)模块独立性模块对数据的存取只限于该模块内部涉及的数据,其它模块不能直接存取该数据。借用面象对象编程即所谓封装。在该业务类方法中BizDoc.GetDInfo_sele_title(Doc d)[1]与GetDInfo_sele_author(Doc d)[2]是完成不同的任务的,前者实现以Title为查询标准的功能,后者以Author为查询标准,两个模块之间并没有实质的联系,可以独立的存在并运行,即使以Title为查询标准的子模块被删除或修改后也不影响以Author为查询标准的子模块,符合低耦合的要求;在[1]内部只做了一件事情,该模块内的处理元素属于一个整体,完成单一的功能,就是高内聚。

(2)模块间数据传递 如果涉及的数据属其它模块,则必须通过接口实现数据的存取。BizDoc.GetDInfo_sele_title(Doc d)[1]通过接收从界面传过来的参数保存到对象Doc d,BizDoc.GetDInfo_sele_title(Docd)[1]调用DalD.DalDoc.GetD_sele_title (d.Title)[3]方法实现到数据库中的查询,获取符合条件的信息,然后原路返回,最终在窗体中显示出来。

3总结

面向对象中引入模块化设计思想具有以下优点:提高了需求分析的可操作性和正确性;提高了代码重用性[3];利于后期的测试与维护;有利于实现项目组的分工合作。这种模块化设计思想不光可以用该文档管理系统的开发中,在其它管理系统的开发过程中都可以采用这种设计模式。因此在开发的过程中调整开发思路,采用正确的开发方法,才能使开发的软件更科学、更规范、更有效。

致谢

在写作的过程中得到了泰山医学院信息工程学院的马华(教授)的 指导,我们表示衷心的感谢!

参考文献

[1] 李光明,蔡福俊,李红强.分层的模块化设计在HIS 中的应用[J].计算机工程与设计,2008,29 (22 );5901-5902

[2] 马华,韩忠东,孙静,张西学. .NET 中基于代码隐藏的扩展MVC设计模式研究[J]. 微计算机信息(管控一体化),2010,26(9-3);226-227,217

[3] 张志杰. 基于分层结构的管理信息系统架构设计[J]. 计算机技术与发展,2010,20(10):147-149、153

[4] 李光明,蔡福俊,李红强.基于Caché 的系统分层模块化设计研究与实现[J].微型电脑应用,2010 ,26 (3 );27-28

[5] 任喜伟,黎明和,陈长明.采用Caché的三层结构HIS的研究[J].现代制造工程,2010,1;23-26

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:基于多项Logit模型网上订单的最佳配送时间实证... 下一篇:运行时间自适应的事务调度算法