不依赖框架的 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 controller 和 MVC。它们实际上是两个完全独立的概念,但它们通常都存在于框架中。所以要小心。
【讨论】:
同意! +1,前端控制器是一种 mvc-ish 模式,主要用于网络。据我所知Rails、ASP.Net MVC、ASP.Net monorail Django之类的都是前端控制器。 也不是给定问题的答案【参考方案3】:MVC 的主要优点是关注点分离。当您编写代码时,如果您不小心,它可能会变得一团糟。因此,从长远来看,知道如何将模型、视图和控制器放在不同的“孤岛”中可以节省您的时间。任何策略都是好的。
所以这是我的:
模型是在项目树的 /lib 下找到的文件 视图是项目树中以 .html 结尾的文件 控制器是【讨论】:
【参考方案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 教程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
.Net框架搭建之2SQL Server MEF依赖注入 MVC Repository框架
.Net框架搭建之2SQL Server MEF依赖注入 MVC Repository框架