Controller层
控制层,用于处理请求的。当请求来的时候,控制层会找到对应的处理方法。
Service层接口
这个层是接口层,是为Controller层提供服务的层,里面有很多抽象方法,控制层调用这个方法获得执行结果返回
ServiceImpl层
这个层就是Service接口层的实现层,这个层实现了Service层的接口,实现了Service层所有的抽象方法
Dao层接口
这个层也是一个接口层,里面的抽象方法是提供给ServiceImpl层使用,这一层是数据持久层,是跟数据库打交道的层
DaoImpl层
这个层是实现Dao层的实现层,实现了Dao层的所有抽象方法,里面的方法主要都是跟数据库相关的。该层是跟数据库交互的层。该层到了SSM框架之后就变成了mapper.xml文件,这个mapper.xml文件不一定实现了Dao层的所有抽象方法,这个文件只是专注于sql语句的制作,通过Dao层接口的包名+方法名策略找到对应的mapper.xml文件标签
我的理解
MVC设计模式就如同一家饭店。
饭店的门面就相当于项目的html/jsp页面
饭店的大堂经理就是Controller层,不同的客人来到饭店就像是不同的请求来到服务器,大堂经理通过调配对应的服务员来接待这些客人
这些服务员就像是ServiceImpl层,用于实际接待客人(请求)
服务员通过客人的点单,到后厨去让厨师做相应的菜品,而厨师就相当于DaoImpl层
Service层接口就是服务员所穿的制服,大堂经理蓝岛这一身的制服就知道这个人是一个服务员,而服务员本身就是这一身制服的实现类(ServiceImpl)
Dao层接口就是厨师所穿的制服,服务员看到这身制服就知道这个人是厨师。而厨师本身就是这一身制服的实现类(DaoImpl)
为什么使用接口?
这就好比于为什么服务员要穿服务员制服,厨师要穿厨师制服。穿制服就是为了标识这个人的身份(是厨师还是服务员),如果不穿制服,就会产生混淆,没有了制服,谁也不认识谁,大堂经理总不该让来到的客人去写单子吧?而服务员总不该让客人去炒菜吧?
同理,接口时为了规范实现接口的这个类是做什么功能的。
为什么还必须要有Dao层,直接Service层访问数据库不行吗?
Dao层是必须要有的 ,又回到饭店的例子,Service层直接访问数据库,相当于服务员直接进后厨去炒菜,又是服务员又是厨师的,会出现职责混淆,总不能炒菜炒到一半又得出去接待客人吧?
Dao层的存在是为了让业务逻辑更加分明,易于后面的管理维护。
想写这篇博客很久了,但是一直迟迟未写。写给你,对MVC的理解。