想要清楚的理解MVC架构到底是怎么来的话,那肯定是要从为什么会发展出MVC架构说起。
早些年的架构
在早些年的架构中:用户直接访问控制层,控制层就可以直接操作数据库。虽说这样很方便,易于展示,但如果公司发展规模越大,功能、页面越多。程序就显得十分的臃肿,不利于维护
所以就发展到了MVC架构!
MVC三层架构
MVC分为三个基本部分:
-
模型(Model):负责存储系统的中心数据。可以简单理解就是数据层,用于提供数据。在项目中,(简单理解)一般把数据访问和操作,比如将对象关系映射这样的代码作为Model层,也就是对数据库的操作这一些列的代码作为Model层。比如代码中我们会写DAO和DTO类型的代码,那这个DAO和DTO我们可以理解为是属于Model层的代码。
- 业务层(Service):专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现;
- 数据访问层(DAO):Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求;
-
视图(View):将信息显示给用户(可以定义多个视图)。一般所有的JSP、Html等页面就是View层。
-
控制器(Controller):处理用户输入的信息。负责从视图读取数据,控制用户输入,并向模型发送数据,是应用程序中处理用户交互的部分。负责管理与用户交互交互控制。
dao层和service层的区别?
在service里直接调用dao,service里面就new一个dao类对象,调用。
我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
流程:
登录—>接收用户的登录请求—>处理用户的请求(获取用户登录的参数,username,password)—>交给业务层处理登录业务(判断用户名密码是否正确:事务)—>Dao层查询用户名和密码是否正确—>数据库
MVC特点:
MVC重要特点就是两种分离:
视图和数据模型的分离:使用不同的视图对相同的数据进行展示;分离可视和不可视的组件,能够对模型进行独立测试。因为分离了可视组件减少了外部依赖利于测试。(数据库也是一种外部组件)
视图和表现逻辑(Controller)的分离:Controller是一个表现逻辑的组件,并非一个业务逻辑组件。MVC可以作为表现模式也可以作为建构模式,意味这Controller也可以是业务逻辑。分离逻辑和具体展示,能够对逻辑进行独立测试。
优点:耦合性低;重用性高;生命周期成本低;部署块;可维护性高;有利软件工程化管理。
缺点:没有明确的定义;不适合小型,中等规模的应用程序;增加系统结构和实现的复用性;视图与控制器间的过于紧密的连接;视图对模型数据的低效率访问;一般高级的界面工具或构造器不支持模式。
什么是持久层?
就是把数据保存到可掉电式存储设备中供之后使用.大多数情况下特别是企业级应用,数据持久化往往也就以为着 将内存中的数据保存到 磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成.
- 狭义的理解: “持久化”仅仅指把域对象永久保存到数据库中;
- 广义的理解,“持久化”包括和数据库相关的各种操作。
● 保存:把域对象永久保存到数据库。
● 更新:更新数据库中域对象的状态。
● 删除:从数据库中删除一个域对象。
● 加载:根据特定的OID,把一个域对象从数据库加载到内存。
● 查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加载内在存中。
为什么要持久化?
持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。
● 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;
● 代码重用性高,能够完成大部分数据库操作;
● 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。