面向对象设计模式在数据批量处理过程中的研究与应用

2018-03-04 07:03戎小群
电脑知识与技术 2018年36期

戎小群

摘要:在软件开发过程中,随着软件开发的进展,代码的冗余已经成为不可忽视的现象,这严重地影响软件开发的进度,同时也会造成系统维护的困难,因此代码是否精简直接影响应用系统的可维护性。该文通过具体的案例来说明,如何在恰当地应用面向对象设计模式的基础上,解决代码冗余的方法,以提高应用系统的可维护性。

关键词:面向对象设计原则;模板方法模式;DAO模式;代码冗余

中图分类号:TP311       文献标识码:A      文章编号:1009-3044(2018)36-0227-03

1 背景

软件开发过程中,常常会伴随着代码冗余,它降低了软件应用系统的可维护性,从而影响软件应用系统开发效率。按照目前软件迭代开发的理论,软件开发需要首先完成初始可运行的版本,然后逐渐迭代,最终达到面向对象的设计目标,其中也包含了减少代码冗余。因此,在迭代过程中,需要仔细分析可能出现代码冗余的模块,通过设计技术手段,消除代码冗余,最终提高软件开发效率,确保软件系统的可维护性。

该文就是讨论如何应用合适的面向对象设计模式,在实现数据批量处理过程中,消除代码冗余的方法。

2 面向对象的设计

2.1 面向对象设计目标

可扩展性(Extensibility):可以将新功能添加到系统中。

灵活性(Flexibility):在添加新功能代码的过程中,尽可能地减少修改量。

可插入性(Pluggability):能将一个组件替换具有同样接口的另一个组件。

2.2 面向对象的设计原则

在常用的面向对象设计原则中,开-闭原则(The Open-Close Principle,OCP)是面向对象的可复用设计的基石,此外还有单一职责原则(The Single Responsiblity Principle,SRP)、Liskov替换原则(The Liskov Substitution Principle,LSP)、依赖倒置原则(The Dependency Inversion Pricinple,DIP)和接口隔离原则等。这些设计原则是实现“开-闭原则”的手段和工具。

2.3 面向对象设计的具体思路

1) 在客户端尽量采用面向抽象或接口编程;

2) 高内聚,低耦合;

3) 采用恰当的面向对象设计模式,以提高软件开发的效率,达到减少代码冗余的目的。

2.4 面向对象的设计模式

设计模式(Design pattern)是一套能被反复使用的代码设计经验的总结。它使代码编写真正实现了工程化,是软件工程的基石脉络。

1) 数据访问对象(DAO)模式:主要用于软件架构的数据层,其主要功能为完成数据的编辑(添加、删除和修改)与查询。

DAO模式通常需要VO(值对象),通常一个DAO对应一个VO对象。

2) 模板方法模式:在父类中定义一个通用的操作,将其中一些具体功能延迟到子类中,从而在不改变原操作定义的条件下实现功能的扩展。

模版方法模式通常由一个抽象类和若干个具体子类组成,抽象类中的方法分为三种:

2.5 数据批量处理时的代码冗余现象

信息管理应用系统在信息处理时,均会频繁地访问数据库,访问数据库的目的主要由如下几种形式:

1) 往数据库添加数据;

2) 修改数据库中的数据;

3) 删除数据库中的数据;

4) 查询数据库中的数据。

在应用软件系统中,常用数据层来完成与数据库的交互,常常采用DAO(数据访问)模式。由于数据库的连接是一个“贵重”资源,因此,为了提高效率,常常要求一次连接能够完成批量数据的处理。那么如何才能高效地完成数据批量的处理(即,增删改查)?

2.6 模板方法模式在批量数据处理中的应用

2.6.1 案例

假设数据库testdb中包含两个roles和users两个表对象。这两个表对象的结构如下:

在对数据库中的表进行访问时,通常建立表与VO(值对象)类一一对应关系,如,以上两表各自建立一个JaveBean(Role和User)类,类中的属性分别对应表中的字段。同时分别创建两个访问两个表数据的DAO(RoleDAO和UserDAO)类。一旦数据库表的数量增加,相应的DAO也需要增加,代码的冗余将会产生;另外,即使对数据库中的一个表进行批量数据处理时(增删改查),也会出现代码的冗余。

2.6.2 设计思路

首先,解决批量数据处理时的编辑(即,增删改)操作所引起的代码冗余。

在对数据库表进行编辑(增删改)操作时,所有与表对应的VO(值对象)类都附加一个操作码,以代表是何种编辑(增加、删除、修改)。由此,从VO类中抽象出一个所有VO类的共同父类AbstractData,此类为抽象类。如图2所示。

<E:\电脑第36期\电脑第36期打包文件\8.7xs201836\Image\image55.png>

圖2    VO类图

通过应用模板方法模式,创建DAO类的父类AbstractDAO,该类为抽象类。如图3所示。

AbstractDAO中的方法说明:

1) 模板方法:

protected final int addRecords(Connection conn, ArrayList<AbstractData>datas)

protected final int deleteRecords(Connection conn, ArrayListdatas)

protected final int updateRecords(Connection conn, ArrayList<AbstractData>datas)

2) 抽象方法:

如下的三个方法分别完成返回添加、删除和修改的SQL语句的功能。

protected abstract String getAddSQL()

protected abstract String getDeleteSQL()

protected abstract String getUpdateSQL()

如下的三个方法分别完成对象转化为记录的功能。

protected abstract void handleAdd(PreparedStatementpstm, ArrayList<AbstractData>)

protected abstract void handleDelete(PreparedStatementpstm, ArrayList<AbstractData>)

protected abstract void handleUpdate(PreparedStatementpstm, ArrayList<AbstractData>)

以上六个抽象方法,均由DAO子类实现。

模板方法的代码示例如下:

protected final int addRecords(Connection conn, ArrayList<AbstractData>datas){

int count = 0;

String sql = getAddSQL();

try{

PreparedStatementpstm = conn.prepareStatement(sql);

handleAdd(pstm, datas);

int[] amt = pstm.executeBatch();

for(int i = 0; i < amt.length; i++){

count += amt[i];

}}catch(SQLException e){

}finally{

if(pstm != null){

pstm.close();

}}return count;

}public String editRecords(ArrayList<AbstractData>datas){

ArrayList<AbstractData>addList = new ArrayList<AbstractData>();

Connection conn = ConnectionFactroy.getConnection();

int add = addRecords(conn, addList);

…}

DAO類的继承关系如图4所示。

DAO类与VO类之间的关系如图5所示。

3 结束语

在进行软件开发的过程中,需要灵活恰当地应用设计模式,并将几种设计模式进行组合,在应用设计模式时,需要掌握设计模式的应用场合以及能解决什么开发问题。在应用设计模式时,要注意以下几个方面的问题:

1) 不能在需求不明确时,确定设计模式;

2) 不能为了设计模式而使用设计模式;

3) 不能“生搬硬套”设计模式;

4) 在迭代开发的过程中,完善与明确设计模式。

参考文献:

[1] 23种设计模式(6):模版方法模式[EB/OL].http://www.importnew.com/15546.html.

[2] Alan Shalloway, James R Trott.设计模式解析[M]. 徐言声, 译.2版. 北京:人民邮电出版社, 2007(10).

[3] 巴拉赫,兰宝. UML面向对象建模与设计[M].车皓阳,杨眉, 译. 2版.北京:人民邮电出版社, 2006(1).

[通联编辑:谢媛媛]