您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 业务处理与用户界面分离的设计方案
业务逻辑与用户界面分离的设计方案概述业务逻辑是指软件中与业务相关的数据的加工过程,一般可以分为以数据处理为核心的数据流,以及以控制调度为核心的控制流,在软件系统中起着核心的、支撑的作用。架构设计师在软件架构设计时,应该根据需求分析明确系统中的数据流和控制流,这不仅对相关的人员深入了解和整体把握软件系统的运行非常有益,而且能够指导接下来的模块划分、接口定义工作的开展。用户界面是软件用来接受用户操作和向用户反馈信息的接口。用户可以通过它启动、监控和终止软件中业务逻辑,可以说几乎任何软件都离不开用户界面。用户界面的重要性在国内普遍得不到重视,而它的重要性却是不可因此而被忽略的:一方面它本身就承载了一部分功能需求的实现,另一方面很大程度上决定了用户的体验感受。目前,公司几乎所有的软件中,用户界面和业务逻辑都紧紧地耦合在一起,基本上形成了一个有机的整体。主要体现者如下几个方面:1)在控件的事件处理函数中执行业务逻辑相关的操作,如在云台控制按钮的单击响应函数中发送云台控制命令;2)在执行业务逻辑的线程中向界面主线程发送消息,如解码线程中发送消息现实视频消息;分析先举个例子:某系统中云台不仅可以通过用户界面的按钮进行控制,而且可以通过红外遥控器进行遥控,还可以通过网络控制界面进行控制,那么云台控制所使用的串口就成为这三者共用的关键资源。在紧耦合系统中,这三者通常在三个线程中执行,因此串口的访问就必须进行加锁保护,以避免出现访问冲突——避免命令发送被打断而造成云台接收到错误命令。设想一种场景:用户通过用户界面云台控制按钮操作云台,但是由于红外遥控器连续发送多条云台控制命令(突发),而造成用户界面无法立即获取获取串口资源而阻塞,这会出现什么情况呢——用户界面操作暂停响应,用户以为程序死了。用户点击云台控制按钮:1.串口资源加锁;2.发送云台控制命令;3.释放串口资源;收到遥控云台控制命令:1.串口资源加锁;2.发送云台控制命令;3.释放串口资源;收到网络云台控制命令:1.串口资源加锁;2.发送云台控制命令;3.释放串口资源;界面主线程遥控响应线程网络控制线程要想解决这个问题,总归有很多种方法的。但是我们来看看下面这个思路:我们将“获取串口资源访问权限,然后通过它发送云台控制命令”从这些线程中剥离出去,将其作为系统中业务逻辑的一部分——命令处理线程看作是云台控制命令的Processer,而这些线程(界面主线程、遥控响应线程、网络控制线程)则是云台控制命令的Provider。用户点击云台控制按钮:1.发送云台控制消息;收到遥控云台控制命令:1.发送云台控制消息;收到网络云台控制命令:1.发送云台控制消息;界面主线程遥控器监控线程网络命令接收线程收到云台控制消息:1.发送云台控制命令;命令处理线程用户界面业务处理本质上来说,界面主线程实际上就是个将用户操作转换成命令处理线可识别的消息而已。这样就就把用户界面上云台控制操作分成两步:1)将用户操作转换成控制消息;2)集中执行控制消息。用户界面和业务逻辑各司其职,分别执行其中的1)和2),之间的接口也很明确——控制消息。用户界面和业务逻辑间的紧耦合,不仅会降低软件的模块化、层次化程度,同时在某种程度上会增加其复杂性,使得软件代码的维护难度加大,而且其可定制性、可扩展性等也会受到影响。用户界面和业务逻辑分离,从某种程度上可以缓解或解决上述问题:1.用户界面相关的代码和业务逻辑相关的代码可以最大限度地相互分离,由于两者之间的接口可以做到很明确,因此两者的代码在一定程度上可以独立维护,这样有利于分工协作、并行开发,软件代码可维护性以及软件模块化、层次化也会得到改进;2.在确定了用户界面和业务逻辑之间的接口后,用户界面的开发可以根据用户需求进行定制开发,而不会影响软件中的业务逻辑部分,这样可以增加代码的复用,一定程度上提高了软件的可定制性、可扩展性,直接收益就是能节省开发成本;3.用户界面和业务逻辑甚至可以完全独立,作为两个独立的进程运行,这样在一定程度上会影响程序的运行性能,但是在某些应用中是完全可以接受的。这样还有个好处,用户界面的开发可以由开发人员选择自己最熟悉的、或者最适合的开发工具进行;方案实现用户界面和业务逻辑的分离,最重要的实现是数据的同步机制。如果用户界面和业务逻辑集成在同一程序中,或者不同程序中但运行在同一台机器上,两者之间的交互采用线程间通信机制或进程间通信机制,交互的数据可分为:1.用户界面向业务逻辑发送控制消息,控制消息可分为:配置业务逻辑的消息,查询系统状态的消息,产生业务处理的消息——这个一般可以用消息队列来实现(支持跨进程提通信);2.业务逻辑向用户界面提交要在用户界面上显示的信息,可以划分为两类:普通的界面刷新消息,如告警信息、状态信息等——这个可以用消息队列来实现;需特殊的处理的信息,如视频数据等——这个一般可以用邮箱来实现(支持跨进程提通信);用户点击控制按钮产生控制消息,并将其发送给命令处理线程;界面主线程等待控制消息,收到后对其进行解析和处理;命令处理线程用户界面业务处理视频数据等待视频码流,收到后对其进行解码,并按指定格式输出图像数据;视频解码线程1刷新用户界面,显示图像数据(音视频同步,画面格映射等特殊处理);视频显示线程控制消息解析刷新消息,并根据结果刷新用户界面;界面刷新线程刷新消息刷新消息刷新消息其他线程1用户点击控制按钮产生控制消息,并将其发送给命令处理线程;界面主线程等待控制消息,收到后对其进行解析和处理;命令处理线程用户界面业务处理视频数据等待视频码流,收到后对其进行解码,并按指定格式输出图像数据;视频解码线程1刷新用户界面,显示图像数据(音视频同步,画面格映射等特殊处理);视频显示线程控制消息解析刷新消息,并根据结果刷新用户界面;界面刷新线程刷新消息刷新消息刷新消息其他线程1进程间通信如果用户界面和业务逻辑集成在不同的程序中,并且通过网络相互交互,那么两者之间的交互数据和上述情形基本类似,唯一不同的是数据要打包通过网络传输:网络命令发送线程用户界面业务处理命令包解析刷新消息,并根据结果刷新用户界面;界面刷新线程等待控制消息,收到后对其进行解析和处理,并将处理结果作为应答返回回去;命令处理线程其他线程1网络命令接收线程控制消息应答消息网络发送接收线程刷新消息用户点击控制按钮产生控制消息,并将其发送给网络命令发送线程;界面主线程应答包网络命令接收线程命令包网络应答接收线程刷新消息刷新消息控制消息网络通信CGI程序等待控制消息,收到后对其进行解析和处理,并将处理结果作为应答返回回去;命令处理线程业务处理控制消息应答消息进程用户点击页面中的控制按钮产生POST/GET请求,激活服务器上的CGI程序,并刷新页面;浏览器程序用户界面信通间HTTP网络信通解析POST/GET请求,将其转换成相应控制消息发送给命令处理线程,然后等待并解析应答消息,将其转换成HTTP应答发送回去;
本文标题:业务处理与用户界面分离的设计方案
链接地址:https://www.777doc.com/doc-4907134 .html