对MVC的理解
2016-03-23 17:04
246 查看
MVC是三个单词的缩写:Model, View, Controller。 MVC是一种设计模式,目前几乎所有的Web开发框架都建立在MVC模式之上。MVC的意义在于指导开发者将数据与表现解耦,提高代码,特别是模型部分代码的复用性。
实际上,所有模式的存在都是为了代码复用,在前台页面的js或者后端PHP\java中都有很多采用MVC三层设计来组织代码的框架,设置对于CS的应用或者本地APP都包含这种思想。
下面的内容基本是摘录自:http://www.digpage.com/mvc.html,也加入了自己的理解和想法。
Model的设计跟数据库是一对多的关系,一个Model对应多个数据库表,描述的是业务对象。识别业务对象的过程是开发工作中最核心也是最难的事情。
有这些经验:
- 属性私有,具有set和get函数
- 粒度根据业务逻辑来设计,保持怎样的粒度就看需要对属性进行怎样的操作
- 函数命名要易懂,Model里的函数非常多
- Model还会根据在不同场景下设计不同的字段或者字段的验证规则,这时候可以考虑使用继承的方式来适应不同的场景。
在Yii框架里面,似乎是把整个业务对象都交给了View的渲染器,这属于一种前后端不严格分离的做法,但是的确是一种很便捷的做法。
一般没有任何准备数据的代码,如查询数据库、组合成一定格式的字符串等。 这些一般放在Controller里面,并以变量的形式传给视图。 也就是说,视图里面要用到的数据,都是拿来就能直接用的变量。
有这些经验:
- 页面经常出现的区域可以考虑做成小组件,譬如分页、下载、某个窗口等等…
- view中有的需要PHP框架来渲染,有的却是异步数据渲染,在设计初期就定下来,方便后面的统一。
有这些经验:
- 不处理各种参数,尽量不出现 if 语句
- 处理好用户验证、表单重复提交、数据输出、导航view这些工作就好
最后,从MVC三个单词的顺序来看,平时写代码也可以考虑按照这个顺序来写,先想好数据库设计,然后写好Model类,然后写好V,最后写C,写C的时候可以慢慢细化V和M间的关系,从而形成不同的功能点。
实际上,所有模式的存在都是为了代码复用,在前台页面的js或者后端PHP\java中都有很多采用MVC三层设计来组织代码的框架,设置对于CS的应用或者本地APP都包含这种思想。
下面的内容基本是摘录自:http://www.digpage.com/mvc.html,也加入了自己的理解和想法。
Model
Model是指数据模型,是对客观事物的抽象。 如一篇博客文章,我们可能会以一个Post类来表示,那么,这个Post类就是数据对象。 同时,博客文章还有一些业务逻辑,如发布、回收、评论等,这一般表现为类的方法,这也是model的内容和范畴。 对于Model,主要是数据、业务逻辑和业务规则。相对而言,这是MVC中比较稳定的部分,一般成品后不会改变。 开发初期的最重要任务,主要也是实现Model的部分。这一部分写得好,后面就可以改得少,开发起来就快。Model的设计跟数据库是一对多的关系,一个Model对应多个数据库表,描述的是业务对象。识别业务对象的过程是开发工作中最核心也是最难的事情。
有这些经验:
- 属性私有,具有set和get函数
- 粒度根据业务逻辑来设计,保持怎样的粒度就看需要对属性进行怎样的操作
- 函数命名要易懂,Model里的函数非常多
- Model还会根据在不同场景下设计不同的字段或者字段的验证规则,这时候可以考虑使用继承的方式来适应不同的场景。
View
View是指视图,也就是呈现给用户的一个界面,是model的具体表现形式,也是收集用户输入的地方。 如你在某个博客上看到的某一篇文章,就是某个Post类的表现形式。 View的目的在于提供与用户交互的界面。换句话说,对于用户而言,只有View是可见的、可操作的。 事实上也是如此,你不会让用户看到Model,更不会让他直接操作Model。 你只会让用户看到你想让他看的内容。 这就是View要做的事,他往往是MVC中变化频繁的部分,也是客户经常要求改来改去的地方。 今天你可能会以一种形式来展示你的博文,明天可能就变成别的表现形式了。在Yii框架里面,似乎是把整个业务对象都交给了View的渲染器,这属于一种前后端不严格分离的做法,但是的确是一种很便捷的做法。
一般没有任何准备数据的代码,如查询数据库、组合成一定格式的字符串等。 这些一般放在Controller里面,并以变量的形式传给视图。 也就是说,视图里面要用到的数据,都是拿来就能直接用的变量。
有这些经验:
- 页面经常出现的区域可以考虑做成小组件,譬如分页、下载、某个窗口等等…
- view中有的需要PHP框架来渲染,有的却是异步数据渲染,在设计初期就定下来,方便后面的统一。
Controller
Contorller指的是控制器,主要负责与model和view打交道。 换句话说,model和view之间一般不直接打交道,他们老死不相往来。view中不会对model作任何操作, model不会输出任何用于表现的东西,如HTML代码等。这俩甩手不干了,那总得有人来干吧,只能Controller上了。 Contorller用于决定使用哪些Model,对Model执行什么操作,为视图准备哪些数据,是MVC中沟通的桥梁。有这些经验:
- 不处理各种参数,尽量不出现 if 语句
- 处理好用户验证、表单重复提交、数据输出、导航view这些工作就好
最后,从MVC三个单词的顺序来看,平时写代码也可以考虑按照这个顺序来写,先想好数据库设计,然后写好Model类,然后写好V,最后写C,写C的时候可以慢慢细化V和M间的关系,从而形成不同的功能点。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用