我已经使用 Kohana 几个月了,对于组织代码/演示文稿/db-layer 的 MVC 风格仍然相对较新。不幸的是,虽然有很多关于如何创建控制器、建立视图以及通过模型与数据库交互的文档,但我还没有找到很多处理干净和建议的开发模式的资源。
让我举一个简单的例子:
我的最新项目有一个控制器,因为我不确定我是否应该制作更多……或者何时应该制作一个新的。我如何准确地确定何时需要新控制器以及何时需要新模型?
我已经使用 Kohana 几个月了,对于组织代码/演示文稿/db-layer 的 MVC 风格仍然相对较新。不幸的是,虽然有很多关于如何创建控制器、建立视图以及通过模型与数据库交互的文档,但我还没有找到很多处理干净和建议的开发模式的资源。
让我举一个简单的例子:
我的最新项目有一个控制器,因为我不确定我是否应该制作更多……或者何时应该制作一个新的。我如何准确地确定何时需要新控制器以及何时需要新模型?
我建议你先看看面向资源的架构。这不会为您提供有关如何组织代码的任何直接指导。但是,在考虑资源时,在决定是否创建新控制器时会更容易。一旦您设法识别系统中的资源,为它创建一个模型和一个控制器通常是一件好事——尽管这只是一个经验法则。
一些额外的点:
规则拇指如下:当我识别出我的应用程序的一种新的“项目”时。需要管理,我问自己这些问题:
(1) 这类项目应该是持久性的吗?
(2) 这个项目会有很多实例吗?
如果这两个问题的答案都是肯定的,我得出结论,所述项目应该是一个模型(或模型元素或域类,取决于您的 MVC 框架的术语)。当我定义一个新的模型元素时,我还为它定义了一个控制器,它将支持四种基本操作:创建、检索、更新、删除(您的框架可能会为您生成一个默认控制器)。
您可能想要获得 Martin Fowler 的“企业应用程序架构模式”的副本。Web 演示部分广泛讨论了如何在使用前端控制器驱动的框架时构建代码,就像当前的任何 MVC 框架浪潮一样。
我喜欢具有明确定义的功能或一组功能的小型控制器。这通常意味着每个页面(或一组类似页面)一个控制器。在我的 Kohana 站点CSSMySite中,我有 about、blog、contact、css 和 post 控制器。
关于控制器所做的只是设置模板。博客控制器与博客模型交互以列出数据库中的多个帖子。帖子控制器与博客模型交互以显示数据库中的一篇帖子。
每当我有持久的数据(博客文章)或多次使用(下拉框的状态列表)时,它都会进入模型。模型可以被不同的控制器访问,因此它不必是模型到控制器的一对一映射。
也许学习好的 MVC 编程的一个好方法是花一些时间在 Ruby-on-Rails 上。不久前我开始使用 Rails,作为间接结果,我相信我现在对 MVC 有了很好的理解。我将 Rails 视为 MVC 的缩影。至少,这可能是一种学习 MVC 的有趣方式……你会怎么想?
这是我在 Kohana 应用程序中所做的一个示例。
我需要一个“最新消息”部分,所以我设置了一个名为“新闻”的控制器、模型和视图。
我的新闻控制器有方法index()
,feed()
和media_releases()
。
我的模型由数据库查询组成,这些查询从 MySQL 数据库中获取我的新闻数据。
我的观点只是很多 HTML 和一些<?php echo $title; ?>
类似的东西。
您是否有理由不能定义一个通用系统,该系统可以在全球范围内利用数据库元数据?在我看来,通常编写任何代码来访问和显示简单数据都是不必要的冗余。