一直难以理解mvc,能否给个没有使用 第三方框架的 php mvc 演示代码?

foxidea 发布于 2011/09/06 16:27
阅读 1K+
收藏 1
一直难以理解mvc,能否给个没有使用 第三方框架的 php mvc 演示代码?
加载中
0
mallon
mallon
MVC是水平划分的,我更喜欢垂直划分
iceteea
iceteea
MVC只是一种工具而已,目的是为了解耦罢了,即使有人用MVC,也可能是垂直划分,水平划分,我的理解是对系统功能的抽象,提高可用性,不再重复开发。
mallon
mallon
回复 @Susanno : 倒退了吗?MVC还没有一统天下吧
iceteea
iceteea
你的想法促使了软件开发的倒退!
0
Binny
Binny

引用来自“mallon”的答案

MVC是水平划分的,我更喜欢垂直划分

MVC的是解决 人机交互 的一种设计模式, 核心的理念将 界面展示(View) 和业务处理(Model)剥离开,通过一个控制器(Controller)来控制 界面和业务处理之间联系。

通过MVC,可以让程序获得极大的灵活性、可维护性和可重用性。

大部分应用涉及到人机交互,都离不开MVC。理解这个应该不难~~

 

MVC是水平划分? 那垂直划分是什么思路?

0
BENNEE
BENNEE

一般的流程就是,连接数据库,查询数据库,循环输出html结果。

<?php   
mysql_connect(…);   
$result = mysql_query('select * from news order by article_date desc');   
?>   

<html>   
    <body>   
        <h1>News Articles</h1>         
      <?php while ($row = mysql_fetch_object($result)) { ?>   
                <h2><?php echo $row->headline ?></h2>              
                <p>   
                    <?php echo $row->body ?>   
                </p>   
      <?php } ?>   
    </body>   
</html>

采用MVC方式则如下。

model:

<?php      
function get_articles()   
{   
    mysql_connect(…);    
    $result = mysql_query('select * from news order by article_date desc');    
    $articles = array();   
    while ($row = mysql_fetch_objects($result)) {   
        $articles[] = $row;    
    }   
return $articles;   
}   
?>

controller:

<?php   
$articles = get_articles();    
display_template('articles.tpl');   
?>

view:

<html>   
<body>   
<h1>News Articles</h1>   
        <?php foreach ($articles as $row) { ?>   
        <h2><?php echo $row->headline ?></h2>              
            <p>   
                <?php echo $row->body ?>   
            </p>           
        <?php } ?>     
</body>   
</html>


原文:http://www.nowamagic.net/php/php_ShowSimpleMvc.php

0
mallon
mallon

引用来自“Binny”的答案

引用来自“mallon”的答案

MVC是水平划分的,我更喜欢垂直划分

MVC的是解决 人机交互 的一种设计模式, 核心的理念将 界面展示(View) 和业务处理(Model)剥离开,通过一个控制器(Controller)来控制 界面和业务处理之间联系。

通过MVC,可以让程序获得极大的灵活性、可维护性和可重用性。

大部分应用涉及到人机交互,都离不开MVC。理解这个应该不难~~

 

MVC是水平划分? 那垂直划分是什么思路?

垂直划分就是按照软件的功能模块划分,例如XX管理一块、XX统计一块,然后每个模块落实到人头上,随他用MVC还是CVM还是什么模式开发。

你讲的水平划分最大的缺点就是如果Model层有变化,会导致View的大改动,如果多人开发,有得扯皮呢

mallon
mallon
@何平 : 各人改各自负责的,我偏向于这样做,但也不绝对,看实际需要
何平
何平
可是如果按你说的,有些功能是无法实现复用的...如果功能上有改动,会水平的去改很多地方 ...比如说,我一个数据表的结构改了.
0
OSC老司机
OSC老司机

引用来自“摇滚21”的答案

一般的流程就是,连接数据库,查询数据库,循环输出html结果。

<?php   
mysql_connect(…);   
$result = mysql_query('select * from news order by article_date desc');   
?>   

<html>   
    <body>   
        <h1>News Articles</h1>         
      <?php while ($row = mysql_fetch_object($result)) { ?>   
                <h2><?php echo $row->headline ?></h2>              
                <p>   
                    <?php echo $row->body ?>   
                </p>   
      <?php } ?>   
    </body>   
