MVC教程不依赖于框架?

时间:2008-09-30 07:37:20

标签: php model-view-controller sample no-framework

我想学习MVC“架构模式”,但我还不想进入像Rails或Django这样的框架。我想首先理解这个概念,然后在我目前熟悉的环境中编写一些简单的代码,恰好是PHP / HTML / CSS / MySQL。我不一定需要一个基于PHP的教程,因为我了解很多不同的语言。我不想安装任何框架或API或库。我只是想学习如何在MVC中思考并将其应用到我的项目中。有什么建议吗?

16 个答案:

答案 0 :(得分:28)

几乎每个框架都以不同的方式执行MVC,因此您可能最终会变得更加困惑。 MVC的一般原则非常简单:“模型是状态;视图对模型作出反应;控制器对视图作出反应;控制器改变模型”。模型,视图和控制器都是概念 - 它们是您认为的任何概念。类,一串类,带有XML配置文件的类的实例,你可以命名它。

我实际上认为这涵盖了基本原则。没有框架,你就不会得到更多。重要的是特定框架如何定义模型,视图和控制器及其交互。

答案 1 :(得分:20)

MVC基本上只是将代码拆分为处理数据的Model,显示数据的View,以及将数据从Model传递给View的Controller。

您不需要API或框架,它只是分割代码的一种方式。许多框架使用它的原因是因为它是一个非常简单的概念,它适用于很多东西(它非常适合网页),而且相当灵活(例如,使用Rails,你可以做所有事情您的视图或模型/控制器,如果您愿意的话......)

python中的一个快速示例,示例MVC结构化Python脚本。不一定是“最佳实践”,但它有效,而且非常简单:

class Model:
    def get_post(self, id):
        # Would query database, perhaps
        return {"title": "A test", "body": "An example.."}

class Controller:
    def __init__(self):
        self.model = Model()
        self.view = View()

    def main(self):
        post = self.model.get_post(1)
        self.view.display(post)

class View:
    def display(self, item):
        print "<h1>%(title)s</h1>\n%(body)s" % item

c = Controller()
c.main()

答案 2 :(得分:17)

最有趣的资源之一是Trygve Reenskaug的original papersWikipedia在MVC上也有很多与语言无关的信息。

答案 3 :(得分:7)

除了Sander的回复,我还说大多数框架会混淆前端控制器 MVC 。它们实际上是两个完全独立的概念,但它们通常都存在于框架中。所以要小心。

答案 4 :(得分:7)

查看this description, example, and diagram that cover the basics of MVC

MVC是简单设计的绝佳设置,但它经常与PAC混淆,后者在MVC上是类似和进一步的开发。这两个设置都很棒,两个链接提供的信息可以帮助他们理解。

答案 5 :(得分:5)

不要问我怎么样,但是我从一个关于设计模式主题的优秀wiki中看到了这个条目:

http://www.c2.com/cgi-bin/wiki?ModelViewController

许多有趣的讨论和各种资源的指示。

我花了六天才找到它!

答案 6 :(得分:4)

试试这篇精彩的文章:The no-framework PHP MVC framework。它不能代替MVC模式的介绍,但它提供了简单实用的示例。

答案 7 :(得分:2)

您可以试试PHP MVC Tutorial。它写得很好,很轻,只包含必需品,你可以在sourceforge上找到代码。

答案 8 :(得分:1)

在我尝试之前,我没有理解MCV模式。如果您熟悉PHP,可以尝试http://cakephp.org,它是一个使用大多数RoR范例的PHP框架。

答案 9 :(得分:1)

MVC的主要优点是关注点分离。当你编写代码时,如果你不小心,它可能会变得很乱。因此,了解如何将模型,视图和控制器放在不同的“孤岛”中可以节省您的长期时间。任何策略都是好的。

所以这是我的:

  • 模型是在项目树中的/ lib下找到的文件
  • views是项目树中以.html结尾的文件
  • 控制器是&lt; form&gt;中的网址行动属性

答案 10 :(得分:1)

知道它已经晚了,但我相信人们会在以后遇到同样的问题。

我认为上面这个非常好的代码示例更好,但YMMV:

#!/usr/bin/python
class Model:
  def get_post(self):
    return {"title":"A test","body":"An example.."}

class View:
  def display(self,items):
    print 'Title:',items['title'],'\n'+'Body:',items['body']

class Controller:
  def __init__(self):
    self.model=Model()
    self.view=View()

  def main(self):
    post=self.model.get_post()
    self.view.display(post)

mvc=Controller()
mvc.main()

这是另一个使用继承的例子,它在python / php中非常有用.....

#!/usr/bin/python3
class Control:
  def find(self,user):
    return self._look(user)

  def _look(self,user):
    if user in self.users:
      return self.users[user]
    else:
      return 'The data class ({}) has no {}'.format(self.userName(),user)

  def userName(self):
    return self.__class__.__name__.lower()

class Model(Control):
  users=dict(one='Bob',two='Michael',three='Dave')

class View():
  def user(self,users):
    print(users.find('two'))

def main():
  users=Model()
  find=View()
  print('--> The user two\'s "real name" is:\n')
  find.user(users)

if __name__=="__main__":
  main()

如果这是有道理的话,现在就去django吧。只需阅读free book,如果这有意义,您将快速浏览它。你的权利虽然你在使用django之前必须能够了解OOP和MVC范例,因为它是通过这些范例构建和使用的。

如您所见,它并不复杂,只是保持代码有序的众多方法之一。

This explains MVC in django

答案 11 :(得分:1)

答案 12 :(得分:0)

答案 13 :(得分:0)

  

This tutorial会带你出发   从建设开始到结束   MVC框架。对象不是soley   生成完成的MVC框架,   虽然那会发生,但是   演示MVC如何工作和一些   背后的概念..

答案 14 :(得分:0)

到目前为止,我见过的最好的MVC教程:http://www.youtube.com/watch?v=Aw28-krO7ZM(第1部分,不要错过其他部分!),代码可以在这里找到:http://jream.com/lab/open-source

一个非常有同情心的人,有一种如何教导事物的感觉。

答案 15 :(得分:0)

对于在搜索中遇到此问题的人来说,有一个关于SitePoint上PHP MVC的优秀初学者教程。

http://www.sitepoint.com/the-mvc-pattern-and-php-1/