PS:这本书感觉不怎么样,这么多低频词就倒人胃口。。。

Suppose you'v recently launched a new web site, only to find that it's soon inundated(淹没) with users. Eager to extend this new found success, the project begins to grow in ambition and complexity. You'v even begun to hire a few talented staff members to help out with the design and development. The newly hired designers immediately begin an overhaul(检修) of the site's pages, many of which currently look like this:

<?php

// Include site configuration details and page header
INCLUDE "config.inc.php";
INCLUDE "header.inc.php"; // Scrub some data
$eid = htmlentities($_POST['eid']); // Retrieve desired employee's contact information
$query = "SELECT last_name, email, tel
FROM employees
WHERE employee_id = '$eid'";
$result = $mysqli->query($query, MYSQLI_STORE_RESULT); // Convert result row into variables
list($name, $email, $telephone) = $result->fetch_row();
?> <div id = "header">Contact Information for: <?php echo $name; ?>
Employ Name: <?php echo $name; ?> <br />
Email: <?php echo $email; ?> <br />
Telephone: <?php echo $telephone; ?> <br /> <div id="sectionheader">Recent Absences <?php
// Retrieve employee absences in order according to descending date
$query = "SELECT absence_date, reason
FROM absences WHERE employee_ids='$eid'
ORDER BY absence_date DESC ";
// Parse and execute the query
$result = $mysqli->query($query, MYSQLI_STORE_RESULT); // Output retrieved absence information
while (list($data, $reason) = $result->fetch_row()) echo "$date: $reason"; // Include page footer
INCLUDE "footer.inc.php";
?>

Becaus the design and logic are inextricably intertwined(纠缠在一起), several problems soon arise:

  • Because of the intermingling(混合、掺和) of the site's design and logic, the designers who were hired with the sole purpose of making your web site look great are now faced with the task of having to learn PHP.
  • The developers, who were hired to help out with the expansion of web site features, are distracted by fixing the bugs and security problems introduced by the disigner's novice(新手) PHP code. In the process, they decide to make their own little tweaks to the site design, infuriating(惹怒) the designers.
  • The almost constant conflicts that arise due to simultaneous editing of the same set of files soon become tiresome and time consuming.

You're probably noticing a pattern here: the lack of separation of concerns is breeding an environment of pain,  distrust, and inefficiency. But there is a solution that can go a long way toward alleviating(缓解) these issues: the MVC architecture.

The MVC approach renders development more efficient by breaking the application into three distinct components:the model, the view, and the controller. Doing so allows for each component to be created and maintained in isolation, thereby minimizing the residual(剩余) effects otherwise incurred should the components be intertwined in a manner similar to that illustrated in the previous example. You can find detailed definitions of each component in other learing resources, but for the purposes of this introduction the following will suffice(suffic-ient):

  • The model: The model specifies the rules for the domain modeled by your wesite, defining both the application's data and its behavior. For instance, suppose you create an application that serves as a conversion calculator,  allowing users to convert from pounds to kilograms, feet to miles, and Fahrenheit to Celsius, among other units. The model is responsible for defining the formulas used to perform such conversions, and when presented with a value and desired conversion scenario(无法理解,就当比率吧), the model carries out the conversion and returns the result. Note that the model is not responsible for formatting the data or presenting it to the user. This is handled by the view.
  • The view: The view is responsible for formatting the data returned by the model and presenting it to the user. it's possible for more than one view to utilize the same model, depending on how the conversion application: one targeting standard browsers, and one aptimized for mobile devices.
  • The Controller: The controller is responsible for determing how the application should respond based on events occurring within the model and the view to produce the appropriate response. A special controller known as a front controller is responsible for routing all requests to the appropriate controller and returning the response.

To help you better understand the dynamics of an MVC-driven framework, the following example works through a typical scenario involving the converter application, highlighting the role of each MVC component:

1. The user interacts with the view to specify which type of conversion he'd like to carry out, for instance converting an input temperature from Fahrenheit to Celsius.

2. The controller responds by identifying the appropriate conversion action,  gathering the input, and supplying it to the model.

3. The model converts the value from Fahrenheit to Celsius and returns the result to the controller.

4. The controller calls the appropriate view, passing along the calculated value. The view renders and returns the result to the user.

