《软件架构中剧场模式初探.pdf》由会员分享,可在线阅读,更多相关《软件架构中剧场模式初探.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、http:/-1-软件架构中剧场模式初探软件架构中剧场模式初探 王伟 同济大学软件学院,上海(200092)E-mail: 摘摘 要:要:本文通过对现实世界中剧场组成要素及运行模式的研究,提出一种新的软件架构模式。通过综合运用剧本、舞台、演员等抽象软件组件,我们尝试构建一种软件架构,这种架构能够适应各种平台,能够快速实现系统协作生产,并能在应用实践中灵活配置,真正实现按用户不同功能需求来组合。关键词:关键词:软件架构,剧场模式,剧本,舞台,演员 中图分类号:中图分类号:TP311.5 1.引言引言 软件工程实践使得软件的规模和复杂度越来越高,而软件开发及软件应用却对灵活性和可配置性提出更高的要
2、求。现代的软件工程基于大量的构件和平台进行集成,同时软件开发也是软件产业链各层次的开发者在一起的协作活动。如何构建一种适应各种平台,能够快速实现系统协作生产,在应用实践中灵活配置,以实现用户不同功能需求和组合的架构成为众多软件行业专家和科研人员的努力方向。本文尝试根据现代剧场的要素和运行模式提出一种软件架构以满足上述软件开发的需要。2.剧场架构模式剧场架构模式 剧场架构模式(以下简称为剧场模式)是一种基于剧本管理角色和场景的定义,数据模型与视图分离、框架控制与交互控制分离,并在运行时动态创建和调度交互组件形成运行时层次结构的一种软件架构模式(architectural pattern)。交互组
3、件是一种基于特定平台的视图与交互控制集成并实现同一公共接口的构件。2.1 剧场模式的应用语境剧场模式的应用语境 具有灵活配置管理的交互式应用程序。2.2 需要引入剧场模式的问题需要引入剧场模式的问题 软件开发实践中交互式用户接口非常容易改变需求。用户面对的界面可能是基于各种不同的平台,用户对界面风格喜好和交互方式的变化往往是开发人员无法把握的,甚至对于同一数据模型需要大量不同的数据视图来表现,而对于各种视图的运行序列也常常需要经过不断的调整。这一切的不确定性都让软件开发人员在应用系统实现时无所适从。同时我们也应当注意到在这些用户需求改变过程中数据模型往往并不发生变化,因此也需要将数据模型和视图
4、控制进行分离,使其分别各自独立变化。2.3 基于剧场模式的解决方案基于剧场模式的解决方案 在思考如何解决软件开发实践中所遇到的上述问题时,我们观察了现实世界中的剧场及其要素。剧场中最突出的特点是提供了一个舞台,演员们在其上按照剧本设定的剧情进行表达一定主题的表演。演员是一个独立、交互、受控、并依赖于环境的多表演能力的个体,演员具有一定共性,同时还具有鲜明的个性。演员由剧本产生,并将剧本定义的表演内容通过自身的动作、表情和语言来演绎,并与观众产生互动。相同的表演内容也可以通过不同的演http:/-2-员产生不同的剧情效果,同一个演员通过自身的技能能够完成多种表演内容。而通过剧本的组织和剧场的调度
5、,演员的表演形成分幕场景,在同一场景中演员之间产生协作和互动。演员的个性可以看作平台相关,具有依赖性,而演员的共性可以看作是平台无关的抽象。演员的表演内容可以看作是一种数据模型,演员的表演是这个数据模型的视图。演员的自我控制和个体交互控制是对视图控制的封装。剧场中的调度和演员之间的交互是框架控制和过程控制。由此,我们可以创建一种剧场体系结构,这种体系结构由演员、舞台、剧本三要素组成:(1)演员:)演员:是一种执行组件,这种执行组件封装了平台特性,封装了数据模型抽象,也封装了交互式控制。演员可以采用流行的模型-视图-控制器(Model-View-Controller,MVC)模式或表示-抽象-控
6、制(Presentation-Abstraction-Controller,PAC)模式构建独立的 agent 进行实现。(2)舞台:)舞台:是一种容器,管理执行组件集合,并提供框架控制和过程控制组织各执行组件。舞台可以是应用程序窗体,也可以是浏览器页面,甚至可以是无界面的线程池。(3)剧本:)剧本:是一种规则,定义执行组件的来源,并组织执行组件形成分幕场景。舞台容器根据剧本的定义动态创建执行组件,并按场景进行布置。2.4 剧场模式的结构剧场模式的结构 剧场模式的结构我们采用 OMT 图的形式进行描述,见图 1。http:/-3-Script+property ScriptContext:Sc
7、riptEntry+FindScene()+FindActor()+FindBackUpScene()Scene+property ScriptEntries:ScriptEntryCollection+Add()+GetScriptEntry()+Remove()+GetActor()+GetSubScene()+GetBackUpScene()Actor+property IsMainActor:bool+property Data:IActorDataScriptEntry+property PerformerClassName:stringISerializeScriptControl
8、ler+Write()+Read()-ScriptController()+GetUniqueInstance()ScriptEntryFactory+CreatePerformer()-ScriptEntryFactory()+GetUniqueInstance()*Performer+property FriendPerformer:Performer+property HostDispatcher:Dispatcher+property BuddyPerformer:Performer+property Data:IActorData+DoSomething()+SendMesssage
9、()+LoadData()+ReceiveMessage()Dispatcher+property Performers:PerformerCollection+DoSomething()+SendMessage()+ReceiveMessage()IActorData*Stage+property Performers:PerformerCollection+SceneLoad()*图 1 剧场模式 OMT 图 剧场模式中核心的类是剧本(Script)、舞台(Stage)、执行者(Performer),其它的各个类是这三个基本类在功能实现时的细化和辅助。2.4.1 剧本体系剧本体系 剧本体系
10、采用 Composite 模式,系统定义了一个与外界相互做用的实体类(Script),这个类由 Singleton 模式实现的 ScriptController 控制。在 ScriptController 中实现 ISerialize 接口的 Read 和 Write 操作。从而完成 Script 对象与外部配置文件之间的相互数据交换,例如可以使用序列化方式读写 XML 文档。(1)剧本类(Script)以一种层次化的结构管理剧本的组成要素(例如角色、场景)等,使用基于 XML 设计的剧本描述语言,描述各组成元素之间的作用关系,及每一个组成要素的详细定义。剧本类在采用 Composite 设计
11、时首先设计一个称为 ScriptEntry 的抽象类,并由此抽象类派生 Actor 类和 Scene 类。其中 Scene 类又以属性 ScriptEntries 的方式管理 ScriptEntry 的派生对象集合,从而实现一种无限嵌套的场景管理机制。这种模式对于结构清晰、组织明确的表现内容是良好的解决方案。(2)角色(Actor)http:/-4-剧本中主要的行为描述对象,在剧本定义中采用反射机制来完成剧本安排的灵活性,对于不同的角色类,将在实现时生成与剧本描述相一致的实体类。这些类都由同一个基类派生而来,这样剧本只需要对基类进行控制。角色中对角色相关的主要内容分为角色行为(Action)和
12、角色数据(ActorData)来分别描述。角色行为定义了角色所能完成的所有行为,我们设计时对行为进行拆分,把所有的行为都分解为基本动作(Method),其对应的就是每一个实体角色类所具有的方法。通过这种方法的组合来实现角色的行为,而角色的具体产生和角色行为的实现都是基于反射机制来实现的。角色数据(ActorData):采用桥接(Bridge)模式来分离抽象数据模型与视图控制,每个角色所表现的数据是不同的,而且每个派生类型的角色也是不同的,这决定了角色关联的数据有着千差万别。对于不同的角色,所有的角色数据都由 IActorData 接口实现并逐级派生,数据与角色通过 IActorData 接口进
13、行绑定。每个角色在进行绑定时,将负责对数据类型的检验功能,只允许自己能够识别的类型通过。(3)场景(Scene)是所有执行者的作用环境,场景控制多个执行者(在剧本描述中为角色),以执行者本身展现的内容和自身行为,以及执行者之间的相互关系、互动来表现单一主题。场景的最重要功能就是来管理执行者集合和引导下一级场景。2.4.2 执行者(执行者(Performer)执行者(Performer):剧本的应用离不开角色的具体承担者,我们把其定义为执行者(Performer)。剧本中所定义的所有角色的执行者都由 Performer 抽象类派生而来。设计采用了构件分离的机制,对于接口和基类的设计我们放在核心构
14、件中实现,但应用系统所派生的实体类则可以在引用了核心构件的用户自定义构件中实现。这样基于剧场模式的系统就可以更好的支持用户的二次开发,系统通过反射可以使核心构件得到类的具体描述。将执行者所利用的底层平台组件与执行者的附属组件进行封装,将所有与派生的执行者相关的一切信息包装在一个构件中,这样剧场模式本身的设计就做到了平台无关性和扩展灵活性。这将对用户丰富的应用平台的使用和前期投入提供了强有力的保护。执行者实体内部的控制机制与其视图和抽象数据模型一起被封装。每一个执行者都有BuddyPerformer 属性、FriendPerformer 属性、HostDispatcher 属性。BuddyPer
15、former 属性:描述当前 Scene 中主要执行者和辅助执行者之间的关系,同时提供主辅执行者之间的转化能力。在一个 Scene 中主执行者只可能是一个,其他所有执行者这时都成为其附属辅助对象。FriendPerformer 属性:描述当前主执行者所发生的功能在 Scene 中所有执行者对象中的传递,这种传递机制由 Dispatcher 以消息分发的方式来产生激活事件。从而实现主执行者与友元执行者之间的联动,而 FriendPerformer 没有定义的对象则对此消息忽略。这样就实现了只有相关的系统对象才会接收响应的能力。HostDispatcher 属性:这是执行者的重要属性,其指示了当前
16、执行者的宿主。原则上在一个 Scene 中只会有一个 Dispatcher 类的实例,这个对象管理场景中所有执行者。2.4.3 剧本项工厂(剧本项工厂(ScriptEntryFactory)剧本项工厂(ScriptEntryFactory)实现的是一种动态联编能力。模式在设计时不可能完全考虑到最终实际系统中所用到的所有执行者组件,而且,现在大多数应用系统中更多的强http:/-5-调一种跨业务平台的能力。正因为这种思想,在提出剧场模式时就将执行者的实际实现能力与执行者基类的定义进行分离。模式定义基类的行为、数据、通用接口,并且模式控制基类的行为和基类与相关类的关系。在外部构件中泛化的执行者派生
17、类,在特定的平台上具体实现这些行为、数据和接口,并将对其平台的引用进行封装形成特定的独立构件。模式通过在剧本类中对执行者实体的构件名和类名定义,告诉剧本项工厂特定加载的外部构件和需要反射出的类,从而将模型与实现、表现与数据完全分离。2.4.4 舞台组件(舞台组件(Stage)舞台类是剧场模式的表现核心,其实例可以是一个可视化的 Control 容器,例如一个窗体或 Web 页等。舞台类有下列三个功能:?容器:集中管理了所有执行者,并将其组织成场景;?视图前台:与调度组件及相关管理类紧密绑定;?框架:布置执行者的空间及其交互控制,布置其他舞台组件的位置。剧本中的场景的作用只是对角色也就是实现时的
18、执行者的组织,在实际应用中场景是由剧本中的定义还原而来的。执行者的组织、主执行者的定位、辅执行者与主执行者的关系、各执行者的交互,都将由剧场的 SceneLoad()方法还原而来。2.4.5 调度组件调度组件(Dispatcher)执行者的调度,剧场模式在设计时考虑到一种后台机制,引入操作系统对任务管理的设计思想,对执行者进行组织和管理。系统设计了调度组件与舞台组件绑定,在系统场景加载时获取所有执行者,并将其按照 Script 中已经定义好的组织体系和相互关系进行组织。执行者通过自身定义的消息和动作接口以及调度组件的功能来共同维护变更-传播机制,通过交换数据、传递消息和响应事件更新,实现框架控
19、制和过程控制。2.5 剧场模式的动态特性剧场模式的动态特性 我们将以两个重要过程来说明剧场模式的动态行为。(1)根据剧本定义创建一个 Scene,为了简单起见,在图 2 中只给出两个 Performer 的创建。?Stage 组件开始一个场景加载过程,并向 Script 对象发出获取特定场景的请求。?Script 通过递归方法查找指定的 Scene,并返回 Scene 对象。?Stage 组件遍历当前 Scene 的 ShowEntries 集合,将每一个 ShowEntry 通过CreatePerformer()方法调用发送至 ShowEntryFactory 对象。?ShowEntryFa
20、ctory 对象通过 ShowEntry 的内容反射出 Performer 及下层 Scene 的代理(是一种特殊的 Performer),并将其初始化。?舞台组件将 Performer 的引用送入 Dispatcher 的控制集合,并完成运行时绑定。?舞台组件将 Performer 送入自身的集合容器中,并开始每个 Performer 数据加载,完成场景创建。http:/-6-Performer2:PerformerScriptEntryFactory1:ScriptEntryFactoryScene1:SceneStage1:StagePerformer1:PerformerScript1
21、:Script1:Stage()2:FindScene(sceneName)3:GetSubScene(sceneName)4:GetScriptEntry(EntryIndex)5:CreatePerformer(showEntry)6:Performer()7:LoadData()8:GetScriptEntry(EntryIndex)9:CreatePerformer(showEntry)10:Performer()11:LoadData()图 2 根据剧本定义创建一个 Scene (2)场景中变更-传播机制,为了简单起见,在图 3 中只给出一个响应执行者。?Performer 的交互控
22、制产生变更请求,Performer 将变更请求以消息的方式通过Dispatcher 广播。?Dispatcher 接收到 Performer 发来的消息,分析消息类型,识别消息请求的对象。?当 Dispatcher 是请求对象时,自身完成的消息请求,根据需要发送反馈消息。?当 Dispatcher 不是请求对象时,根据其控制下的 Performers 的不同类型进行有选择的分发。?被唤起的 Performer 对象接收 Dispatcher 发送来的消息,执行对应的请求,也根据需要向 Dispatcher 发送反馈消息。?Dispatcher 处理所有反馈消息,并将结果转发给最初请求 Perf
23、ormer,完成一次变更-传播过程。http:/-7-Performer2:PerformerDispatcher1:DispatcherPerformer1:Performer1:Dispatcher()2:Performer()3:Performer()4:SendMesssage()5:ReceiveMessage()6:DoSomething(SomethingKey)7:SendMessage()8:ReceiveMessage()9:DoSomething(SomethingKey)图 3 场景中变更-传播机制 3.剧场模式的优缺点分析剧场模式的优缺点分析 3.1 剧场模式有以下优
24、点:剧场模式有以下优点:(1)数据与表现分离)数据与表现分离。剧场模式中的数据和执行者使用 Bridge 模式来实现,模式本身只控制数据抽象接口。(2)“插件插件”式扩展式扩展。一个执行者的变化不影响系统内的其他执行者,这将允许独立的修改一个执行者所基于的数据模型或控制界面。执行者采用反射的方式动态加载,实现应用程序运行时热插拔能力。(3)应用平台无关)应用平台无关。与应用平台相关的因素都被封装于派生的执行者中,模式本身通过抽象基类控制具体的执行者。(4)任意的运行时过程结构)任意的运行时过程结构。过程由剧本定义,剧本内容的改变,会改变场景的顺序和场景的内容。从而实现灵活的运行时过程结构,重构
25、应用程序。3.2 剧场模式的不足:剧场模式的不足:(1)增加了系统复杂性)增加了系统复杂性。由于引入了基于剧本的过程控制,完全采用剧场模式设计的系统比传统的 MVC 模式设计的系统要更加复杂。(2)复杂的控制组件)复杂的控制组件。由于剧场模式将框架控制和过程控制与执行者的交互控制进行了分离,从而在控制机制上比传统的 MVC 模式更要复杂。从一定意义上来说,执行者本身就是一种 MVC 模式的变体文档-视图体系结构。http:/-8-(3)效率)效率。执行者与执行者、执行者与控制器之间的变更-传播机制所增加的通信开销和无用的消息分发可能会影响系统效率。需要实现一种在消息分发时避免唤起不必要的执行者
26、的机制。4.结论和展望结论和展望 剧场模式思想来源于软件工程的实践,在上海市房地局房地产市场分析模型提供的监测和预测指标体系数据基础上,成功构建上海房地产(新建住宅)市场管理辅助决策系统。事实证明剧场模式是一个能够提供快速、灵活、可配置等特性的软件架构模式。未来的进一步研究方向是:解决效率上的不足,实现智能分发机制;深入分析剧本结构,构建可以支持网络化业务集成的剧本体系;研究完善剧场模式。参考文献参考文献 1Buschmann,F.等著.贲可荣等译.面向模式的软件体系结构 卷 1:模式系统M.北京:机械工业出版社.2003.2Larman,C.著.方梁等译.UML 和模式应用M.北京:机械工业
27、出版社.2004.3 Alan Shalloway&James R.Trott 著.熊节译.设计模式精解M.北京:清华大学出版社.2004.4Robert C.Martin 著.敏捷软件开发原则、模式与实践M.北京:清华大学出版社.2003.5冯冲 江贺 冯静芳编著.软件体系结构理论与实践M.北京:人民邮电出版社.2004.6David M.Dikel 等著.软件架构M.北京:机械工业出版社.2003.7蔡敏 徐慧慧 黄炳强编著.UML 基础与 Rose 建模教程M.北京:人民邮电出版社.2006.8余雪丽主编.软件体系结构及实例分析M.北京:科学出版社.2004.Initial Study
28、of Theatre Pattern in Software Architecture Wang Wei School of Software Engineering,Tongji University,Shanghai(200092)Abstract The paper brings forward a creative pattern for software architecture based on observation and study of basic elements and operation pattern of the theater.By integrated app
29、lication of abstracted software components such as script,stage,actor etc.,we tried to establish a software architecture which can adapt to different platforms and provide quick approaching for software development by configuration maintenance,realizing the different combinations of functions to reach users requirement.Keywords:Software Architecture,Theatre Pattern,Script,Stage,Actor 作者简介:作者简介:王伟,男,1976 年生,安徽怀远,硕士研究生,主要研究方向是软件工程、企业计算、设计模式。
限制150内