我想学习MVC“架构模式”,但我还不想进入像Rails或Django这样的框架。我想首先理解这个概念,然后在我目前熟悉的环境中编写一些简单的代码,恰好是PHP / HTML / CSS / MySQL。我不一定需要一个基于PHP的教程,因为我了解很多不同的语言。我不想安装任何框架或API或库。我只是想学习如何在MVC中思考并将其应用到我的项目中。有什么建议吗?
答案 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 papers。 Wikipedia在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的主要优点是关注点分离。当你编写代码时,如果你不小心,它可能会变得很乱。因此,了解如何将模型,视图和控制器放在不同的“孤岛”中可以节省您的长期时间。任何策略都是好的。
所以这是我的:
答案 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范例,因为它是通过这些范例构建和使用的。
如您所见,它并不复杂,只是保持代码有序的众多方法之一。
答案 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的优秀初学者教程。