【问题标题】:What's the best way to transition to MVC coding?过渡到 MVC 编码的最佳方式是什么?
【发布时间】:2011-02-20 12:54:36
【问题描述】:

自从我拿起一本 PHP 书籍并开始使用 PHP 编码以来,已经有大约 5 个月的时间了。起初,我在没有任何组织计划或 MVC 的情况下创建了所有站点。我很快就发现那是一种痛苦。 然后我开始在 stackoverflow 上阅读有关如何分离 php 和 html 的内容,这就是我从那以后一直在做的事情。

Ex: 
profile.php <--this file is HTML,css. I just echo the functions here. 
profile_functions.php <--this file is mostly PHP. has the functions.

到目前为止,这就是我分离所有编码的方式,现在我觉得我应该继续前进并开始 MVC。但问题是,我以前从未使用过课程并且对它们很烂。而且由于MVC(如cakephp和codeigniter)都是类,那可不好。

我的问题:有没有什么好书/网站/文章教你如何在 MVC 中编码?我正在寻找初学者初学者书籍:) 我刚开始阅读the codeigniter manuel,我想我会使用它。

编辑:是否可以在不使用 cake、codeigniter 等的情况下为您的编码提供 MVC 组织结构?基本上只是将 profile.php 分成 3 个不同的文件(视图、控制器、模型)

【问题讨论】:

  • 当然,可以在没有框架的情况下以 MVC 方式编写...但是框架会教给您最佳实践,您不必编写所有的管道代码来使其全部工作。

标签: php model-view-controller frameworks


【解决方案1】:

回答你的问题

是否可以有 MVC 编码的组织结构 不使用 cake、codeigniter 等? 基本上只是单独说 profile.php 分成 3 个不同的文件( 视图、控制器、模型)

绝对...

第一个文件 profile.php(视图,浏览器点击了什么)

<?php
include( 'controllers/UsersController.php' );
$controller = new UsersController();
$controller->profile();
$pageData = $controller->data;
?>

控制器

<?php
include 'models/UsersModel.php';
class UsersController{

public $data;
public $model;

public function __construct(){
    $this->model = new UserModel();
}

public function profile(){
    $this->data = $this->model->findUser();
}

}

模型

<?php

class UsersModel{

public function __constuct(){
    // connect to your db or whatever you need to do
}

public function findUser(){
    return mysql_query( "SELECT * FROM users WHERE users.id =  2  LIMIT 1" );
}
}

【讨论】:

    【解决方案2】:

    MVC 只是一种设计模式。这不是你可以“编码”的东西。

    如果你喜欢用 PHP 编写代码,这里有一个article,关于 PHP 中的 MVC。它有一个解释设计模式的概述,然后是一个示例。

    【讨论】:

      【解决方案3】:

      我是通过阅读本教程来学习的:
      http://www.symfony-project.org/jobeet/1_4/Doctrine/en/

      主要重点是学习 Symfony 框架,但默认情况下,您将接触并学习良好的 MVC 原则。

      【讨论】:

      • 是的——但更好——带上它;)
      【解决方案4】:

      这不是 PHP,但看看你能不能得到一份 Tate's Bitter Java 的副本。它将讨论事物的组织方面(组织代码如何以及为什么改进事物)。

      我有点犹豫是否推荐一本用于 PHP 编程的优秀 Java 书籍,但这本书是为数不多的从没有组织计划的情况下编写代码并将其改进为类似 MVC 的结构而不使用第 3 方库。通过这种方式,它从实际的角度教你组织是关于什么的。希望一旦您理解了该模式,将这些想法转化为 PHP 不会太难。

      另一种选择是从几十个 PHP 框架中选择一个并重新编码到框架中。这样做会更快地获得结果,但缺点是您可能会更详细地了解这些结果,并且在您从头开始重写代码后,您的代码行为可能会有所不同。我们都喜欢认为新的东西会做旧的东西所做的一切,但我们经常忘记一些东西(或者它的行为不同)。

      【讨论】:

        【解决方案5】:

        MVC 是一种“通用”设计模式,它并不特定于任何语言。更多的是一种编码哲学。在最基本的层面上,它只是将数据与业务逻辑与表示分离。下面是一个使用 MVC 的“模板”系统的简单示例。您可以在不破坏任何内容的情况下更换任何部分,并且数据与格式/显示无关。这是示例代码,效率不高。

        模型,获取数据:

        function getName($id) {
            $name = array('_first_'=>'Joe', '_last_'=>'Smith', '_mi_'=>'C');
            return $name
        }
        

        控制器,处理它:

        $name = getName(1);
        $name['_fullname_'] = $name['_first_'].' '.$name['_mi_'].'. '.$name['_last_'];
        outputView($name);
        

        查看、输出内容:

        // Example html file: <b>Hello _fullname_, how are you</b>
        function outputView($view, $data) {
            switch ($view) {
            case 'xml':
                 $out = file_get_contents('view.xml');
            case 'html':
                 $out = file_get_contents('view.html');
            case 'json':
                 $out = file_get_contents('view.json');
            }
            $search_for = array_keys($data);
            $replace_with = $data;
            echo str_replace($search_for, $replace_with, $out);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-22
          • 2020-03-03
          • 1970-01-01
          • 2018-02-01
          相关资源
          最近更新 更多