不依赖框架的 MVC 教程? [关闭]

Posted

技术标签:

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

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

【问题讨论】:

我刚刚在 GitHub 上发布了一个 "barebone MVC PHP application",正是出于这些学习原因。 【参考方案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

【讨论】:

以上是关于不依赖框架的 MVC 教程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript MVC框架的目的[关闭]

.Net框架搭建之2SQL Server MEF依赖注入 MVC Repository框架

.Net框架搭建之2SQL Server MEF依赖注入 MVC Repository框架

Javascript MVC框架[关闭]

支持 Hyper PHP (HipHop) 的 PHP MVC/ORM 框架 [关闭]

Spring+Spring mvc+Mybatis整合教程(基于Maven)