系统架构设计师-论文模拟-模拟3-软件设计模式

摘要:

  2019年3月,我作为系统架构设计师,在国内某电子公司针对某市政府集中印务项目中担任重要角色。该项目为期1年半,总投资约1200万人民币,通过该项目,完成了公司对政府业务中国产化过度中最重要的一步,为后续全国政府文印项目国产化提供了样板作用。研发过程中,完成了对印务系统中主要模块整体迁移、分布式部署、历史数据整合、集群性能调优等。该项目时间紧任务重,涉及组织人员众多,涉及内核组、中台组、web组等公司各个部门大大小小研发团队提供各自业务、技术模块的工作成果。期间与客户进行频繁的业务沟通,整体规划重构3次,不断优化各层级的设计。该项目最终于2020年12月成功验收,得到用户的一致肯定,顺利达成了项目既定目标。笔者结合实际经验,以该项目为例,讨论一下项目建设的【系统架构设计/软件设计模式/软件质量属性】中的【可靠性、安全性、性能】这几个方面来进行论述。

正文:

  2019年3月,我作为项目负责人、系统架构设计师,在国内某电子公司针对某市政府集中印务项目中担任重要角色。该项目为期1年半,总投资约1200万人民币,通过该项目,完成了公司对政府业务中国产化过度中最重要的一步,为后续全国政府文印项目国产化提供了样板作用。该项目时间紧任务重,具有较强的挑战性。一是业务模式升级,按照最新的排版科与印制科需求,实现更高级别的安全权限控制,以及对印务流程进行工作流的改造。二是技术要求高,要实现集中印务系统的集群化处理、分布式部署,一旦服务失效需要在半小时内做到整体可用,同时满足性能需求。三是数据整合难,需要将上一代系统中历时数十年的数据,按其有效性进行分类、整合、转化,实现历史存续业务数据在新系统环境下,按照新模式正常运行。四是设计组织人员多,直接研发团队成员27人,内核组、中台组、web组、QA组、需求组、产品组及其他支持部门总计近70人。同时上游承接ERP入口系统,下游承接印刷流程系统,涉及外部配合协作公文排版、设备厂商等多组织外协人员50余人。我作为主要技术负责人,负责项目整体技术方法评估、立项论证以及项目管理工作。在项目启动前,负责分析项目的预期经济效益、可选技术方案,分析关联项目影响,向公司提交立项报告。项目启动后,作为主要项目负责人,牵头与公司内部技术专家、外部架构师一同建立技术架构组,设计项目整体技术架构,同时挑选项目内部成员,建立需求分析组、系统开发组、系统测试组、运维支持组,开展业务需求分析、系统设计、数据迁移方案、上线切换方案工作。一方面,我个人接受各组工作汇报,指导团队研发工作,监控整体工作进度。同时,我及时向公司领导、项目客户方、相关项目团队汇报沟通工作进展、阐明关键技术点。

  该项目于2020年10月完成系统上线,2020年12月通过最终验收,得到用户一致肯定,顺利达成了既定目标。尤其在系统整体技术架构方面,效果尤为突出,一是保证了较好的灵活性,提供了较多的基础组件,使得应用功能便于横向扩充,满足了项目业务灵活性;二是系统性能达到了各个层次的整合设计,数据库层(分片、读写分离)、应用开发层(缓存技术、查询条件的严格限制)、服务部署层(采用集群部署、微服务、nginx负载均衡),使得系统整体可用性处于高水平,进行正常印刷业务的同时,预留了60%性能空间,满足客户未来2-3年业务增量的需求。

  一般而言,一个设计模式具有模式名称、适用场景、解决方案和效果四个方面的基本要素。设计模式根据其目的可以分为创建型、结构性和行为型三种类型,创建型模式,主要负责对象的创建工作,程序在明确需要创建对象时,可以获得更大的灵活性。常用的创建型设计模式有单例模式、工厂方法、原型、构造器、抽象工厂5种。结构型模式,负责处理类或对象之间的关系,用于构件结构更加复杂庞大的系统,常用的结构型设计模式有适配器、桥接模式、享元模式、组合模式、外观模式、代理模式等七种模式。行为模式,主要任务是对类或对象如何交互以及为类和对象分配具体职责进行描述。常用的行为设计模式有观察者、状态、策略、备忘录、责任链、命令、中介者等11种模式。这些设计模式都是经过反复使用的成熟方法,对优化软件结构,提供软件质量具有指导意义。

  在政府集中文印平台的开发过程中,我们综合使用了多种设计模式,本文着重对责任链模式、工厂方法、策略模式等三种设计模式在项目中的具体应用进行介绍。

  一、责任链模式

  我们在信息平台的开发过程中,需要对公文处理的各个环节进行组织,从前往后排版、规范化、预飞、拼版、印制等政府文印工作依次开展,其中,排版任务最重,最重印制耗费的人力最少,在各个部门之间任务流转我们采用责任链模式,首先定义了印刷任务单,对其公章、红头、版式、可变数据做出属性的设置,得到一个具体的系统任务,然后,我们根据这个系统级任务划分出四个原子级状态,不同部门根据不同的状态可以进行不同的处理,如果某一环境处理中,部门发现自己处理结束,则提交下一级部门处理,以此,最终处理一个印制任务完成。完成任务过程中,将任务状态信息记录到数据库中,通过这个方法,有序的完成任务重各个工序的流转排产。

  二、抽象工厂模式

  在政府集中文印数字化平台管理过程中,需要对各种文件导入的数据进行编排,由于不同类型的数据导入算法不同,在程序设计过程中,设计者需要定义若干类分别实现导入excel、xml、sqldata等类型数据的算法,而且用户导入的数据类型存在不确定性,设计者无法确定应该实例化哪个类,为了解决这个问题,我们决定使用工厂方法模式。首先定义一个数据访问接口import,同时,针对不同的数据类型,还定义了ImpostExcel、ImportXML、ImportSQLData具体产品类,实现了import生命的公共接口,其主要功能是封装了不同类型的数据导入到数据库的具体算法,ImportCreater是抽象工厂类,持有一个接口产品类import对象,ImportExcelCreater、importXMLCreator、importSQLDataCreator是具体工程类,主要功能是生产具体产品实体,直接在客户端的调用下创建产品实例,通过工厂方法模式的引入,可以有效解决客户需要变化的设计影响,而且创建产品的细节也有很好的封装,符合高内聚、低耦合的设计原则,当需要在系统中添加新产品时,也不需要修改抽象工厂和抽象产品的接口以及其他具体工厂和具体产品,具有很好的可扩展性。

  三、策略模式

  在系统安全性方面,我们采用了用户名、密码、自动校验相结合的办法,以保证系统安全性、根据验证码的使用环境,一般分为数字验证码、汉字验证码、英文验证码3种类型。而生成不同类型的验证码的算法存在巨大差异,为此需要定义不同的验证码生成算法,为解决此问题,可以利用策略模式将不同算法封装起来,并使他们可以相互替换,使得算法独立于使用它的客户端而变化。在设计策略模式中,我们定义了3个角色。环境角色:持有一个抽象策略角色StrategyVerifyCode接口的引用,并通过StrategyVerfifyCode接口,来实现一个具体的算法策略。抽象策略角色:定义所有具体策略类所需要的统一访问接口;具体策略角色:包装了相关的算法或行为,在该项目中,我们按照数字、文字、字符三种类型,分别定义了number_verify,char_verify,word_verify三个具体的策略类,通过使用策略算法,将生成验证码的算法封装成一个个独立的策略类中,用户可以根据自己的需求从不同策略中进行选择,有效的避免了使用条件转移语句不易维护的特点,而且策略模式,利用组合代替继承,将算法的实现与算法的选择分离开来,增强了代码的可维护性和可扩展性。

  以上设计模式的选择基本达到了预期的效果,首先是,这些设计模式都是一些常用的设计方法,在系统分析师、系统架构设计师、开发人员之间,形成了良好的沟通桥梁,大家很容易进行交流和沟通。其次,在使用设计模式过程中,软件的开发效率较高,能够节省开发成本。最重要的是,这些模式都是一些反复使用的成熟设计方案,符合面向对象中的设计规范,比如,面向接口编程,里氏替换原则、单一责任原则、迪米特法则等,最大限度的提高软件的标准化,为日后的系统维护打下了很好的基础。

  经过我和团队的不懈努力,历史一年,项目终于于2020年12月顺利通过了验收,并得到了一致好评,运行至今,用户反馈良好。客户单位的集中印务业务水平大大提升。当然,我们在设计过程中,也存在一些问题和不足,不少开发人员在设计过程中。有时还是习惯于原有的设计方法,对模式的使用有些抵触,而且,有些设计模式在应用过程中,往往不是单独使用,需要对多个模式进行综合应用,这方面,我们还缺少相关经验,所以在以后的项目中,我们将继续应用各种设计模式,做到融汇贯通,不拘一格的目标,争取能设计出更多的高质量软件项目。

posted @ 2021-10-25 17:16  光何  阅读(328)  评论(0编辑  收藏  举报