摘要
2021年,我公司研发了《企业资源计划管理系统》,用于企业日常活动的管理与计划,主要功能模块有,人员模块,职务模块,权限模块,任务模块,同时开放了外部接口实现与其他应用进行集成协作,在该系统中我担任系统架构师一职,负责架构设计的工作。
本文以该系统为例,论述了基于架构的软件设计方法以及应用的具体实现,主要可以分为三个阶段,架构需求,架构设计,架构实现,在架构需求阶段,通过调查问卷,用户访谈,原型构造三个方式获取了用户的真实需求,在架构设计阶段通过UML模型的4+1视图的不同视角实现了对架构的全面建模,在架构实现阶段,实现了对构件的实现,开发与组装,最后系统顺利上线并通过验收,经用户反馈使用体验良好
正文
笔者在一个私人企业任职,由于原有的企业资源计划管理系统随着企业的业务方向转变,以及资料文档丢失,已难以继续维护和运行,于是决定重新开发企业资源计划管理系统,继承部分遗留系统的功能模型和数据模型,以满足日后的使用。
该系统以企业的日常活动为核心,通过管理企业的日常资源计划,进行统筹,分析,流程化实现企业的高效运转及降本增效。该系统主要模块分为人员管理模块,身份及权限管理模块,物料管理模块,计划审批模块,任务进度管理模块,业务监控模块。同时对外提供的应用集成接口以及二次开发工具,方便与系统内的其他系统只需要实现接口即可完成应用层面的集成,最大化的实现企业的信息统筹与管理。
基于架构的软件设计方法主要分为六大阶段,架构需求阶段的功能是明确用户对系统的期望,如性能,设计约束等,主要活动是标识架构,获取需求,架构评审,架构设计的主要活动是提出架构模型,将构件映射到架构模型中,分析构件相互作用,产生系统架构,架构评审,架构文档化阶段的主要作用是产生架构设计说明书及测试架构需求的质量设计说明书,架构复审阶段将采用外部人员对架构进行评审,是否满足质量属性,层次是否清晰,架构是否合理,标识潜在的风险,发现缺陷及错误,架构实现阶段是对架构进行分析与设计,对构件进行实现,组件,最后进行系统测试,架构演化阶段是在架构开发的过程中用户的期望的功能发生改变,主要活动有架构演化计划,构件变更,变更构件之间的关系,构件的组装与测试,技术评审。
系统使用Spring Cloud微服务开发,主要分为架构需求,架构设计,架构实现三个阶段,叙述了途中遇到的问题,解决方案,具体应用。
架构需求阶段
在该过程中主要的目标是获取用户对系统的功能需求,定义开发者所必须实现的软件功能,完成用户的任务,满足系统的功能需求,在该系统中,首先我们通过对企业各部门发放调查问卷,对用户期望的功能进行统计和分析,该方法较为依赖于对方的经验与知识,具有一定的主观判断,所以通过在调查文件选择具有使用经验和设计经验的人员基于调查问卷的基础上进行详细访谈,并对质量需求和非质量需求进行记录,最后整理用户对系统的需求,开发一个具有简单功能的抛弃式原型系统模型来检验是否满足了用户的真实需求,再收集用户反馈的潜在的问题以及可能存在的缺陷与错误,进行迭代式演化,直到满足架构需求,再进入下一阶段,让用户参与到设计中,提供了设计流程,业务流程中不可或缺的经验,为日后的开发提供了强有力的帮助。
架构设计阶段
该阶段的问题是如何设计和描述架构,我们以UML模型的4+1视图从不同的视角对系统进行建模,在场景视图中使用了用例图进行建模,首先在系统中划定了不同角色身份的参与者,再根据参与者对应的需求合并得到用例。逻辑视图采用包图进行建模,经过团队的分析和调研,最终采用微服务的架构,每个团队划分为2-3人对微服务进行开发,微服务以功能进行划为成小且独立的服务,具有异构性,使用需求所适合的语言进行独立开发和部署,并可以采用中心存储结构,也可以采用独立存储结构。为了解决REST到微服务间的通信以及负载均衡问题,决定采用Spring Cloud GateWay作为后端网关,负责熔断限流,负责均衡,服务监控与降级等功能。
架构实现阶段
该结构的主要问题是构件的提取,组装以及系统测试,构件的提取采用在其他项目中提取复用组件进行适应性修改,同时从遗留系统中继承构件,以及开发构件,管理构件采用了超文本式查询方法,方便开发人员以较为直观的方式来管理构件库,同时为了复用构件,采用了参数化配置的方式实现复用,同时我们使用了多种设计方法和不同的编程语言,以根据相应模块的特征选择开发效率和开发成本较为合适的技术方案进行实现。构建的组装采用了以数据进行划分,只需要关注构件的数据流的流入流出即可完成构件到架构之间的映射关系的填充。系统测试由于涉及到企业的信息较为敏感,所以采用了检错以及双系统并行运转的策略,当模块发现错误时检错部分会自动发现错误并上报异常,同时在测试期间依然以遗留系统为企业运行的核心,但同时运转开发系统来校验是否存在疏漏等问题。
总结
该系统目前已经上线一年,并在企业的日常工作中投入使用,并广受用户好评,在使用的过程中也出现了一些问题,如数据继承的编码不一致导致无法正常显示数据,极端例子无法正常处理等,我们引入了数据的预判断,编写了数据格式的转化及维护工具,并在用户端监控机制收集和上报信息,方便后续的系统维护和演化。
实践证明,系统能够按计划上线并按照预期运行,与选择了合适的架构方法密切相关,经过基于架构的软件设计方法及应用的效果后,我也看到了本次项目过程中我个人的许多不足之错,在未来会不断学习和补充自己的知识,完善本系统的设计,使日后的架构设计过程中更加完善。