摘要:2020年,我参加某LED制造公司LED设计软件项目的研发工作,在这个项目中,我担任系统设计和开发的工作。这个软件主要针对LED制造行业开发LED设计软件和附加服务,主要包括用户管理、数据导入导出、自定义界面、LED模组管理、LED电源管理、LED格式管理、霓虹管管理、LED模板资源管理、后台管理、即时通信模块、加密模块、支付模块、软件更新模块和广告模块。本文结合作者实践,以LED设计软件架构设计为例,论述“4+1”视图模型在工作中的运用。先介绍“4+1”视图模型的相关理论,然后详细分析在设计此软件过程中采用的软件架构,最后总结软件架构存在优点和不足。
正文: 软件架构设计通常建立一种内聚的、良好设计的表示模式,其目标是提供一种导出体系结构设计的系统化方法。项目的开始先是需求的明确,然后软件设计人员按照此需求开发相应的软件系统,使得用户能够完成它们的LED设计任务,从而达到商业目标。“4+1”视图模型分为:逻辑视图、开发视图、进程视图、物理视图和场景。逻辑视图是将系统分解成一系列的子功能,这些功能来至问题领域。在面向对象的设计方法中,指类图;开发视图,主要指软件模块的组织和管理,内容目标是考虑如何更好的组织和完成软件编码工作;进程视图,主要指软件运行过程中,并发性、分布性、系统集成性和容错能力,采用哪种并行处理方式,如类和数据结构,需要在那个进程或者线程进行处理;物理视图,在UML中又称为部署视图,如何将软件部署到硬件上运行,即系统拓扑结构;场景,指用户使用软件某些关键的活动清晰表达,即需求明确。 本项目是一个根据客户提供的有关广告、显示屏、交通信号灯和温室补光等有关LED应用场景的资料,而设计一款LED产品为主的,综合样例展示、客户管理、即时通信和支付的软件系统。通过前期调查市场上同类的几款LED图形设计软件,然后与公司设计人员进行开会访谈,按照访谈记录和设计人员提供的设计文档,列出初步的功能需求列表和核心功能列表。对照设计人员的需求与现有LED设计软件存在的差异,然后进一步与设计人员沟通确认需要补充的设计功能,以及确认现有需求中可否采用更好的解决方案。最后架构小组开发决定,采用B/S和C/S的混合架构。主要考虑图形类设计软件属于计算密集型软件,现有的前端JS编码还不足以从性能上满足用户体验的要求,故采用C/S架构。而与LED相关的用户信息、支付信息、产品类型信息、即使通信信息以及将来考虑的多人协作信息,都是普通数据管理,这类结构采用B/S结构,能够更好的对软件的数据进行维护和升级。 在此次系统架构建模工作中,项目用到的建模工具是Microsoft Visio,采用的架构描述语言是UML,结合项目开发过程,用“4+1”视图模型进行建模:
1.场景建模 经过项目小组的讨论分析,结合客户的需求,参与该软件的角色分为:LED设计人员、销售人员、LED产品购买方、后台系统管理员。LED设计人员根据LED布线的专业知识和客户的需求,利用软件系统提供工具,按照LED产品购买方的需求设计相应的LED灯型布局设计文件,经甲方确认后,交给工厂进行生产。LED产品购买方即LED实物购买方,浏览公司互联网站提供现有LED设计样式,联系公司销售人员进行商务谈判报价,确认合作,然后将设计样式转交公司LED设计人员按照用户需求进行修改,经用户确认,再转交工厂按照设计样稿生产LED产品。后台管理员,主要是收集现有LED经典案例、LED局部子模块、收集现有型号的LED种类、电源种类、焊接方式和胶结类型,为LED设计师使用时和购买方浏览产品时提供对应的选项。综上分析得出以下基本的用例图:
采用UML包图来描述逻辑视图。经过项目小组的讨论决定,采用C/S和B/S的混合架构风格开发,将LED设计软件分为LED设计软件客户端、表示层、web应用层、业务逻辑层和企业信息层。在前期的需求调查中,大部分设计师使用的系统为windows,由于图形设计需要较高的计算性能,一般采用C++进行设计,而常用的框架有Qt和MFC,如果采用Qt体系,如果进行商业活动需要授权,增加额外的费用,本系统非完全企业内部使用,客户可以自己设计,所以采用MFC体系。为了减少系统的复杂性,前端分为浏览器和客户端软件,统一通过http与后端应用程序进行通信,经过小组讨论,采用J2EE基础平台,通过Struts 2框架将前端的视图业务请求,按照控制器的路径,转到业务层指定的业务逻辑进行处理反馈。LED产品顾客通过浏览前端的LED模型数据,联系公司在线销售人员,谈好合同,将相关需求转给LED设计人员,LED设计人员根据客户定制的具体需求,设计好LED产品,客户确认,然后交给工厂按照客户的需求量进行生产。
采用类图和组件图来描述开发视图。软件开发中比较复杂的部分有LED设计软件的开发和后端高并发访问的架构。为了较好完成LED图形设计,需要支持图形的撤销和重做,可采用设计模式中行为型模式中的命令模式,将每一个绘图方法抽象为绘图命令;为了减少工具类,需要将工具箱中的工具类抽象为创建模式中的享元模式。为了将来能够扩展LED设计软件的功能,需要引入插件系统和脚本系统。插件系统,需要引入消息驱动结构,当绘图触及某一个状态的改变时,发送事件到注册的插件中进行处理。而脚本系统,一般采用解释器模式,当前比较成熟的嵌入式脚本语言是Python语言。通过Python脚本解析执行自动化的绘图过程。后端采用J2EE架构,通过应用服务器与现有企业ERP系统连接。
4.物理视图 采用UML的部署图来描述物理视图,对系统的拓扑结构和通信交互进行描述。整个系统分为前端和后端两部分。前端分为web浏览器和专用的LED设计软件客户端。后端分为web服务器,应用服务器和企业信息管理层。前端和后端通过http协议进行交互。部署图如下所示:
在LED设计软件中,这个设计软件通过http协议将前端数据信息,发送到Servlet构件,如果是购买方浏览,则将请求转发至业务层,再通过企业信息管理层获取对应LED产品信息,在LED设计软件中,内嵌了标准浏览器,客户的登录信息,需要跨越浏览器和应用软件,这时最好将登录信息包含在网址链接中。有利于信息的传递。 通过“4+1”软件架构建模方法,通过场景视图,将需求转为用例模型,通过逻辑视图,明确软件的内部结构,通过开发视图,分析构件技术,通过物理视图,明确如果部署,通过进程视图,明确系统面临的并发特性,为LED软件项目的完成提供指导。