Coldfusion 为什么我们需要创建CFC的实例?

Coldfusion 为什么我们需要创建CFC的实例?,coldfusion,Coldfusion,我正在使用CreateObject()方法创建一个CFC实例,然后与这个新创建的“实例”交互。我这样做是因为这似乎是怎么做的,但我不明白我们为什么要这样做 为什么我们不能直接与CFC交互,而不是创建它的实例呢?CFC只是一个包含一些代码的文件,因此建议与它“交互”没有什么意义,就像您可能建议与CFM文件“交互”而不必对其进行-ing或类似操作一样 CFC定义了一个组件,要使用一个组件,需要创建它的一个实例。在一些语言中,比如Java,可以有静态属性和方法,可以通过类而不是对象来访问它们,但是CF

我正在使用
CreateObject()
方法创建一个CFC实例,然后与这个新创建的“实例”交互。我这样做是因为这似乎是怎么做的,但我不明白我们为什么要这样做


为什么我们不能直接与CFC交互,而不是创建它的实例呢?

CFC只是一个包含一些代码的文件,因此建议与它“交互”没有什么意义,就像您可能建议与CFM文件“交互”而不必对其进行
-ing或类似操作一样


CFC定义了一个组件,要使用一个组件,需要创建它的一个实例。在一些语言中,比如Java,可以有静态属性和方法,可以通过类而不是对象来访问它们,但是CFML没有这个概念。CFC定义用作对象的组件,就像在其他语言中一个类定义什么是对象一样,要使用对象,首先需要创建对象的实例。

我希望您已经阅读了OOPs及其实践。CFC是您的“蓝图”(比如汽车设计),对象是您自己的数据模型(比如蓝色汽车(设置颜色的方法)、充氮轮胎(设置轮胎压力的方法)和液化石油气(燃料类型的方法))。CF允许您直接与CFC交互(CFINVOKE),您不必每次都创建一个实例,但它只说明您不想每次更改汽车配置时都去车间/设计实验室。

您可以使用CFINVOKE直接调用CFC。您只需要认识到cfinvoke首先创建cfc的对象,然后执行您调用的方法。此外,一旦调用了该方法,对象就不再可用

如果您的.cfm页面只打算使用组件的一种方法,那么cfinvoke是可以的,因为您可以编写的代码更少。但是,如果使用两个或多个对象,则效率较低,因为每次都必须创建一个新对象


换句话说,虽然您不必首先创建cfc的实例,但这样做通常是一个好主意。

我想我的意思是,当您可以直接使用
调用实例时,为什么要创建实例
CreateObject()相同
更友好、更直观的语法如果您在一个页面上多次调用该组件,那么每次创建该组件都是在浪费资源。@volumeone
仍然会创建一个实例,但使用后会立即丢弃它。使用
createObject()
new
的另一个好处是,对于那些不太熟悉以标记为中心的CFML执行这些操作的某些方式的人来说,代码看起来不会那么奇怪。IE:
是一种非常奇怪的调用对象方法的方式,与
myResult=myObj.myMethod()
@AdamCameron相比,你如何向CFC提交表单?是否所有表单都必须提交回CFM模板,然后该模板执行CreateObject()并将表单变量作为参数提交?目前,我在表单的action属性中直接向CFC提交。是的,我正在阅读CF面向对象编程。我有点明白了。若我提供咖啡(coffe.cfc),那个么每个想要咖啡的人都会得到一个coffe.cfc的实例。但每个人也可以喝同一杯咖啡,这有点像每次提出请求时都告诉申请人要咖啡。所以它是一种抽象类型的东西,不直接与CFC交互?是否有任何显著的绩效改进?你正在取得进展:)除了每个人都有自己的咖啡口味。有人想要不加牛奶的,有人想要牛奶的,少加糖/多加糖等等。就抽象而言,用户不必担心厨房里的流程是什么。正如@Dan Bracuk在他的回答中所说的,每次制作一个新的咖啡壶都是低效的。相反,装满罐子,根据需要提供咖啡,添加牛奶、糖、奶油等。因此创建实例将节省每次创建对象和使用单一方法的开销。要添加,CF并不完全是OOPs。它仍然没有遵循OOP的所有原则(我想到了多态性),但现在它变得越来越近了。这是一个完全正确的问题,但你是先做的吗?似乎回答了你的问题。我做了搜索,但搜索词不同。谢谢你。是的,有时候会这样。很高兴这个链接很有用。你将如何向CFC提交表格?是否所有表单都必须提交回CFM模板,然后该模板执行CreateObject()并将表单变量作为参数提交?目前,我在FormI的“不向CFC提交表格”的“操作”属性中直接向CFC提交表格。在收到表格帖子时,我很少看到需要cfc。在我工作的地方,我们认为cfc主要是创建可重用代码的另一种选择。其他用途是web服务和ajax调用。