我想学习MVC“架构模式”,但是我暂时不想跳进像Rails或Django这样的框架。 我想先理解概念并在我的熟悉环境(PHP / HTML / CSS / MySQL)中编写一些简单的代码。 我不一定需要基于PHP的教程,因为我了解许多不同的语言。而且我不想安装任何框架、API或库。我只想学习如何以MVC的方式思考并将其应用于我的项目。 有什么建议吗?
我想学习MVC“架构模式”,但是我暂时不想跳进像Rails或Django这样的框架。 我想先理解概念并在我的熟悉环境(PHP / HTML / CSS / MySQL)中编写一些简单的代码。 我不一定需要基于PHP的教程,因为我了解许多不同的语言。而且我不想安装任何框架、API或库。我只想学习如何以MVC的方式思考并将其应用于我的项目。 有什么建议吗?
MVC基本上就是将你的代码分成一个处理数据的模型(Model),一个显示数据的视图(View),以及一个将数据从模型传递到视图的控制器(Controller)。
它不需要API或框架,仅仅是一种分离代码的方式。许多框架使用它的原因是它是一个非常简单的概念,适用于许多事情(特别适合网页),而且相当灵活(例如,在Rails中,如果你愿意的话,你可以在视图、模型或控制器中完成所有事情)。
以下是一个Python脚本的快速示例,展示了MVC结构。这并不一定是最佳实践,但它可行且相当简单:
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()
除了Sander的回答外,我想说大多数框架混淆了前端控制器和MVC。它们实际上是两个完全不同的概念,但通常都存在于框架中。所以请注意这一点。
我知道现在已经很晚了,但我相信以后会有人提出同样的问题。
我认为上面的代码示例最好这样写,但你的想法可能不同:
#!/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吧。只需阅读免费书籍,如果你理解了它,你会很快掌握它的。但是,在使用Django之前,你必须了解面向对象编程(OOP)和模型-视图-控制器(MVC)范例,因为Django是基于这些范例构建和使用的。
正如你所看到的,这并不复杂,只是保持代码有序的众多方法之一。