何时使用MVC


11

我正在用PHP和MySQL后端构建一个站点。但是,我目前不使用任何类型的框架。我应该使用Model View Controller吗?


3
您不一定需要使用框架来使用MVC设计模式。您可以构造自己的代码以使用MVC。
艾米·阿努谢夫斯基

5
您是在问是否应该使用框架还是通常应该使用MVC方法?
亚当李尔

Answers:


11

我的经验法则:

使用MVC结构可以更轻松地管理访问数据库或需要任何形式的用户输入的任何页面。

您不一定需要使用整个框架,如果站点相当简单,则可以为需要它的每个页面使用一个简单的Page Controller类(请参见上文)。您并不是一个可扩展的解决方案-因此请记住该项目的长期目标。

以下是PageController设置(很快被一起砍掉)的概略图:

index.php
--------------------------------------------------------

include 'Controller.php';
include 'Db.php';//db connection
include 'View.php';
$Controller = new MyController(new Db(), new View());
$Controller->route($_GET);
$Controller->render();


Controller.php
--------------------------------------------------------
class Controller($db){

    /* ensure all collaborators are provided */
    public function __construct(Db $db, View $view){
         $this->db = $db;
         $this->db->connect(array('host','db','user','pass'));
         $this->view = $view;
    }

    /* load the appropriate model data */
    public function route($_GET){
        //load the right model data and template
        switch($_GET){
            case $_GET['articles'] === 'cats':
                $this->vars = $this->db->get('cats');
                $this->template = 'cats.php';
                break;
            case $_GET['articles'] === 'dogs':
                break;
                $this->vars = $this->db->get('dogs');
                $this->template = 'dogs.php';
            default:
             $this->vars = array();
        }

    } 

    /* render an html string */
    public function render(){
        echo $this->view->render($this->template,$this->vars);
    }

}

View.php
------------------------------------------------------------
class View.php
    {
     /* return a string of html */
     public function render($template,$vars){
            // this will work - but you could easily swap out this hack for 
            // a more fully featured View class
            $this->vars = $vars;
            ob_start();
            include $template;
            $html = ob_get_clean();
            return $html;
         }

     }

template cats.php
--------------------------------------------------------
$html = '';
$row_template = '%name%,%breed%,%color%';
foreach($this->vars as $row){
    $html .= str_replace(
        array(%name%,%breed%,%color%),
        array($row['name'],$row['breed'],$row['color']),
        $row_template);
    }
echo $html;

Db.php
---------------------------------------------------------------
I haven't bothered writing a db class... you could just use PDO

3

我要说的是,如果该站点的规模可能会超过一个很小的规模,那就太好了。主要原因是您将来拥有更好的更改和维护站点的能力,并且维护是大多数项目中的大部分工作。它使您可以将关注点与站点组织很好地分离,并有助于避免重复和混乱的代码。

MVC是一种众所周知的模式,已为网站所接受,如果您将其他人带到项目中,它将很有帮助。为此,您可能希望选择一个已建立的框架来开始。


1

您没有提供任何可能有助于回答问题的细节,但是在这种情况下,我的默认建议是“是的,请使用MVC框架”。仅在确实确定需要定制解决方案时,才使用它。


1

作为一种体系结构,MVC致力于将您的项目/网页分为多个部分。当您必须更改代码或用户界面中的某些内容时,这可以使您的工作变得更轻松。

根据经验,如果您希望项目规范发生变化,尤其是当这些变化影响到整个代码时,请采用强制您将代码分解为小片段的体系结构。


1

现在还不行。等到您的网站变得更大更混乱。您会问自己-我该怎么做才能使事情变得更混乱?您将阅读有关MVC的文章,并且会喜欢它。您将不再质疑是否要使用它。你会知道。那是时候开始使用它了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.