层面式
层面式是一种通用的体系模式,它有助于把一个复杂的程序分成几个独立的部分。层面是基于它们的功能模块划分,每一个层面负责一个主要的功能,Packages代表的是逻辑层。级别高的层能使用级别低的层的函数,相反则不然,级别低的层不能使用级别高的层的函数。表A显示了一个通用的层面模式。
表A
表达
显示程序用户界面成分和处理用户请求
范围
负责程序特定的逻辑通讯
数据源
有助于一些后台服务的通讯,如数据库连接,消息处理管理等。
定义合理的层面对整个程序非常的重要,因为定义良好的层将提高维护性和使用性,这正是我们早先讨论到的启发式知识的核心。
当分层一个程序时,最重要的是定义层与层之间的关联。随后,设计packages之间的关联也很重要。除此之外,packags关联最好的是单向的,因为级别高的层能调用级别低的层的函数,反之不行。
程序的分层的目是提高功能的多次调用。一般来说,级别低的层要比级别高的层容易调用。当频繁使用一个层时,你可以参考一下《Java的封装功能》这篇文章。定义良好的层面能让其他开发人员更容易地理解和使用程序中的函数。
然而,分层也要格外注意。定义过多的层面会导致程序的复杂。所以设计分层时,你必须认真考虑。
分割方式
分割方式是把程序中的非中心逻辑部分从中心逻辑部分中脱离开来。与层面方式一样,分割方式使用packages来代表逻辑关联。表B显示了两个主要的分割。
表 B
垂直
程序中数据交换的主要功能,包括交换过程,交换逻辑,交换规则。
水平
程序中数据交换的非主要功能,包括错误处理,邮件服务,数据库访问。
当识别一个分割层时,你必须注意每一个独立的package的主要目的。每一个分割层面都能产生有意义的package。在设计packages关联时一定要确保它们能够提供合理的功能函数。
除此之外,垂直分割层的功能函数一般都调用水平分割层的功能函数,水平分割层的功能函数可以在程序里面或程序之间调用,关键之处是你如何集中使用和改变这其中的类。如果水平功能函数被多个程序调用,此时最重要的是考虑如何独立地调用这些独立的功能函数。
联合模式
在面向对象程序设计中,这两种体系模式都起着关键的作用。除了独立地使用层面方法和分割方式,在实际设计过程中也常常把二者混合起来,这样就可以达到在分割中分层和分层中分割的目的。图A演示了把两个层面分成两个分割的抽象关联模型,箭头的方向指明了可允许的关联。
Figure A
总结
每一种模式都代表着一种改进的体系设计方法。这些模式强调的是程序中的packages之间的关系,这就构成了packages的启发式知识,在体系设计中有着重要的参考意义。