从分层思想到SSH架构的使用

分层的原因:
说到分层,大多数人首先会提出一个问题:为什么要分层?

分层是为了隔离各个模块,使其完成各自的功能,达到松耦合的目的。


分层的好处与坏处:
由分层的原因不难看出分层的思想能为我们带来了不少的好处,其中,较突出的好处有:
1.隐藏下层的实现。下层为上层提供其所需的服务,但实现的过程,上层是无法知晓的。
2.层与层之间的依赖性降低。每个模块完成各自的功能,不涉及其他的业务逻辑,从而使得各模块之间得以解耦,依赖性降低。
3.能轻松替换每个模块。正因为各层之间的依赖性降低,各模块就可以很容易的被替换。如果替换为的下层模块提供了上层所需的方法,上层模块将不做任何改动。
4.每层均能单独映射。既然层与层之间以来关系低,各层就可以进行各自的映射。
5.下层为上层提供服务。下层不依赖上层而存在,上层使用下层提供的服务。
一件事物都有其两面性,分层为我们带来好处的同时,也有其不足的地方,比如:
如果层次分的过多,将影响系统的性能;而且各个层次也不可能完全封装该层所有的内容。

但毕竟分层思想为我们带来的好处是大于它的不足的,所以依然值得我们去采用它。


分层的基本原则和核心:
综上所述,分层的基本原则在于下层不依赖上层,为上层提供服务;而上层使用下层提供的服务,完成自身的功能。
在我们进行分层的时候,需遵循这一基本的原则。一个系统分几层,每个层次的责任是什么是我们分层时考虑的核心。

WEB应用中处处运用和体现着分层的思想。


WEB应用的分层:
WEB应用中,在浏览器与数据库之间需要有一个地方提供服务,处理业务逻辑以及与数据库通讯,于是有了我们现在所了解的WEB应用的三层架构。这三个层次分别是:表示层、业务层(领域层)和持久层。
下面将给予每个层次进一步的说明。

业务层(领域层)


业务层有三种组织方式:
1.事务脚本,即过程脚本。它是以完成一件事情从头到尾的过程为驱动的。
2.领域模型。领域模型不仅具有属性,还拥有行为。如果一个领域模型拥有所有方法,我们称之为充血模型;如果一个领域模型只有部分方法,称之为贫血模型;如果领域模型只有属性,没有方法,则称之为失血模型。
3.表模型。
在这个三种组织手段中,事务脚本与领域模型是我们最常采用的。运用事务脚本方式的过程中,我们会去调用持久层中的方法,而这些方法的参数被称为行数据入口。当我们使用充血模型时,可以省略持久层,对数据库的访问可以直接又领域模型来完成。
在实际运用中,我们常常将事务脚本和领域模型结合起来使用。领域模型采用贫血模型或失血模型,而抽取出来的方法形成新的类或接口。而至于到底是生成接口还是类,则要依据抽取方法的多少的情况来确定。
由此,我们将业务层再做一次分解,分为服务和模型。但这并不意味着WEB应用分层的改变,它依然保持三层架构,只是我们将业务层分的更细点。当我们采用充血域模型时,业务层很可能就只有领域模型。
持久层
在上面的论述中,曾多次提到持久层。
其实,持久层就是使用数据库服务的接口,封装了访问数据库的方法,为业务层提供访问数据库的服务。这样,业务层就将重心放在处理业务逻辑上,不用再去关心与数据库交互如何实现。
在持久层实现时,我们最好采用一种通用的实现方式,这样需调用持久层的业务层对象都可以运用其提供的方法。
表示层
表示层是向外界提供服务的接口。
用户通过浏览器向服务器提出请求,然而表示层就是用于接受、处理这些请求,将处理结果返回并展示给用户。所以,表示层又可分为两个部分,一个是用于流程控制的控制器模块,另一个是用于界面展示的视图模块。
我们所熟知的MVC架构模式,其实是运用于表示层的一种设计模式。其中,C即控制器,负责用户的交互,调用业务对象处理用户请求,返回响应视图。V就是视图,负责显示界面。M称为模型,也就是业务对象,负责管理系统业务数据。MVC模式分离了业务层与表现层。
SSH架构的使用
以上,我们已经对WEB应用中层次的划分有所了解,接下来就让我们来看看SSH架构是怎么应用到这些层次中的。
 
Struts应用在表示层,它是基于MVC的WEB应用框架。
Strut为我们提供了中央控制器(ActionServlet)和应用控制器(Action)。ActionServlet是Struts框架的核心,采用的是前端控制模式;Action则负责完成对服务的调用,对ActionServlet接受并分发下来请求进行处理。在运用中,我们可以重写ActionServlet,也可以直接使用,然后继承Action,使其完成我们要求的功能。
有了Struts提供的控制器,再运用JSTL标签、Struts标签库中的标签配以JSP或HTML文件,就是Struts中的视图。另外,用于视图与控制器之间表单数据传输的ActionFormBean,也被归于到了视图中。
Struts并没有定义模型层的具体实现。一般情况下,Action中所使用的服务是由业务层提供的。
Struts中还有不可缺少的配置文件。该配置文件描述了用户请求路径和Action映射关系的信息。ActionServlet通过解析此配置文件得知需把用户的请求发往哪一个Action。
当然,我们可以不使用Struts框架,运用Servlet的相关知识自己去编写控制器,解析配置文件。
 
Hibernate是一种映射的工具,完全着眼于关系数据库的对象——关系映射,管理对象到数据库的映射,提供数据查询和获取数据的方法。在持久层中,我们不仅可以使用Hibernate进行映射,还可以使用iBATIS进行SQL语句与对象之间的映射,此外,也可以直接使用JDBC对数据库进行操作。至于使用那一种工具实现持久化,可以根据自己的需求视情况而定。而Hibernate映射是否复杂取决于领域对象的关系是否复杂。
 
Spring贯穿于WEB应用中,它为我们管理对象提供了方便,降低了层与层之间的耦合度,将程序员从繁琐的事务、安全和分布式处理中解放出来,从而把更多的精力放在业务上。如果应用程序才用了Struts+Hibernate的架构,Spring可以帮助我们整合两者。在创建对象时,可以通过Spring进行注入;对于事务管理,可以通过Spring集成声明式事务管理到到应用程序中等。
Spring也拥有自己的MVC框架模块、Web模块以及JDBC和DAO模块,只是我们很少使用。
 
最后,需要强调的是:SSH架构只是一种实现WEB应用的工具。我们可以完全不使用这种架构,也可以部分使用,由自己编写框架去实现WEB应用的分层。用与不用,可以根据自己的喜好、系统情况而选择。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值