标题 | 面向对象设计模式在数据批量处理过程中的研究与应用 |
范文 | 戎小群 摘要:在软件开发过程中,随着软件开发的进展,代码的冗余已经成为不可忽视的现象,这严重地影响软件开发的进度,同时也会造成系统维护的困难,因此代码是否精简直接影响应用系统的可维护性。该文通过具体的案例来说明,如何在恰当地应用面向对象设计模式的基础上,解决代码冗余的方法,以提高应用系统的可维护性。 关键词:面向对象设计原则;模板方法模式;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). [通联编辑:谢媛媛] |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。