Java中的MVC模式和三层架构
这里主要介绍下我对java中的mvc模式的理解。我觉得说到mvc还要说一下常说的三层结构。
三层架构:
说到mvc,先说说三层架构吧,通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(SERVICES)、数据访问层(DAO)(data access object)。
表现层实一般就是H5界面了,业务层实现的代表作品是Spring,持久层实现的代表作品是Mybaties。层就相当于一个黑盒子,我们不用知道它内部怎么实现,只需要知道如何去调用它就行了。每层只与上下相邻的两层打交道。当一层内部由于技术变迁发生变化时,只要接口不变,其他层不用做任何改变。分层之后灵活性提高,也便于团队分工开发。
MVC和三层架构的区别和联系:
MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。mvc可以是三层中的一个表现层框架,属于表现层。三层和mvc可以共存。三层是基于业务逻辑来分的,而mvc是基于页面来分的。
MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器。
主要功能:
在一般的Java程序中,action 是业务层的一部分,是一个管理器(作用是取出前台界面的数据,转发到下一个action或者页面)。
模型层(model)一般是实体对象(如User类),作用是暂时存储数据方便持久化(存入数据库或者写入文件)。
dao是数据访问层,就是用来访问数据库实现数据的持久化(把内存中的数据永久保存到硬盘中。
总的说来:
Dao主要做数据库的交互工作;
Model是模型,存放你的实体类;
Service做相应的业务逻辑处理;
如果熟悉像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。
接下来说一下service的意义,其实因为你现在做东西分层次不是那么严格,在一个你做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
至于你说的为什么要用service层封装,我认为:一般来说,某一个程序的有些业务流程需要连接数据库,有些不需要与数据库打交道而直接是一些业务处理,这样就需要我们整合起来到service中去,这样可以起到一个更好的开发与维护的作用,同时也是MVC设计模式中model层功能的体现。
Dao层:一般可以再分为Dao接口和DaoImpl实现类,如userDao接口和userDaoImpl实现类,接口负责定义数据库curd的操作方法,实现类负责具体的实现,即实现Dao接口定义的方法。
Service层:引用对应的Dao层数据库操作,在这里可以编写自己需要的代码(比如简单的判断),也可以再细分为Service接口和ServiceImpl实现类