关于struts2框架中Action与servlet API中解耦的个人理解

时间:2022-08-26 19:38:56

今天学习框架到这里的时候,看到一句话,"Action是对Servlet的封装,实现了与Servlet相关的API的解耦,简化开发"。想到自己平时不只一次的看到过耦合、解耦等词汇,于是参考很多大牛的博客,做一次整理。

耦合是一个比较宽泛的概念,大体意思就是程序中一部分与其他部分之间的联系,在我们的开发中,非常提倡"高内聚,低耦合"的观念,也就是解耦的过程(解耦并不是字面意义上的把关联拆掉,而是把模块之间的关联放松到必要的程度)。我在这里从别处引用2个例子来解释:

(1)将军统帅士兵的例子:一般情况下,应该是将军统帅军官,军官管理士兵,不越级管理.军官在这里充当一个对外接口的功能,执行由上级下发的命令.而将军下发的命令都是都是很大的任务,由下面的军官分类执行(只要达到分配的目标,怎么执行的将军并不详细指定),那么也就是不同的接口管理着不同的任务,功能清晰明确,这就是高内聚,低耦合。
那么这里如果由将军可以直接统帅每个小兵呢,就出现了跨级管理,一个士兵不单受直接上级管理,还受最高上级命令,多个命令同时下达的时候就容易出现错误,同时也就是高耦合,反而不一定高效,平时的维护也会比较困难。

(2)订单例子,假设有一个方法,每次下订单的时候都会执行创建订单和给客户发送短信的动作,而单独想执行创建订单或者发送短信却做不到,这就是高耦合;那么把发送短信和创建订单分别提取到两个方法中,由一个其他的方法来管理,那么这就是解耦的过程。

综上所述,感觉解耦就是一个尽量减少代码之间的关联度,提高功能的明确性的过程,这样在我们平时的开发过程中,更利于思维明确,对代码的维护性和扩展性也会大为提高。

我们通过Action使用servlet中API的方法中,通过使用ActionContext类是完全解耦的方式,而通过ServletActionContext类生对象就是耦合的方式。