似乎标准的 MVC 方法(因为它与 ColdFusion 相关)是制作视图文件 .cfm 并在最终处理视图的 cfc 内部执行 CFINCLUDE。
这会破坏 cfc 的面向对象吗?
这是否会导致 CFML 编译器每次都必须编译视图?
是否有充分的理由不使用 GetContent 方法使视图文件本身成为 cfc?
似乎标准的 MVC 方法(因为它与 ColdFusion 相关)是制作视图文件 .cfm 并在最终处理视图的 cfc 内部执行 CFINCLUDE。
这会破坏 cfc 的面向对象吗?
这是否会导致 CFML 编译器每次都必须编译视图?
是否有充分的理由不使用 GetContent 方法使视图文件本身成为 cfc?
这会破坏 cfc 的面向对象吗?
实现 cfcs 的这种模糊的“面向对象”有点主观。强迫自己进入“一切都必须是对象”将迫使您使用 CF 做一些事情,这会产生额外的开销。我需要一点妥协来确保应用程序快速高效。不要担心实现一些无法定义的“面向对象”目标。制定一个更明确的目标,例如实现 cfcs 的重用,或者封装变更。尝试将视图变成对象不一定能帮助您实现这些目标,因为每个视图都会不同并且可能无法重用。
这是否会导致 CFML 编译器每次都必须编译视图?
Cfms 也被编译和缓存。我有几个由选项卡组成的大型表单,其中每个选项卡都是一个单独的 cfm 文件。在第一次加载时,它们需要几秒钟来编译和显示。在后续加载时,会立即生成并显示选项卡式视图。cfcs 也是如此。
是否有充分的理由不使用 GetContent 方法使视图文件本身成为 cfc?
不久前,我尝试实现自己的框架只是为了学习经验,最后我使用了 cfinclude 方法。根据我的记忆,我发现使用 cfinclude 封装的东西更好,避免了创建对象的繁琐、传递视图所需的参数、担心对象在正确的范围内,并避免了创建视图对象的额外开销。
最后,我想这是您必须尝试自己找出最适合您的情况的方法之一。
如果您对实现 MVC 感兴趣,您应该查看已经为您做出这些决定的各种 CFML 框架。
试试 ColdBox、ColdFusion on Wheels、Mach-II 或 Model-Glue。或者至少看看他们的源代码,看看他们是如何处理它的。:)
不要仅仅因为有人建议就盲目地遵循某种模式或方法。查看您的站点的需求并注意您自己的偏好,并着眼于其他人在路上维护代码。
具体来说,我使用 CFC 来封装与 DB 的交互。我遵循 MVC 模式,因为将视图代码与模型代码分开是一个非常好的主意,CFC 是否遵循真正的 OO 规则并不那么重要。
我在很多地方使用 cfincludes 来减少视图层的冗余。
我已经使用自定义框架(我创建了控制器)实现了我的模式的控制器部分,然后变得更聪明并使用了 MachII、Fusebox 和 Model Glue。这些框架中的每一个都支持/鼓励使用 CFC 的视图等,或者更好地说明每个框架都支持良好的设计和关注点分离。
找到好的模式,决定什么对你有用,实施和记录。
CFInclude 不会通过将其直接耦合到 CFM 来更多地束缚您的 CFC 可移植性。