</html>

采用MVC方式则如下。

model:

<?php      
function get_articles()   
{   
    mysql_connect(…);    
    $result = mysql_query('select * from news order by article_date desc');    
    $articles = array();   
    while ($row = mysql_fetch_objects($result)) {   
        $articles[] = $row;    
    }   
return $articles;   
}   
?>

controller:

<?php   
$articles = get_articles();    
display_template('articles.tpl');   
?>

view:

<html>   
<body>   
<h1>News Articles</h1>   
        <?php foreach ($articles as $row) { ?>   
        <h2><?php echo $row->headline ?></h2>              
            <p>   
                <?php echo $row->body ?>   
            </p>           
        <?php } ?>     
</body>   
</html>


原文:http://www.nowamagic.net/php/php_ShowSimpleMvc.php

nice

0
Jewel_M
Jewel_M

引用来自“摇滚21”的答案

一般的流程就是,连接数据库,查询数据库,循环输出html结果。

<?php   
mysql_connect(…);   
$result = mysql_query('select * from news order by article_date desc');   
?>   

<html>   
    <body>   
        <h1>News Articles</h1>         
      <?php while ($row = mysql_fetch_object($result)) { ?>   
                <h2><?php echo $row->headline ?></h2>              
                <p>   
                    <?php echo $row->body ?>   
                </p>   
      <?php } ?>   
    </body>   
</html>

采用MVC方式则如下。

model:

<?php      
function get_articles()   
{   
    mysql_connect(…);    
    $result = mysql_query('select * from news order by article_date desc');    
    $articles = array();   
    while ($row = mysql_fetch_objects($result)) {   
        $articles[] = $row;    
    }   
return $articles;   
}   
?>

controller:

<?php   
$articles = get_articles();    
display_template('articles.tpl');   
?>

view:

<html>   
<body>   
<h1>News Articles</h1>   
        <?php foreach ($articles as $row) { ?>   
        <h2><?php echo $row->headline ?></h2>              
            <p>   
                <?php echo $row->body ?>   
            </p>           
        <?php } ?>     
</body>   
</html>


原文:http://www.nowamagic.net/php/php_ShowSimpleMvc.php

一直对M和C不是很理解,经常混用,这回算是理解透了!

0
宏哥
宏哥

引用来自“Mallon”的答案

MVC是水平划分的,我更喜欢垂直划分

功能划分是正确的, 就是 By Use Case

我只用 C V: 一个C 代表一个Use Case.

C:


public function action_index(){
        $_page = new UTL('user/index');
        $_sql = 'select * from v_user where '.Cms_DB::getCURTreeSql($this->user, true,'role_id','id');

        if(isset($_GET['name'])){
            $_filter = DB::quote($_GET['name'].'%');
            $_sql .= ' and username like '.$_filter;
            $_page->name = $_GET['name'];
        }


        Cms_DB::getPage($_sql,$_page,'id desc','users');
        return $this->content($_page);
    }
V:



{if:users}
<div class="bPageBlock">
<table>
    <thead>
        <tr class="headerRow"><th>User Name</th><th>Profile</th><th>Role</th><th>Language</th><th>Cms Auth</th><th>Action</th></tr>
    </thead>
    <tbody>
        {foreach:users,$user}
        <tr class="dataRow"><td>{$user.username}</td>
            <td><a href="{base_url}user/profile/{$user.profile_id}">{$user.profile_name}</a></td>
            <td><a href="{base_url}user/role/{$user.role_id}">{$user.role_name}</a></td>
            <td>{$user.language}</td>
            <td >{if:$user.activated==DB::T}<a class="ajax-linkreload" href="{base_url}user/deactivate/{$user.id}">Deactivate</a>{else} <a class="ajax-linkreload" href="{base_url}user/activate/{$user.id}">Activate</a>{end}</td>
            <td><a class="ajax-linkwarn" href="{base_url}user/resp/{$user.id}">Reset User Password</a>
                <a href="{base_url}user/set/{$user.id}">Edit</a></td>
        </tr>
        {end}
    </tbody>
</table>
{end}
<div>
    {if:isset(pagination)}
    {pagination}
    {end}
</div>


返回顶部
顶部