MVC教程,不依赖于框架?
我想学习MVC的“架构模式”,但我不想像Rails或Django那样跳入框架。 我想先理解这个概念,然后在我熟悉的环境中编写一些简单的代码,恰好是PHP / HTML / CSS / MySQL。 我不一定需要基于PHP的教程,因为我理解很多不同的语言。 我不想安装任何框架或API或库。 我只想学习如何在MVC中思考并将其应用于我的项目。 有什么build议么?
几乎每个框架都以不同的方式进行MVC,所以最终可能会变得更加困惑。 MVC的一般原理非常简单:“模型是状态,视图对模型反应,控制器反应查看,控制器改变模型”。 模型,视图和控制器是概念 – 它们是你感觉到的任何东西。 类,一堆类,带有XMLconfiguration文件的类的实例,你可以命名它。
其实我觉得这个涵盖基本的原则。 没有一个框架,你不会得到更多。 重要的是一个特定的框架如何定义模型,视图和控制器以及它们的相互作用。
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()
最有趣的资源之一是Trygve Reenskaug的原始论文 。 维基百科在MVC上也有很多与语言无关的信息。
除了Sander的回复,我会说大多数框架混淆了前端控制器和MVC 。 它们实际上是两个完全分离的概念,但它们通常都在框架中出现。 所以小心那个
查看包含MVC基础知识的描述,示例和图表 。
MVC对于简单的devise来说是非常棒的设置,但是它经常与PAC相似,并且在MVC上进一步发展。 这两个设置是伟大的两个链接提供的信息,以帮助他们是可以理解的。
不要问我是怎么做的,但是我从一个出色的维基devise模式的主题中看到了这个条目:
http://www.c2.com/cgi-bin/wiki?ModelViewController
很多有趣的讨论和指向各种资源。
而我只花了六天的时间find它!
尝试这个伟大的文章: 无框架的PHP MVC框架 。 这不是MVC模式介绍的替代品,但它提供了简单和实用的示例。
你可以试试这个PHP MVC教程 。 它写得很好,很轻,只包含要领,你可以在sourceforge上find代码。
MVC的主要优势是关注的分离。 当你写代码的时候,如果你不小心,可能会变成一团糟。 因此,了解如何将模型,视图和控制器置于不同的“孤岛”中可以节省您的时间。 任何战略都是好的。
所以这里是我的:
- 模型是在项目树中的/ lib下find的文件
- 视图是项目树中以.html结尾的文件
- 控制器是在<form>动作属性中的URL
我没有理解MCV模式,直到我尝试了它。 如果您熟悉PHP,则可以尝试http://cakephp.org ,它是一个使用大部分RoR范例的PHP框架。
知道这是晚了,但我相信人们会后来同样的问题。
我觉得上面这个很好的代码实例比较好,但是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()
这里是另一个使用inheritance的例子,它可以在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了。 只要阅读免费的书,如果这是有道理的,你会迅速通过它。 你的权利,虽然你必须能够知道使用Django的OOP和MVC范例,因为它是通过这些范例来构build和使用的。
正如你所看到的那样,这并不复杂,它只是保持你的代码顺序的许多方法之一。
这解释了django中的MVC
以下是一些非特定框架的教程:
- PHP开发人员的MVC原则
- MVCdevise模式
- XML内容的优化展示
- PHP的模型 – 视图 – 控制器(MVC)devise模式
- MVC中的XSLT
- 当MVC成为XForms的负担
- 前进 – betterFORM 6又名'Fore'诞生了 betterFORM
- ColdFusion MX和保险丝盒
- 史蒂文·纳尔逊(Steven Nelson)谈CFC-only保险丝盒
- 用PHP 5进行三层开发
- 如何在Web中使用Python
- 使用MySQL停止编辑网页
- 没有框架的PHP MVC框架
- 超越MVC
- MVC的演变
- 模型 – 视图 – 视图模型和其他分离的表示模式之间的区别
- 萤火虫内部
- Firebug内部II。 – 统一的对象渲染
检查蓬松的猫网站上的非OO MVC
本教程将带您从构buildMVC框架的开始到结束。 这个对象不是完全可以生成完成的MVC框架,尽pipe这会发生,但是为了演示MVC是如何工作的以及它背后的一些概念。
到目前为止,我见过的最好的MVC教程: http : //www.youtube.com/watch?v = Aw28-krO7ZM(第1部分,不要错过其他部分!),代码可以在这里find: http: //jream.com/lab/open-source
一个非常同情的家伙,有一种如何教学的感觉。
对于在search中遇到这个问题的人来说,在SitePoint上有一个很好的PHP MVC初学者教程。