UDFs选用哪个更好:CFC还是CFM

4

CFC 中,我们创建函数。CFC 的工作方式类似于类(OOP)。如果您想使用自己的 UDF,那么最好使用 CFC,然后将其转换为 CFM 对象,并从 CFC 访问这些函数。 - Azam Alvi
谢谢Azam。从理论上讲,这是可以理解的。但是相对于使用CFM文件,使用CFC的实际理由是什么? - Crash OR
2个回答

13

"更好"是主观的。如果一组用户自定义函数(UDF)都适用于您需要在它们之间传递的相同数据,则它们可能应该实现为CFC,以便可以拥有有状态对象,这样数据和方法可以封装在它们自己的内存空间中。

如果它们是纯静态方法,则包含的库文件可能很好。

包含的UDF会单独污染变量范围,而CFC实例中的函数通过一个对象变量访问,因此更加整洁。

如果CFML具有静态方法的概念,我将始终使用CFC,但由于CFML没有静态方法的概念,因此还可以证明函数库以及CFC的使用。

个人来说:我总是使用CFC。它们似乎更有组织性,也更整洁。


包含的udf文件以何种方式污染变量作用域? - Dan Bracuk
丹 - 我认为他的意思是用函数名称(variables.isThisorthat())“混乱”它。 - Mark A Kruger

2

根据我的经验,我更喜欢使用CFC。需要考虑的是,大多数UDF只是实用程序助手,因此只需要创建一次。将它们放在CFC中意味着您可以将它们加载到应用程序范围内并保留CFC实例。UDF仅为应用程序创建一次。此外,您可以使其他CFC扩展此“实用程序” CFC,以便UDF也在那里可用。

现在,对于CFM,每当您包含该模板时,UDF都会再次为该请求创建。这是不必要的额外处理。此外,正如已经提到的,UDF污染变量作用域是偏爱CFC的另一个重要原因。


如果您采用这种方法并向您的 CFC 添加新的 UDF,我认为在重新启动应用程序之前无法使用新的 UDF。 - Dan Bracuk
1
将“util” CFC扩展为除了一些细化表示的实用程序之外的任何内容都是相当糟糕的面向对象编程。我不建议这种做法。 - Adam Cameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接