实用程序类可以是 MVC 框架中的模型类吗?

Posted

技术标签:

【中文标题】实用程序类可以是 MVC 框架中的模型类吗?【英文标题】:Can a utility class be a Model class in a MVC framework? 【发布时间】:2011-03-27 03:05:58 【问题描述】:

我正在设计一个 MVC 框架,但我不知道应该将我的实用程序类放在哪里。我在某处读到它说实用程序类是模型类。这种思路是正确的还是它们是某种不同类型的类?

【问题讨论】:

【参考方案1】:

如果它不是存储数据的表示,那么它可能不是模型类。即使那样,如果它仍然代表某种存储的数据,但行为与您的其他模型完全不同,那么它可能不属于其他模型。

实用程序函数可以是它们作为实用程序的任何类的一部分,无论是模型、视图还是控制器。如果它们更通用一点,那么它们就存在于 MVC 设计的“外部”。

【讨论】:

模型不仅仅是数据库! 你知道,当我第一次开始使用 SO 时,我确实遇到了很多关于模型层在 MVC 中的作用的争论和困惑。过了一段时间,我意识到做 MVC 有很多错误的方法。这是在我开始维护一个以至少三种不同的、糟糕的方式执行 MVC 的旧代码库之后的一段时间。然而,最连贯的一件事是模型对存储的数据对象建模。这并不意味着它只是一个 ORM 层,但他们应该知道他们如何与其他人交互以及如何存储和检索他们的数据。【参考方案2】:

这取决于这些实用程序类在做什么。 MVC 的主要思想是将表示层(V 和 C)与剩余的应用程序(M)分离。如果您的实用程序类处理与表示层相关的事情,请将它们放在适当的包中,例如 ViewHelpers 或 InputHandlers。如果实用程序函数与其他任何内容相关,请查看它们最适合模型中的哪个层,例如 DataAccess Utilities 进入 DAO 包,而 MailHelper 可能进入 Services 包,等等。

【讨论】:

我读过一本书,上面说模型是来自业务层和/或实用程序的类。拥有 ViewHelper 的想法似乎是混合了控制器和视图。你怎么看? @rix501 控制器处理来自 UI 的用户输入并将请求委托给模型。 ViewHelper 不应处理用户输入。主要思想是将视图完成渲染所需的任何逻辑与视图模板分开。你在书中读到的区别是正确的。实用程序这个词只是含糊不清。【参考方案3】:

模型类可以包含您的数据访问代码、应用程序逻辑。所以放在Model里面就可以了。

最好的方法是在Model文件夹中创建一个Utility文件夹,并在其中放置实用程序类。

【讨论】:

以上是关于实用程序类可以是 MVC 框架中的模型类吗?的主要内容,如果未能解决你的问题,请参考以下文章

yii2 basic版 MVC 部分

任何用于打印javax.servlet.http.Cookie的所有字段的实用程序

我应该将 Bootstrap 与 Angular Material 一起用于辅助类吗?

前端最实用全面的工具类方法

Java的SpringMVC框架操作数据库,一定要建立对应的实体类吗,能不能通过直接嵌入sql命令方式操作数据库?

超实用的14个 Spring MVC “隐藏”技巧,用了都说好!