6

我对 MVC 的理解如下(以防它非常错误,我毕竟是新手)

  1. 模型是与数据库交互的东西
  2. 视图是页面的设计/布局
  3. 控制器是一切开始的地方,本质上是页面逻辑

我正在使用CodeIgniter,但我会冒险猜测它不仅限于此,甚至可能仅限于 PHP 框架。

我在哪里放置全球课程?

我可能有一个 Products 模型,然后我运行一个从数据库中收集 20 个产品的查询。我现在是制作 20 个模型还是应该有一个单独的类,如果是后者,我应该把这个类放在哪里(其他控制器也需要使用它)

4

5 回答 5

4

在讨论如何处理产品时,模型是一个错误的词:每个产品都是一个价值对象 (VO)(或数据传输对象/DTO,任何更适合您的词)。值对象通常具有与表相同的字段。在您的情况下 ProductVO 应该具有 Products 表中的字段。

模型是一个数据访问对象 (DAO),它具有类似的方法

findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.

在您的情况下,您将拥有一个具有上述方法的 ProductDAO。然后,此 ProductDAO 将返回 ProductVO 和它们的集合。

数据访问对象还可以返回业务对象 (BO),其中可能包含多个 VO 和特定于业务案例的附加方法。

附录:在您的控制器中,您调用 ProductDAO 来查找您想要的产品。然后将返回的 ProductVO(s) 传递给视图(在 Java 中作为请求属性)。然后视图循环/显示来自 productVO 的数据。

于 2008-09-26T10:08:51.133 回答
3

模型是发生业务逻辑的应用程序的一部分。模型表示对象之间的现实关系和依赖关系,例如:员工向经理报告,经理监督许多员工,经理可以将任务分配给员工,任务在过期时发出通知。模型 CAN 和最常见的 DO 与数据库接口,但这不是必需的。

视图基本上是所有可以显示或帮助显示的东西。视图包含模板、模板对象、处理模板组合和嵌套、用页眉和页脚包装,并以一种众所周知的格式(X/HTML,还有 XML、RSS/Atom、CSV)生成输出。

控制器是将用户操作转换为模型操作的转换层。换句话说,它告诉模型该做什么并返回一个响应。Controller方法尽量小,所有业务处理都在Model中,视图逻辑处理在View中。

现在,回到你的问题。这真的取决于您是否需要为每个产品单独分类。在大多数情况下,一个类就足够了,应该创建它的 20 个实例。由于产品代表业务逻辑,它应该属于应用程序的模型部分。

于 2008-09-26T10:08:54.363 回答
1

CakePHP中还有 3 个“部分”:

  1. 行为
  2. 组件
  3. 帮手

许多模型使用的逻辑应该作为一种行为。我不知道 CodeIgniter 是否有这个逻辑,但如果没有,我会尝试这样实现。您可以在此处阅读有关行为的信息。

(组件帮助控制器共享逻辑,帮助器以同样的方式帮助视图)。

于 2008-09-26T09:53:59.267 回答
1

最简单的方法是:

  1. 每个数据库表都有一个模型类。在这种情况下,它将是一个包含所有产品详细信息的对象。
  2. 将这些类放入包/命名空间,例如 com.company.model (Java / C#)
  3. 将 DAO 类放入像 com.company.model.dao 这样的包中
  4. 您的视图将使用来自会话/请求/控制器的数据。在这种情况下,我将有一个 List<Product>。
  5. 哦,你正在使用 PHP。不知道这会如何改变事情,但我想它有一个集合框架,就像任何现代语言一样。
于 2008-09-26T11:05:44.617 回答
1

@Alexander 提到了 CakePHPs BehaviorsComponentsHelpers。这些对于抽象出通用功能非常有用。我发现行为特别有用,因为大部分业务逻辑都包含在模型中。我目前正在从事一个项目,我们的行为如下:

  • 可锁定
  • 可发布
  • 可标记的
  • 可评价的
  • 可评论的

等等

对于甚至超越 MVC 框架的代码,即代码库,您用于各种与您正在使用的特定框架无关的东西——在我们的例子中,像视频编码类等。CakePHP 有供应商文件夹。

任何与 CakePHP 无关的东西都在里面。

我怀疑 CodeIgniter 的结构没有那么灵活,它比 CakePHP 更小更轻,但快速查看CakePHP 手册,了解 Behaviors、Components、Helper 和 Vendors 文件夹可能会有所帮助。

只在模型中包含一些常见的帮助类保持良好和干燥应该是一件容易的事

于 2008-09-26T12:30:22.953 回答