MVC,课程去哪儿了?

Posted

技术标签:

【中文标题】MVC,课程去哪儿了?【英文标题】:MVC, where do the classes go? 【发布时间】:2010-09-13 09:39:59 【问题描述】:

我对 MVC 的理解如下(如果是大错特错,我毕竟是新手)

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

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

我在哪里放置全局类?

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

【问题讨论】:

【参考方案1】:

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

Model 是一个 数据访问对象 (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 的数据。

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

CakePHP 中还有 3 个“部分”:

    行为 组件 帮手

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

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

【讨论】:

【参考方案4】:

最简单的方法是:

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

【讨论】:

【参考方案5】:

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

可锁定 可发布 可标记 可评分 可评论

等等

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

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

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

从你的模型中包含一些常见的帮助类应该是一件容易的事,保持良好和DRY

【讨论】:

以上是关于MVC,课程去哪儿了?的主要内容,如果未能解决你的问题,请参考以下文章

Vue2.5开发去哪儿网App 从零基础入门到实战项目

Vue2.5开发去哪儿网App 从零基础入门到实战项目

Vue2.5开发去哪儿网App 从零基础入门到实战项目

React劲爆新特性Hooks 重构去哪儿网火车票PWA

React劲爆新特性Hooks 重构去哪儿网火车票PWA云资源

去哪儿网怎么沦为骗子的平台了,一步步揭开去哪儿网欺骗消费者的把戏