zoukankan      html  css  js  c++  java
  • 小论文2

    关于MVC

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

    MVC一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

    MVC的原理

    1、 Controller和View之间可以通信,Controllor通过outlet(输出口)控制View,View可以通过target-action、delegate或者data source来和Controller通信;

    2、 Controller在接收到View传过来的交互事件之后,经过一些判断和处理,把需要Model处理的事件递交给Model处理,Controller对Model使用的是API;

    3、 Model在处理完数据之后,如果有需要,会通过Notification或者KVO的方式告知Controller,事件已经处理完,Controller再经过判断和处理之后,考虑下一步要怎么办。Model只负责发送通知,具体谁接收这个通知并处理它,Model并不关心,这一点非常重要,是理解Notification模式的关键。

    4、 Model和View之间不直接通信!

    所以M、V、C之间的各司其职——Model不保存控件,View不做数据库操作(但这个也不是绝对,如果需要View做一些数据缓存工作,还是需要保存一些临时数据的),而Controller就充当了两者之间的协调器。  

    MVC看上去和三层架构一样,有些人用三成架构的思路写MVC,但三层架构的核心思想是面向接口编程和各层之间的解耦和可替换性,而MVC框架中没有这种概念,因为MVC要面对的问题本就不是三成架构要面对的问题,所以以MVC为基础写出来的三成架构是不会具备三层架构的核心要义的。

    MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。

    View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。

    在写程序时,业务逻辑的重复使用是经常要面对的场景。 如果业务逻辑写在控制器中, 要重用它的唯一方法就是将它提升到父类之中,通过继承来达到代码复用的效果。但这么做会带来一个巨大的副作用,违背了一项重要的面向对象设计原则:接口隔离。

    什么是接口隔离,接口隔离就是当一个类需要继承另一个类时, 如果被继承的类中有继承的类用不到的方法或者属性时,就不要去实现这个继承。如果真的情非得已必须要继承,那么也需要从被继承的类中再提取出一个只包含需要部分功能的新类型,最终去继承这个新类型才是正确的做法。 换句话说,实现继承的时候,不要去继承那些用不到的事物。

    通过继承父控制器的方式复用业务逻辑时,往往会出现为了重用一个方法而继承来一大堆用不到的方法,表面上看起来似乎没什么问题,但是这会使代码变的难以理解,
    长此以往, 软件的代码会朝着不健康的方向发展,因为使用继承的条件是很苛刻的。

    各Model之间是可以相互调用的, Controller也可以无障碍的调用Model,因此将业务逻辑放在Model中可以灵活的使用组合的方式复用代码。

    而Controller之间是不可以相互调用的,要复用代码只能将代码提升至父类,通过继承实现,显然这种做法既不正确,也不灵活,因此完全不提倡。

    GoF总结过23个设计模式,这23个设计模式是某些特定的编程问题的特效药。

    MVC是一种模式,但却在GoF总结出来的这个23个设计模式之外,确切的说它不是一种设计模式,它是多种设计模式的组合,并不仅仅只是一个单独的一个模式。

    组成MVC的三个模式分别是组合模式、策略模式、观察者模式,MVC在软件开发中发挥的威力,最终离不开这三个模式的默契配合。 组合模式在MVC中扮演什么样的角色。

    组合模式只在视图层活动,视图层的实现用的就是组合模式,这里指的实现是底层的实现。

    组合模式的类层次结构是树状的, 做Web时视图层是html页面,html的结构正是树状的,这其实就是一个组合模式的应用。

    观察者模式有两部分组成,被观察的对象和观察者,观察者也被称为监听者。对应到MVC中,Model是被观察的对象,View是观察者,Model层一旦发生变化,View层即被通知更新。View层和Model层互相之间是持有引用的。 我们在开发Web MVC程序时,因为视图层的html和Model层的业务逻辑之间隔了一个http,所以不能显示的进行关联,但是他们观察者和收听者的关系却没有改变。当View通过http提交数据给服务器,服务器上的Model接受到数据执行某些操作,再通过http响应将结果回送给View,View(浏览器)接受到数据更新界面,是观察者模式的另一种表现形式。

    策略模式是View和Controller之间的关系,Controller是View的一个策略,Controller对于View是可替换的, View和Controller的关系是一对多,在实际的开发场景中,也经常会碰到一个View被多个Controller引用,这即使策略模式的一种体现。

  • 相关阅读:
    Hadoop Mapreduce分区、分组、二次排序过程详解
    hadoop的NullWritable
    CentOS7.0修改主机名(hostname)
    Linux下不重启永久修改hostname
    稀缺——我们是如何陷入贫穷与忙碌的
    slf4j log4j logback关系详解和相关用法
    使用logstash+elasticsearch+kibana快速搭建日志平台
    安装XAMPP时出现 unable to realloc 83886080 bytes
    ElasticSearch查询max_result_window问题处理
    后台CMS日志处理记录
  • 原文地址:https://www.cnblogs.com/baimafeima/p/13096994.html
Copyright © 2011-2022 走看看