Model 可翻译成“模型”,笔者认为译成“数据模型”会更贴切一些,因为Model 负责所有与“数据”有关的任务,大致如下。
定义数据结构。
负责与数据库沟通。
从数据库读取数据。
将数据写入数据库。
运行预储程序。
数据格式验证。
定义与验证商业逻辑规则。
对数据进行各种加工处理。例如:指定特定实体(Entity) 某些字段的默认值。
简言之,只要是和“数据”有关的任务,都应该在Model 里完成定义。
View可翻译成“检视”或者“视图”,但我很不喜欢这种为了翻译而翻译的名词,这样反而不利于沟通表达,所以之后一律会以View来表示。
View负责所有呈现在用户面前的东西,最简单的说法就是输出与输入。输出工作就是呈现在浏览器上的界面,例如,输出HTML、XML,等等。输入工作则是将用户输入的数据传回服务器,例如,在浏览器上呈现网页窗体让用户输入。
以下简单介绍,在View中与输出/输入有关的工作。
输出
从Controller 取得数据,并显示在用户界面上。
决定要用什么技术来呈现“用户界面”(例如,HTML、XML、Silverlight 、Flash,等)。
负责界面的排版、字型、颜色、美观与各种呈现方式。
将Controller 传送的数据显示于界面,而数据是参考自Model 的定义。
参考Model 的数据格式定义数据显示。
输入
负责将数据送回Controller 。
HTML 窗体通过GET 或POST 输出数据。
决定数据应该送到哪一个Controller 的Action 中。
决定数据传送的方式,例如,GET、POST、XML HTTP Request (XHR) 。
前端基本的数据格式验证。
验证功能,例如,使用JavaScript 验证表单域是否输入。
参考Model 的类别定义,在Visual Studio 中利用Intellisense 撰写程序。
此外,与View相关的演示与技术如下。
HTML / XML / CSS
JSON
JavaScript ( jQuery 、jQuery UI 、MooTools 、Ext2、Prototype… )
MasterPage
ASP.NET Controls ( Server Control 、User Control )
AJAX 相关技术
Silverlight
Flash
Mobile 网页(PDA、手机、iPhone…)
WAP 网页
iPhone 网页
简言之,所有应该要显示在网页上的逻辑都是View负责的范围。
Controller 可翻译成“控制器”,顾名思义就是“掌控全局的对象”,其负责的工作如下。
决定与“用户”沟通的管道,以ASP.NET MVC 为例就是HTTP 或HTTPS。
决定系统运作的流程。例如,从Controller 接收到数据后要立刻转向(Redirect) 到另一个页面。
负责从Model 取得数据。我们可以在Controller 的类别中利用Model 提供的类别来取得数据。
决定应该显示哪个View 。一个网站里有很多呈现的View,要挑选哪一个View 来呈现给用户,是Controller 的责任。或是当Controller 运行的过程中发生异常时,也可由Controller 挑选适当的View 进行响应。
在Controller 与View的关联性上,彼此都是双向关系,但Controller 的主动性较高。
当Controller 为“主动”角色时:
Controller 可决定要显示哪一个View 。
当View为“主动”角色时:
View 可决定数据要送回到哪一个Controller 的Action 。
当View 需要数据时,可决定数据应该从哪一个Controller 的Action 取得。
在Controller 与Model 的关联性中,Controller 永远居于“主动”的角色。Controller 负责调用或使用Model 所定义的各种类别,而Model 很单纯的仅仅提供“数据服务”或“验证服务”给Controller 使用。
在MVC的世界里,有个非常重要的观念就是“关注点分离(Separation of Concerns, SoC)”。意思是指当你在进行软件开发时,可以只关注在当前的对象上,不会受到相同系统中其他对象的干扰,包括所有对对象的修正也不会影响其他对象的运作,进而专注于完成工作,如此一来,不但容易提升软件质量,还可加快程序代码理解的速度。
MVC设计样式拥有清楚的开发架构与明确的对象分工,使软件更易于维护,若你是对面向对象编程颇有概念的人,就会了解好的对象架构带你上天堂,不好的对象架构带你住套房,老师说的话记得要听。
原文:https://www.cnblogs.com/renwen123/p/5604767.html