Introducing MVC

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.

posted @ 2014-01-20 21:28  Biiigfish  阅读(214)  评论(0编辑  收藏  举报