【问题标题】:MVC tutorial that doesn't rely on a framework? [closed]不依赖框架的 MVC 教程? [关闭]
【发布时间】:2010-09-14 04:55:23
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

我实际上认为这涵盖了基本原则。没有框架,您将无法走得更远。重要的是特定框架如何定义模型、视图和控制器及其交互。

【讨论】:

  • 您是否建议我不能在不使用现有框架(如 Rails 或 Django)的情况下,以“MVC”方式重写我的代码?
  • 框架是MVC抽象思想的具体体现。即使您不使用预制框架,您也会在此过程中创建自己的表现形式。
  • 没关系。我只是不想要学习别人的框架的额外包袱。我想要理论,心态。这就是我们过去做CS的方式。我不介意建立一个基本的自定义框架。如果这就是它所需要的,那就这样吧。
  • 不确定我是否理解这如何回答问题。这是否意味着你认为他不能?
  • 我很确定他并没有说他不能,但他说他最终会使用他描述的想法编写自己的“框架”。跨度>
【解决方案2】:

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

【讨论】:

  • 同意! +1,前端控制器是一种 mvc-ish 模式,主要用于网络。据我所知Rails、ASP.Net MVC、ASP.Net monorail Django之类的都是前端控制器。
  • 也不是给定问题的答案
【解决方案3】:

MVC 的主要优点是关注点分离。当您编写代码时,如果您不小心,它可能会变得一团糟。因此,从长远来看,知道如何将模型、视图和控制器放在不同的“孤岛”中可以节省您的时间。任何策略都是好的。

所以这是我的:

  • 模型是在项目树的 /lib 下找到的文件
  • 视图是项目树中以 .html 结尾的文件
  • 控制器是
    动作属性中的 url

【讨论】:

    【解决方案4】:

    MVC 基本上只是将您的代码拆分为一个处理数据的模型、一个显示数据的视图和一个将数据从模型传递到视图的控制器。

    您不需要 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()
    

    【讨论】:

    • 我不确定它到底有多简单。学习一门编程语言对我来说相当简单,一切都与语法有关。但我仍然无法理解事情的底线......我希望能有一个谐音。
    • 理论上MVC看起来很简单,实际上问题从php-syntax和每个框架如何组织类、控制器和视图(有时不同的语言用于视图并与js集成)开始,概述我建议这个article
    【解决方案5】:

    知道已经很晚了,但我相信人们稍后会提出同样的问题。

    我认为上面非常好的代码示例最好这样写但是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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2011-12-16
      • 2012-06-14
      相关资源
      最近更新 更多