一直不明白service层为什么要分层(语言-java)

service层为什么要分层一直不明白,只知道要这么写,impl 与service,为什么要写接口呢,直接controller层写业务不好吗

img

分层设计主要是为了解耦;举个例子 你就明白为啥这么做了;比如有两个service分别是UserService和DeptService; 现在业务中 想要查询用户所属部门,正常来讲应该是调用DeptSercice然后传参用户id 这样就查询出来用户所属部门的信息了;这么写的好处就很明显, 不需要你在写一遍查询部门的代码里.为什么不直接写在Controller层.第一是违背了单一职责问题,第二是如果业务比较复杂,所有代码都写在一个类里面,代码的可读性就很差;
总结起了就是 一是为了解耦,方便其他业务调用,第二是为了代码可读性和维护,修改方便

写接口是为了规范,因为你可能不止一个类,但你们可能有着一些共同的增删改查方法,有了接口就知道该写什么,该补充什么方法,而再分service层,是为了规范和解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。

简单的逻辑当然是可以的,而且很方便的,但是springboot是基于spring而来的,而spring是面向接口进行编程的,这就接口的实现是可以相互替换的。就比如说,我想接入三方接口,但是面对各种不同的平台,每个平台的规范都不一样,这个时候就展现出面向接口编程的好处了,我仅仅只需要替换实现的组件就可以灵活的切换到各个接口实现,而spring正是为了实现这个目的

该回答引用GPTᴼᴾᴱᴺᴬᴵ

在软件开发中,分层架构是一种常见的设计模式,其目的是将代码按照不同的功能和责任进行分组,从而实现代码的模块化和可维护性。

Service层作为分层架构中的一层,通常负责处理业务逻辑和业务规则,与数据访问层(DAO层)和表示层(Presentation层)进行交互。将业务逻辑和规则从表示层和数据访问层中分离出来,使得Service层可以独立变更而不影响其他层的代码。此外,Service层还可以提供一些通用的功能和服务,比如日志记录、权限控制、事务管理等,从而降低表示层和数据访问层的复杂度和耦合性。

在Service层中,将接口与实现分离是为了提高代码的灵活性和可扩展性。接口定义了Service层提供的服务和方法,而具体实现则提供了服务的具体实现逻辑。使用接口和实现分离的方式,可以让不同的实现方便地替换和升级,同时也可以实现代码的解耦合,从而提高代码的可测试性和可维护性。

至于为什么不直接在Controller层写业务,这是因为Controller层的职责是处理HTTP请求和响应,负责路由和视图展示等功能,如果将业务逻辑写在Controller层中,会导致Controller层变得过于臃肿和复杂,不利于代码的维护和升级。将业务逻辑和规则从Controller层中分离出来,可以让Controller层更加专注于HTTP请求和响应的处理,同时也可以提高代码的复用性和可维护性。

service层用来封装业务逻辑和数据操作,将复杂的业务逻辑和数据操作封装起来,可以更容易地进行设计和实现,也更容易地进行单元测试和维护。
web层一般主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理