1.介绍
我们在此提出一个分析模式,描述怎样预订然后使用可重复使用的实体。该模式归于我们称为语义分析模式(semantic
analysis patterns)的范畴[Fer98],因为它们强调的是应用模型的语义侧重面,而不是为了增加设计的灵活性。
我们认为这类模式对于以需求为出发点开始建模过程的设计方法是有用的。例如,识别需求中的一些模式产生一个初步的模型,这个模型可用作后续设计的指南。这些模式也能被用来开发框架和组件。
本文的分析模式强调预订的基本侧重面而不处理它的扩展、异常处理和各种变体;可以在以后添加这些内容来定义预订的模式语言。
2.问题
一个客户(个人或机构)需要预定一个可重用的实体(如旅馆房间、车辆、演出座位)供他随后使用。这些实体数目是有限的,能够按相同种类或类型进行分组。
所有这些情形隐含着这样一个请求:在某个具体日期使用某类实体。如果有一个请求的实体可用,它就被请求它的客户预订。实体在客户使用的时候被分配,同时建立一条使用记录描述该实体正在使用。
被预订的实体是可以重复使用的;那就是说,它们不会被客户永久拥有,客户只在一定的时间段对它们有使用权。这一点意味着通过让用户在使用实体后负责将它们完整归还,使用记录同时具备(明确的或隐含的)合同的功效。
图1显示一个客户预订旅馆房间的类图。在Customer类和Room类之间的关联关系描述一个客户的每个预订情况。Reservation关联类描述正常情况下一个预订中应该包含的信息。Availability类描述房间的结构和它们的占用情况。
图1.
预订一个旅馆房间
3.
约束
本模式使用以下约束:
l
正规的分析目标应用于解决方案。一个分析模型必须是对需求的真实可靠的表示,并且必须不能包含任何实现细节。
l
基本语义。模式必须描述一个基本的语义单元。这意味着模式应该是简单的,而且能够描述各种变化的情况。这种方法已在[Ngu98]使用过,在那里被称为一个“最小限度的”(“minimal”)的应用程序。
l
现实文档的模型表示。预订和使用记录通常同时使用文档和它们的软件形式进行记录。
模式语言的约束也应包括方便有效的客户服务(如排队工具)和可靠性(如异常情况的防备措施)
4.
解决方案
4.1
需求
解决方案相应于下列用例要实现的功能。
l
建立预订。主角是客户(个人或机构)。客户请求预订一个一定类型的实体,给出开始使用的日期和使用的时间。如果有适合客户要求的实体,预订成立,该实体被预订。上述相关信息记录在一个预订文档中。
l
使用预定的实体。主角是建立预订的同一客户。在实体被使用前需要建立一个使用记录。使用结束后,实体被归还又可供其它客户预订使用。
l
修改预订。对已建立的预订进行修改。这意味着确定预订的有效性和取消老的预定。
l
取消预订。取消已经建立的预订。一些机构政策可用来定义取消预订的效果。(译者注:原文为“Some
institution policies may apply to define the consequences of the
cancellation.”)
注意:要求修改预订的功能在建立和取消预订的用例中可以使用。同时,这些用例的异常处理流程未被考虑。
4.2
类模型
图2是这些用例实现的一个分析类图。该图对可被预订的实体(类Entity_type)和使用时被分配的单个实体(类Entity)进行了区分。UseRecord类描述实体的使用情况。Availability类描述检查和跟踪房间占用情况的一般知识。Reservation类包括正常情况下保存在预订中的信息。Reservation类和UseRecord类之间的关联揭示了这样一个事实:使用记录是建立在预订信息基础上的。
4.3
动态行为
图3和图4是关于一些最重要的类的状态图。例如,一个预订能够处于已建立(Created)和已确认(Confirmed)状态。图5显示一个对实体建立预订和随后使用的序列图。
5.
效果
本模式有以下效果:
l
它能被用于旅馆房间、会议室、飞机和演出的座位、书和录像带等实体的预订。这各种应用表明本模式包含预订问题的基本方面。它也是一个简单的模式,很容易理解。
l
它表示了用例的各个方面,没有包括实现方面的细节。
l
类模型明确包括了预定和使用记录类(Reservation类和UseRecord类),它们是在上述预订系统中使用的基本文档。这简化了跟踪预订历史和正在使用的相关实体的工作。使用记录(UseRecord)作为有效合同的角色也很明确。
然而,本模式对上述所有情形的描述并非完全相同。
l
客户预订飞机和演出的座位时有真实的票据,而在预订车辆或房间时却没有(尽管客户可以获得一封确认信)。票据代表一个合同。
l
当车辆被客户拿走使用时,车辆的预订明确地转变为一个合同;而旅馆房间的预订是当客户签名入住时隐含地转变为合同。
l
车辆和房间的预订在使用时对具体实体进行分配,而演出和飞机座位的预订是在预订时就对实体进行了分配。
l
有些实体,如车辆和房间,预订一段时间表示为几天,而另外一些实体,如飞机座位,表示为对一个具体的事件进行预订。
l
一个合同不需要预订也可以建立,一个预订也可以不转变成一个使用记录。
此外,还有很多方面的内容没有在本模式中表示:
l
关于实体上下文和环境的描述。例如,一张飞机票应该涉及飞机、机场和起落次数(the
number of stops)等。
l
怎样跟踪实体可用性。
l
当实体不可用时怎样对请求进行排队。
l
怎样处理优先客户
l
帐目处理
l
历史
最后,异常流程处理也已被忽略,如无演出和超额预订等情况。
可以考虑将所有这些方面定义为一个模式语言或一个模式家族,这是我们将来要进行的工作。
图2.
预订/使用模式类图
图3.
类Reservation的状态图
图4.
类UseRecord的状态图
图5.
预定和使用的序列图
6.
已知应用
根据下列文献和我们的经验,我们发现本模式已被用于以下场合:
l
客户预订演出或飞机的座位[Bak97]
l
客户预订旅馆房间[Fer98a]
l
客户预订车辆[SA98]
l
客户向图书馆预订图书[Fer98a]
l
客户向音像店预订录像带[Fer98a],[Joh96]
7.相关模式
NATURE项目[Nat98]中有一些模式,如资源分配和资源使用,从不同观点讲述了某些与本模式相通的内容。Coad[Coa97]提出过一个与本模式在某些方面相通的资源请求模式。Fowler[Fow97]讨论了计划和资源分配。制造业零部件的预订和随后分配方式也与本模式有某些方面的共同点[Fer97]。在所有这些案例中,实体没有被重复使用,因此不需要使用记录。[Bra98]中讨论了书籍和音像制品预订的某些内容,但没有考虑被预订实体的使用情况。
我们的模式作为Type
Object模式的一个组件使用[Joh96]。事实上,正如[Fer98]中描述的那样,这些复杂的模式通常包括一些本身就具有实际意义的子模式(subpattern)。
参考文献
[Bak97]
S. Baker, CORBA: Distributed objects using Orbix, Addison-Wesley
1997.
[Bra98]
R.T.V.Braga, F.S.R.Germano, and P.C.Masiero,
"A confederation of patterns for resource management",
Procs. of PLOP'98, http://jerry.cs.uiuc.edu/~plop/plop98
[Coa97]
P. Coad, “Object models: Strategies,
patterns, and applications” (2nd Edition), Yourdon Press, 1997.
[Fer97]
E. B. Fernandez and Z. W. Peng, “
An object-oriented model for manufacturing inventory control systems”,
Tech. Report TR-CSE-97-30, Dept. of Computer Science and Eng., Florida
Atlantic University, April 1997.
[Fer98]
E. B. Fernandez, “Building systems using analysis patterns”, Procs.
3rd Int. Soft. Architecture Workshop (ISAW3), Orlando, FL, November
1998. 37-40.
[Fer98a]
E. B. Fernandez, Class Notes for COP5330, Introduction to Objected-Oriented
Software Design, Dept. of Computer Science, Florida Atlantic University,
Boca Raton, Florida.
[Fow97]
M. Fowler, Analysis patterns – Reusable object models, Addison-Wesley,
1997.
[Gam95]
E. Gamma et al. Design Patterns –
Elements of reusable object-oriented software, Addison-Wesley 1995.
[Joh98]
R. Johnson and B. Woolf, "Type Object", Chapter 4 in Pattern
Languages of Program Design 3, Addison-Wesley, 1998.
[Nat98]
NATURE project, http://www.city.ac.uk/~az533/main.html
[Ngu98]
K. Nguyen and T. Dillon, "An alternative solution to the observation
pattern problem", in PLOP98. http://jerry.cs.uiuc.edu/~plop/plop98/final_submissions
[SA98]
Software Architects. Exercise in course SA4012, Testing Object-Oriented
Systems, 1998.
|