软考架构师论文-论软件设计模式及其应用
- 格式:docx
- 大小:24.58 KB
- 文档页数:3
摘要:
2018年下半年,本人有幸参加了某汽车玻璃生产厂商的“产品质量追溯与条码管理系统”的开发建设工作。该系统基于三层B/S架构,是以条码管理为基础、涵盖原材料采购、生产物料准备、生产制造执行、仓储管理、成品调拨销售为一体的综合性管理系统。在该系统的建设中,本人作为系统架构负责人,主要负责需求分析与架构主体设计等工作。
本文以该系统的构建开发过程为例,首先探讨常用的软件设计模式的种类,每种设计模式的特点及所包含的具体设计模式,然后着重探讨在该项目的建设过程中,我们是怎样结合需求和以往的设计经验,在项目中使用“单例模式”、“模板方法模式”和“策略模式”最终成功地在客户要求的时间内,以较高的质量完成建设任务的。
正文:
在汽车工业快速发展的今天,越来越多的汽车零部件生产企业意识到,实现产品可追溯是提高自身产品质量的有效保证。随着汽车召回制度的颁布,快速召回有缺陷的产品并根据缺陷产品的条码标识追溯到产品的型号、批次、原材料信息甚至生产工序、生产人员、生产时间、生产设备等信息,可以为查找问题根源,快速解决产品缺陷带来极大便利。
2018年下半年,我公司受当地某汽车玻璃生产厂商的委托,开发“产品质量追溯与条码管理系统”。该系统采用三层B/S架构,是基于条码管理的,涵盖该厂商整个生产过程的综合性管理系统。该系统需要覆盖该厂商分布在全国各地的三家生产基地和十多家供货仓库。客户希望通过该系统的建设达到如下几个目标:一是根据条码技术和生产数据的实时采集与记录,实现产品的可追溯属性;二是通过在生产过程中对条码的扫描核对,实现对生产过程的规范化控制,如批次控制、先进先出控制等;三是基于条码技术,实现物料防混,避免生产、发货过程中出现物料不一致的情况;四是通过对系统中累积数据的分析,制定更有效的经营决策。
作为该系统的架构负责人,本人主要负责需求分析与架构主体设计等工作。在客户主体需求敲定,形成需求基线以后,我们开始着手结合需求和以往的设计
经验,考虑框架的主体结构以及各部件应采用什么样的设计模式。
软件设计模式是一套经过反复论证的,可以有效提高编码复用性和编码效率,降低各组件耦合度的最佳实践之一。常用的软件设计模式可以分为三大类,分别是“创建型模式”、“结构型模式”以及“行为型模式”。其中“创建型模式”主要用于创建对象,为设计类实例化新的对象提供指南。“创建型模式”主要包括“工厂方法模式”、“抽象工厂模式”、“单例模式”、“原型模式”以及“构造器模式”等;“结构型模式”主要用来处理类或对象之间的组织关系,以便形成更大的结构。“结构型模式”主要包括“适配器模式”、“代理模式”、“桥接模式”、“装饰模式”、“享元模式”、“外观模式”、“组合模式”等;“行为型模式”的主要特点是描述类或对象之间交互时的职责。“行为型模式”主要包括“命令模式”、“解释器模式”、“职责链模式”、“迭代器模式”、“中介者模式”、“备忘录模式”、“观察者模式”、“状态模式”、“策略模式”、“模板方法模式”、“访问者模式”等。
在该系统的开发过程中,我们面对不同的需求场景综合使用了多种设计模式,下面我们将着重探讨“单例模式”、“模板方法模式”和“策略模式”这三种设计模式在该系统中的应用场景和应用方式。
一、“单例模式”
我们通过分析该系统的需求了解到,生产基地与供货仓库分散在全国多个城市,且每个生产基地都涵盖钢化与夹层两大车间,两大车间内又分别包含十余道工序,如果这些工序都要通过扫描条码在系统中记录数据,数据库与应用系统的交互数量级将达到每秒数百次,如果使用传统的数据库直连中间件,就会频繁的创建和销毁数据库连接管理对象,造成系统资源的极大耗费,这显然是不可能被接受的,为了解决这一问题,我们使用了数据库连接池加“单例模式”的应对策略。首先设计一个数据库连接池,而后设计一个链接池管理器ConnectionPoolManager,该类构造函数声明为private防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,初始化的动作有一个public的类方法实现,在程序启动时调用该方法形成系统唯一实例。当任何模块需要访问数据库时,均需要访问该类的静态方法从连接池中获取数据库链接,通过这样的设计,链接池管理器在系统中保留唯一对象,可以极大减少系统资源开销,同时也能够满足数据库与应用系统每秒数百次的交互。
二、“模板方法模式”
我们通过需求了解到,该厂商针对不同车型的不同部位需要生产多种汽车玻璃,为了便于生产线上的操作工人快速准确的识别出每片玻璃的种类及参数信息,需要在玻璃上粘贴不同样式的条码。我们通过对需求进一步的分析,最后与客户敲定将条码打印模板设计成七个大类。因为打印模板上主体信息一致,只是不同客户要求的个性化信息会存在差异,所以我们使用了“模板方法模式”来构建打印模板。我们为打印模板设计了一个父类作为算法骨架,将模板上通用的算法定义在该父类中,其他特性化的方法延迟到子类实现。通过这样的设计,首先满足生产现场多种打印模板样式的需求,其次提高代码的复用率,减少编码工作量。另外更换或增加新的子类很方便,符合单一职责原则和开闭原则。
三、策略模式”
通过对需求的分析我们了解到,该厂商需要针对不同的客户制定不同的价格方案,且价格方案也要根据产品下线情况进行灵活的调整,且每一种价格方案的算法差别也很大,为了解决此问题,首先进行了更深入的需求调研,收集该厂全部的价格方案并进行分类汇总,最终与客户确定将价格方案在系统中定义为8种。我们使用“策略模式”将8种不同的价格方案进行封装,另外定义了一个策略接口角色类,用来约束7个具体的价格方案实现类,当成品销售模块需要调用具体的价格方案时,可以通过声明策略接口角色类实现具体的价格方案。通过这样的结构,首先做到了通过声明同样的策略接口角色灵活的实现不同的价格方案,另外也可以方便的添加新的价格方案。
我们在该项目中使用了多种设计模式,不仅满足了客户的需求,也对提高开发效率,降低系统耦合度起到了积极的作用。设计模式作为一些经过反复探讨实践过的成熟方案,在需求人员、架构人员、开发人员之间的沟通上,也可以起到很好的作用,大家都能轻松的了解对方的意图。最终我们通过规范化的开发流程以及多种设计模式的应用,圆满地完成了该系统的开发,获得了客户的认可,也在相关行业内也赢得了良好的口碑。当然我们在设计模式的使用上也存在一些不足,如在多种设计模式综合应用上我们的经验还略显不足,我们将在后续的工作与实践中继续磨练与提升。