【IT168 技术文章】
在定义了架构愿景之后,团队中的所有人员应该对待开发的软件有一定的了解了。但是,面对一个庞大的软件系统,接下来要做些什么呢?分而治之的思想是计算机领域非常重要的思想,因此我们也从这里开始入手。
要进行应用软件的设计,分层是非常重要的思想,掌握好分层的思想,设计出的软件是可以令人赏心悦目的。由于这一章的重要性和特殊性,本章的内容分为上下两节,并不采取模式描述语言的方式。
分层只是将系统进行有效组织的方式。 本章特别针对于企业应用进行讨论,但其中大部分的内容都可以应用在其它的系统中,或为其它的系统所参考。
在企业应用中,有两个非常重要的概念:业务逻辑和持久性。可以说,企业应用是围绕着业务逻辑进行开展的。例如报销、下订单、货品入库等都是业务逻辑。从业务逻辑的底层实现来看,业务逻辑其实是对业务实体进行组织的过程。这一点对于面向对象的系统才成立,因为在面向对象的系统中,识别业务实体,并制定业务实体的行为是非常基础的工作,而不同的业务实体的组合就形成了业务逻辑。
还有另一个重要的概念是持久性。企业应用中大部分的数据都是需要可持久化的。因此,基础组织支持持久性就显得非常的重要。目前最为通行的支持持久性的机制是数据库,尤其是关系性数据库-RDBMS。
除此之外,在企业应用中还有其它的重要概念,例如人机交互。
为了能够更有效的对企业中的各种逻辑进行组织,我们使用层技术来实现企业应用。层技术在计算机领域中有着悠久的历史,计算机的实现中就引用了分层的概念。TCP/IP的七层协议栈也是典型的分层的概念。分层的优势在于:
上层的逻辑不需要了解所有的底层逻辑,它只需要了解和它邻接的那一层的细节。我们知道TCP/IP协议栈就是通过不同的层对数据进行层层封包的,不同层间的耦合度明显降低。通过严格的区分层次,大大降低了层间的耦合度。
某一层次的下级层可以有不同的实现。例如同样的编程语言可以在不同的操作系统和不同的机器中运行。
和第三条类似的,同一个层次可以支持不同的上级层。TCP协议可以支持FTP、HTTP等应用层协议。
综合上面的考虑,我们把企业应用分为多个层次。企业应用到底应该分为几种层次,目前还没有统一的意见。
在前些年的软件开发中,两层结构占有很重要的位置。例如在银行中应用很广的大型主机/终端方式,以及Client/Server方式。两层的体系结构一直到现在还广泛存在,但是两层结构却有着很多的缺点,例如客户端的维护成本高、难以实现分布式处理。随着在两层结构的终端用户和后端服务间加入更多的层次,多层的结构出现了。
经典的三层理论将应用划分为三个层次:
表示层(Presentation Layer),用于处理人机交互。目前最主流的两种表示层是Windows格式和WebBrowser格式。它主要的责任是处理用户请求,例如鼠标点击、输入、HTTP请求等。
领域逻辑层(Domain Logic Layer),模拟了企业中的实际活动,也可以认为是企业活动的模型。
数据层(Data source Layer),处理数据库、消息系统、事务系统。
在实际的应用中,三层结构有一些变化。例如,在Windows的.NET系统中,把应用分为三个层次:表示层(Presentation Layer)、业务层(Business Layer)、数据访问层(Data Access Layer),分别对应于经典的三层理论中的三个层次。值得一提的是,.NET系统中表示层可以直接访问数据访问层,即记录集技术。在ADO.NET中,这项技术已经非常成熟,并通过表示层中的某些数据感知组件,实现非常友好的功能。这种越层访问的技术通常被认为是不被允许的,因为它可能会破坏层之间的依赖关系。而在Windows平台中,严格遵守准则就意味着需要大量额外的工作量。因此,我们看到准则也不是一成不变的。
在J2EE的环境中,三层结构演变为五层的结构。在表示层这里,J2EE将其分为运行在客户机上的用户层(Client Layer),以及运行在服务端上的Web层(Presentation Layer)。这样做的主要理由是Web Server已经成为J2EE中非常核心的技术,例如JSP和Java Servlet都和它有关系。Web层为用户层提供表示逻辑,并对用户的请求产生回应。
业务层(Business Layer)并没有发生变化,仍然是处理应用核心逻辑之处。而数据层则被划分为两个层次:集成层(Integration Layer)和资源层(Resource Layer)。其中,资源层并非J2EE所关心的内容,它可能是数据库或是其它的老系统,集成层是重要的层次,包括事务处理,数据库映射系统。