【发布时间】:2014-09-02 15:23:30
【问题描述】:
我问过previous question 关于coldfusion cfcs 中的多重继承。现在,我有一个问题,这是否可以模拟 cfcs 中的多重继承以及可能存在的缺点。
假设我有这 4 个类:Animal、Horse、Bird、Pegasus。
- Horse 和 Bird 是 Animal 的子类。
- 飞马是马的一个子类。
- 但是,Pegasus 的飞行方式与 Bird 实例的飞行方式相同 上课。
除了在 Bird 类和 Pegasus 类中定义相同的 fly() 两次之外,我可以在单独的文件中定义它并将其包含在 Pegasus 和 Bird 的 cfc 中吗?这样做有什么缺点吗?
马.cfc
<cfcomponent extends="animal">
<!--- misc functions run, eat, whinny... --->
</cfcomponent>
bird.cfc
<cfcomponent extends="animal">
<cfinclude template="flier.cfm">
<!--- misc functions hop, eat, chirp... --->
</cfcomponent>
pegasus.cfc
<cfcomponent extends="horse">
<cfinclude template="flier.cfm">
</cfcomponent>
flier.cfm
<cffunction name="fly">
<!--- flying action --->
</cffunction>
我已经尝试过这段代码,乍一看,它似乎适用于我想要完成的工作,但由于它不是我之前关于 CFC 中的多重继承问题的提到的解决方案,我想关于这是否是一个好方法的一些反馈。
【问题讨论】:
-
好吧,你试过看看会发生什么吗?看起来您几乎已经设置了示例代码。尽管可能有充分的理由使用另一种设计模式,但我可以确认可以通过 include 混合 UDF。这些 UDF 应该存在于其目标 CFC 的上下文中,并共享它的变量和这个范围。一些框架这样做是为了轻松包含 UDF 库,而不依赖于继承或组合或编织 AOP 方面。
-
嗯,是的,在我在另一个问题上给出(并且您接受)的答案中提到了它。第三段。这里不是你的确切方法,但同样的事情。
-
对于这个特定的示例,将 fly() 函数放入 animal.cfc 似乎是实现目标的一种非常简单的方法。话虽如此,我曾经写过一个 .net 类库,其中我的功能必须可供多个类使用。我使用的方法是创建一个 HelperClasses 的项目。 CF 等效项是创建 cfc 并在您的其他 cfc 中创建对象。但是,这与您在问题中提到的使用 cfinclude 非常相似。
-
我很抱歉,@Adam。我没有意识到这只是你所建议的一个例子。我仍在尝试掌握使用 cfcs 及其最佳实践的窍门。
-
没有问题。如果您可以在编译时间之前定义混合要求(即:在您的源代码中),那么使用包含当然是一种简单的方法。无论如何,我的建议是更多地在运行时进行。
标签: oop inheritance coldfusion coldfusion-9 cfc