4

似乎标准的 MVC 方法(因为它与 ColdFusion 相关)是制作视图文件 .cfm 并在最终处理视图的 cfc 内部执行 CFINCLUDE。

这会破坏 cfc 的面向对象吗?

这是否会导致 CFML 编译器每次都必须编译视图?

是否有充分的理由不使用 GetContent 方法使视图文件本身成为 cfc?

4

4 回答 4

6

这会破坏 cfc 的面向对象吗?

实现 cfcs 的这种模糊的“面向对象”有点主观。强迫自己进入“一切都必须是对象”将迫使您使用 CF 做一些事情,这会产生额外的开销。我需要一点妥协来确保应用程序快速高效。不要担心实现一些无法定义的“面向对象”目标。制定一个更明确的目标,例如实现 cfcs 的重用,或者封装变更。尝试将视图变成对象不一定能帮助您实现这些目标,因为每个视图都会不同并且可能无法重用。

这是否会导致 CFML 编译器每次都必须编译视图?

Cfms 也被编译和缓存。我有几个由选项卡组成的大型表单,其中每个选项卡都是一个单独的 cfm 文件。在第一次加载时,它们需要几秒钟来编译和显示。在后续加载时,会立即生成并显示选项卡式视图。cfcs 也是如此。

是否有充分的理由不使用 GetContent 方法使视图文件本身成为 cfc?

不久前,我尝试实现自己的框架只是为了学习经验,最后我使用了 cfinclude 方法。根据我的记忆,我发现使用 cfinclude 封装的东西更好,避免了创建对象的繁琐、传递视图所需的参数、担心对象在正确的范围内,并避免了创建视图对象的额外开销。

最后,我想这是您必须尝试自己找出最适合您的情况的方法之一。

于 2009-12-11T17:54:31.653 回答
4

如果您对实现 MVC 感兴趣,您应该查看已经为您做出这些决定的各种 CFML 框架。

试试 ColdBox、ColdFusion on Wheels、Mach-II 或 Model-Glue。或者至少看看他们的源代码,看看他们是如何处理它的。:)

于 2009-12-11T12:48:36.207 回答
1

不要仅仅因为有人建议就盲目地遵循某种模式或方法。查看您的站点的需求并注意您自己的偏好,并着眼于其他人在路上维护代码。

具体来说,我使用 CFC 来封装与 DB 的交互。我遵循 MVC 模式,因为将视图代码与模型代码分开是一个非常好的主意,CFC 是否遵循真正的 OO 规则并不那么重要。

我在很多地方使用 cfincludes 来减少视图层的冗余。

我已经使用自定义框架(我创建了控制器)实现了我的模式的控制器部分,然后变得更聪明并使用了 MachII、Fusebox 和 Model Glue。这些框架中的每一个都支持/鼓励使用 CFC 的视图等,或者更好地说明每个框架都支持良好的设计和关注点分离。

找到好的模式,决定什么对你有用,实施和记录。

于 2011-12-15T18:42:01.940 回答
0

CFInclude 不会通过将其直接耦合到 CFM 来更多地束缚您的 CFC 可移植性。

于 2009-12-11T16:54:47.147 回答