service层为什么要分层一直不明白,只知道要这么写,impl 与service,为什么要写接口呢,直接controller层写业务不好吗
分层设计主要是为了解耦;举个例子 你就明白为啥这么做了;比如有两个service分别是UserService和DeptService; 现在业务中 想要查询用户所属部门,正常来讲应该是调用DeptSercice然后传参用户id 这样就查询出来用户所属部门的信息了;这么写的好处就很明显, 不需要你在写一遍查询部门的代码里.为什么不直接写在Controller层.第一是违背了单一职责问题,第二是如果业务比较复杂,所有代码都写在一个类里面,代码的可读性就很差;
总结起了就是 一是为了解耦,方便其他业务调用,第二是为了代码可读性和维护,修改方便
写接口是为了规范,因为你可能不止一个类,但你们可能有着一些共同的增删改查方法,有了接口就知道该写什么,该补充什么方法,而再分service层,是为了规范和解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
简单的逻辑当然是可以的,而且很方便的,但是springboot是基于spring而来的,而spring是面向接口进行编程的,这就接口的实现是可以相互替换的。就比如说,我想接入三方接口,但是面对各种不同的平台,每个平台的规范都不一样,这个时候就展现出面向接口编程的好处了,我仅仅只需要替换实现的组件就可以灵活的切换到各个接口实现,而spring正是为了实现这个目的
至于为什么不直接在Controller层写业务,这是因为Controller层的职责是处理HTTP请求和响应,负责路由和视图展示等功能,如果将业务逻辑写在Controller层中,会导致Controller层变得过于臃肿和复杂,不利于代码的维护和升级。将业务逻辑和规则从Controller层中分离出来,可以让Controller层更加专注于HTTP请求和响应的处理,同时也可以提高代码的复用性和可维护性。
service层用来封装业务逻辑和数据操作,将复杂的业务逻辑和数据操作封装起来,可以更容易地进行设计和实现,也更容易地进行单元测试和维护。
web层一般主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理