MVC模式

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的编写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。MVC开始是存在于桌面程序中的,M是指数据模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

    MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

    视图是用户看到并与之交互的界面。对老式的Web应用程序来说MVC模式图,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷。

    MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

    模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以增加了代码的重复性。

    控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

    设计模式分为三个部分,分别为表现层、业务逻辑层、数据持久层。三个层次分工明确,共同组成了MVC模式。

    表现层包含表示代码、用户交互GUI、数据验证。业务逻辑层包含业务规则处理代码,即程序中与业务相关专业算法、业务政策等等。该层用于执行业务流程和制定数据的业务规则。业务逻辑层主要面向业务应用,为表示层提供业务服务。

    数据持久层包含数据处理代码和数据存储代码。数据持久层住哟啊包括数据存取服务,负责与数据库管理系统之间的通信。三个层次的每一层在处理程序上有各自明确的任务,在功能实现上有清晰地区分,各层与其余层之间分离,但是各层之间存有相互通信的接口。

    MVC有耦合性低、重用性高、生命周期成本低、部署快、可维护性高、有利于工程化管理等有点;但是也有没有明确定义、不适合小型,中等规模的应用程序、增加系统结构和实现的复杂性、视图与控制器间的过于紧密的连接、试图对模型数据的低效率访问、一般高级的界面工具或构造器不支持模式等缺点。

    在 Struts 中,已经由一个Struts 体系结构名为ActionServlet 的 Servlet充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的 struts-config.xml 的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在 MVC 的 模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应 Struts 里的 ActionForm与 Action 两个需要继承实现超类。在这里,Struts 可以与各种标准的数据访问技术结合在一起,包括Enterprise Java Beans(EJB),JDBC 与JNDI。在 Struts 的视图(View) 端,除了使用标准的JavaServer Pages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如 Velocity Templates,XSLT等。通过应用 Struts 的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(struts-config.xml)中。

    spring包括:XML和基于注解的配置风格灵活的依赖注入;先进的面向方面编程的支持与基于代理和基于AspectJ的变种;支持声明性事务,缓存的声明,声明确认,声明格式;与常见的Java EE规范,如JDBC,JPA JTA和JMS工作的强大抽象;一流的支持,共同开源框架如Hibernate和石英;一个灵活的网络框架构建RESTful MVC应用程序和服务端点;单元测试,集成测试以及丰富的测试设施。​

    

原文地址:https://www.cnblogs.com/dawn-sky/p/6753985.html