为什么会出现Service层??

为什么存在service层?

service.jpg

问题出现场景

初学的时候做一些非常简单的Javaweb的项目的时候,设计MVC模式时候,往往是通过jsp转Servlet,再转Dao层。

最近看一些其他资料的时候,发现这里设计MVC模式时候,多了一层Service层

到这里就非常疑惑了。Service层并没有做什么实际的工作,只是接受了Servlet,同时又调用了Dao。它本身并没有什么实际意义的代码,只是接收,调用。

很显然,这样增加了代码量。当然,我很轻易感受到了。但是它的优点是什么呢?不可能没有优点的情况下仅仅是为了增加代码量吧?

关于 Service 层存在的意义

Service被称作业务层。顾名思义,它处理逻辑上的业务,而不去考虑具体的实现。

对于MVC模式,MVC本身并不属于设计模式的一种,它是一种设计结构,这种结构的最终目的是为了解耦,也就是不同逻辑层的代码自身改变的时候,你别影响其他层。在写项目的时候,不同的逻辑上的代码之间的解耦是很重要的。

那很显然,为了使得我们在写代码的时候,不同的逻辑层内的代码之间的关联降低到最小,我们需要在不同的逻辑层之间加一些缓冲的层来达到一些解耦的效果。

比如,你在视图层,不会直接去调用Dao层。

那么对于Service,就是 Servlet 和 Dao 层之间缓冲的层。通过这一层来进行解耦,使得 Dao 层内的变化不会直接影响到 Servlet 层。

例如一个 sql 语句如果需要拼接,比如说是模糊查询, 则 sql 语句需要根据用户选择的条件来进行拼接。那么,拼接这个 sql 语句的逻辑部分,就放在 service 层进行。而 Dao 层,只负责接收拼接之后的最终的 sql 语句。

最后,service 也不是就非他不可。对于极小的项目而言,加了service层,反而增加了代码量,而且Dao层种以及预见了可能出现的情况,并进行了相应的扩展。那么,此时,既不需要了。当然,大型项目可能无法在Dao层内做到这些(我也没接触到过大型项目),就需要service了。

最终的目的也就两个词:解耦,便于扩展

核心词1

解耦:也就是在逻辑上不同的层之间,某一层的改变尽量不要去影响到其他层。

而Servlet层和Dao层都是由实际意义代码操作的层,而且两层有直接的调用关系。如果 Dao 层代码修改了,会直接影响到 Servlet 层。为了尽量的减少这两层之间的耦合,加了这么一个层

核心词2

便于扩展:这是个很常见的词了。也就是说一份代码在初次写的时候,一手的开发者对代码的理解是相对比较充分的,但是,功能可能不是非常完善的。那么在之后修改代码的某一部分功能的时候,也是需要尽量这个功能对外仅仅提供一个调用,功能内部的代码如何实现不需要被其他部分了解。那么 Service 层作为一个中间站,就比较好的解决了这个问题。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_36654606/article/details/86618708

更早的文章

Java Web (新手篇 ~1)

继续阅读