论软件设计模式及其应用


各位大佬看看我写的这个能及格吗?

摘要

2022年6月,我公司承担了集团企业的信息化建设项目中的办公自动化系统(OA)的升级工作。我在该项目中担任系统架构师,负责OA系统的架构设计。OA系统以流程管理功能为系统核心,除日常办公之外的功能,需要在OA系统中添加经营管理模块、法律案件模块等内容。同时OA系统需要对接信息化建设中的财务系统和人事系统,实现流程统一管理,整合提升集团业务流程,辅助实现企业管理规范化、科学化。本文以该系统为例,主要论述了软件设计模式在项目中的具体应用,着重介绍了工厂、代理、和观察者三种设计模式。工厂设计模式实现数据库不同类型的统一访问,提高系统的可扩展性。代理设计模式在不改变原有业务逻辑的基础上,实现业务逻辑操作日志的记录,同时配合工厂设计模式可以将日志信息记录到不同的地方。观察者设计模式实现系统消息的定向、实时的推送。最终系统顺利上线,运行平稳,满足用户办公需求。

正文

本人所在的公司是一个专门为集团企业和该集团企业下属公司提供信息化服务和支持的集团下属单位。随着集团企业的发展壮大,之前的OA系统已经无法满足集团的需求,已建设的其它业务系统比较分散,主要是“竖井式”方式建设,形成了信息孤岛。针对这些问题,经集团公司决定,启动集团OA系统升级改造,实现以下功能。第一:保持原有OA系统的各项功能,优化页面设计,增强移动端APP的功能。第二:添加经营管理、产权管理、法律案件、投资管理、风险管理、内部审计和三重一大管理共七个模块。第三:整合OA系统和其它业务系统的数据互通关系,实现单点登录、统一消息代办和流程管理等功能。第四:实现集团财务数据按照国资委要求定时上传。在此项目中,我担任架构师,负责项目总体架构设计。项目基于集团信息应用平台建设,总体架构分为基础设施层、信息资源层、应用支撑层、业务应用程和业务展示层。在此项目中,通过将已有系统功能封装为服务实现重用,编写简单、定义准确的接口实现数据的同步功能。实现了新开发服务的快速开发。
一般来说,设计模式主要分为三类,分别为:创建型模式、结构型模式和行为型模式。创建型设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建那些对象时更加灵活。这类设计模式包括:工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式等。结构型设计模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构。这类设计模式包括:适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式亨元模式和代理模式等。行为型设计模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。这类设计模式包括:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、策略模式、模板模式和访问者者模式等。
在本次OA系统的升级开发中,我们综合使用了多种设计模式。本文着重对工厂模式、代理模式和观察者模式在系统开发的具体应用进行介绍。
一、工厂模式。因本次OA升级改造需要整合集团公司中已存在的“孤岛型”信息系统,对已存在的系统根据系统的复杂程度采用不同的集成方式,对于简单的系统采用数据集成,相对复杂的系统采用表示集成。采用数据集成时需要连接到不同的数据库进行数据集成,包括MySQL和SQL server和SQLite。在程序设计过程中如果直接使用每种数据库的原生访问方法,将会使业务逻辑复杂化,并且面对将来可能发生的数据库更改将会难以实现。为了解决这一问题,我是采用工厂方法模式。我们定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。这里可能会处理对多种数据库的操作,因此,需要首先定义一个操作数据库的抽象基类(DataAccess),类中包括一些共同的方法(如:获取数据库类型、获取数据库连接、开启事务和执行sql语句等)。具体数据库连接继承基类,然后分别为MySQL、SQL server和SQLite数据库编写三个数据访问的集体实现类。然后创建一个工厂类,其功能为根据数据库类型,返回适当的数据库操作类,以此来实现自动数据库切换的管理。需要什么类型的数据库连接工具通过工厂方法即可获取对应数据库访问对象,实现了良好的封装性,当需要添加或更换数据库时,也不需要修改具体的业务逻辑,具有良好的扩展性。当然,前提是在编写程序时不要用特定的数据库特征。
二、代理模式。本次OA系统升级改造需要对原有的业务逻辑添加统一的日志记录功能。考虑到如果对原有系统代码的每个业务类进行修改添加日志的操作的代码,这个工作量是无法估计的。而且这种方法将会对日志记录的方式限制死,若需要调整日志记录格式将会难以实现。为了实现对日志消息的统一管理,我们团队采用了代理模式中的动态代理,使用spring aop技术对业务类统一代理,在代理类中写入添加日志记录的代码。这种设计模式没有入侵原有的业务逻辑代码,并且添加日志的操纵和业务逻辑代码之间的耦合度很小。使用这种设计模式大大简化了原有的入侵式日志记录的方式,并且加快了设计和开发。
三、观察者模式。本次OA系统升级改造中添加的一个重要功能就是需要向国资委的数据监管平台推送集团企业的财务数据。因为需要推送的财务数据存储在使用在不同的模块所有当接收到国资委的请求后需要通知各个模块进行数据的上报。我们考虑到需要监听国资委的请求,在接收到请后需要通知各个模块按照国资委下方的数据要求上报数据这个需求,决定采用观察者设计模式。我们创建主题类监听国资委的请求什么时候到,同时维护需要上传数据模块的对象列表。当接收到国资委的数据上传要求时,将数据上传要求通知到每一个需要上传数据的模块,对应模块进行相应的数据上传操作。通过观察者模式实现了当接收到数据要求时,所有依赖于它的观察者都会收到通知并进行数据上传操作。即使之后需要有新的数据需要上传也能很好的实现,具有良好的扩展性。
通过采用以上软件设计模式,基本达到了预期的效果。项目经过一年的调研、开发和测试,于2023年6月正式上线,和旧OA系统并行一周后完成系统完全切换。系统运行平稳,较好的解决了集团公司中各业务部门的业务系统信息孤岛的问题,较好的完成了系统所预期的目标。在开发过程中,通过设计模式大大降低了与开发人员的沟通成本,而且所使用的设计模式经过众多软件开发人员长时间的实验和错误总结出来的,实现也非常稳定可靠。而对于业务本门所提出的新的需求,由于充分采用了设计模式,使得系统有了极强的可扩展性,在系统的升级改造中也能应付的游刃有余,展示了系统的可扩展性。另外设计模式所带来的清晰的代码结构,也使得后期的维护也非常方便。因此,在项目总结会上,领导和同事对这种充分利用设计模式的体系结构标识了高度赞同。

更多推荐