Introducing MVC的更多相关文章

  1. [转载]ASP.NET MVC 3的分部视图

    1.什么是分部视图,我们应该什么时候应该用? 作为一个对ASP.NET MVC 模型很熟悉的开发者,他们自然想创建一个内容和代码都可以重用的组件,在web 窗体,我们可以创建一个web用户控件或web ...

  2. 推荐一本不错的书《Sencha Ext JS 5 Bootcamp in a Book》

    原文:https://www.createspace.com/5425618 看了一下该书目录,感觉不错,Ext JS 5的重点内容都提及了,确实是一本学习Ext JS 5的好书,唯一遗憾的地方就是太 ...

  3. Introducing ASP.NET vNext and MVC 6

    [译]Introducing ASP.NET vNext and MVC 6 原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source ...

  4. [译]Introducing ASP.NET vNext and MVC 6

    原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...

  5. [转]Code! MVC 5 App with Facebook, Twitter, LinkedIn and Google OAuth2 Sign-on (C#)

    本文转自:https://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-o ...

  6. ASP.NET MVC 6 一些不晓得的写法

    今天在看 Scott Guthrie 的一篇博文<Introducing ASP.NET 5>,在 MVC 6 中,发现有些之前不晓得的写法,这边简单记录下,算是对自己知识的补充,有些我并 ...

  7. ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting 【转】

    ASP.NET MVC WebGrid – Performing true AJAX pagination and sorting FEBRUARY 27, 2012 14 COMMENTS WebG ...

  8. Pro ASP.NET MVC –第四章 语言特性精华

    C#语言有很多特性,并不是所有的程序员都了解本书我们将会使用的C#语言特性.因此,在本章,我们将了解一下作为一个好的MVC程序员需要了解C#语言的特性. 每个特性我们都只是简要介绍.如果你想深入了解L ...

  9. Introducing the Blog Module

    Introducing the Blog Module Now that we know about the basics of the zend-mvc skeleton application, ...

随机推荐

  1. 如何将hdf5文件转换成tflite文件

    我们用keras训练模型后,通常保存的模型格式类型为hdf5格式,也就是.h5文件. 但如果我们想要移植到移动端,特别是基于tensorflow支持的移动端,那就需要转换成tflite格式. 如何转换 ...

  2. 【BZOJ 2288】 2288: 【POJ Challenge】生日礼物 (贪心+优先队列+双向链表)

    2288: [POJ Challenge]生日礼物 Description ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超 ...

  3. DHCP获取IP地址过程中捕获的报文—三级网络总结(二)

    上一篇文章主要说了一下知识点中的IP地址的考点,这一篇我打算说说DHCP获取IP地址过程中捕获的报文的这个考点,都是自己的理解,有错误欢迎指正. DHCP是应用层协议,UDP是传输层协议,IP是网络层 ...

  4. 【模拟+递归+位运算】POJ1753-Flip Game

    由于数据规模不大,利用爆搜即可.第一次用位运算写的,但是转念一想应该用递归更加快,因为位运算没有剪枝啊(qДq ) [思路] 位运算:时间效率较低(172MS),有些辜负了位运算的初衷.首先将二维数组 ...

  5. 十. 图形界面(GUI)设计14.键盘事件

    键盘事件的事件源一般丐组件相关,当一个组件处于激活状态时,按下.释放或敲击键盘上的某个键时就会发生键盘事件.键盘事件的接口是KeyListener,注册键盘事件监视器的方法是addKeyListene ...

  6. MYSQL复习笔记9-存储过程

    date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...

  7. CentOS 6.9下双网卡绑定单个IP地址及装网卡绑定到一个网桥(转)

    说明:经过查阅,原来双网卡绑定一个IP的专业名词叫做bond,可以实现负载均衡:如果想要实现两张网卡绑定到一个网桥,基本思路是两张网卡设置同一个网桥是行不通的,但如果先实现bond,然后将bond绑定 ...

  8. mysql join优化

    http://www.jb51.net/article/50427.htm 七.性能优化1.显示(explicit) inner join VS 隐式(implicit) inner join 如: ...

  9. [Android Pro] StorageManager简介

    StorageManager StorageManager is the interface to the systems storage service. The storage manager h ...

  10. Mysql - 登录错误

    来源: 问题的引出: 我 在CentOS上装完mysql后,用navicat链接的时候,抛出MySql - SQL Error (1130): Host IP is not allowed to co ...