Oop 我是否可以在单独的文件中定义函数,然后将它们包含在多个cfc';是模仿多重继承吗?

Oop 我是否可以在单独的文件中定义函数,然后将它们包含在多个cfc';是模仿多重继承吗?,oop,inheritance,coldfusion,coldfusion-9,cfc,Oop,Inheritance,Coldfusion,Coldfusion 9,Cfc,我问了这个关于coldfusion cfcs中的多重继承的问题。现在,我有一个问题,这是否可以模拟CFC中的多重继承,以及缺点是什么 假设我有这4类:动物,马,鸟,飞马 马和鸟是动物的亚类 飞马是马的一个亚类 然而,飞马座的飞行方式与鸟类的飞行方式相同 班上有 我可以在单独的文件中定义fly()并将其包含在Pegasus和Bird的cfc中,而不是在Bird类和Pegasus类中相同地定义两次fly()?这样做有什么缺点吗 horse.cfc <cfcomponent exte

我问了这个关于coldfusion cfcs中的多重继承的问题。现在,我有一个问题,这是否可以模拟CFC中的多重继承,以及缺点是什么

假设我有这4类:动物,马,鸟,飞马

  • 马和鸟是动物的亚类
  • 飞马是马的一个亚类
  • 然而,飞马座的飞行方式与鸟类的飞行方式相同 班上有
我可以在单独的文件中定义fly()并将其包含在Pegasus和Bird的cfc中,而不是在Bird类和Pegasus类中相同地定义两次fly()?这样做有什么缺点吗

horse.cfc

    <cfcomponent extends="animal">
       <!--- misc functions run, eat, whinny... --->
    </cfcomponent>

伯德

<cfcomponent extends="animal">
<cfinclude template="flier.cfm">
       <!--- misc functions hop, eat, chirp... --->
</cfcomponent>

飞马座

<cfcomponent extends="horse">
<cfinclude template="flier.cfm">
</cfcomponent>

flier.cfm

<cffunction name="fly">
<!--- flying action --->
</cffunction>


我已经尝试过这段代码,乍一看,它似乎对我想要完成的目标有效,但由于这不是我之前关于CFC中多重继承问题的解决方案,我希望得到一些反馈,看看这是否是一个好方法。是的,您所描述的将起作用,并且是一种由于各种原因而相对频繁使用的技术

也就是说,当你在这里问问题时,在你问这些问题是否可行之前,尝试一些事情,特别是如果它们很容易尝试的话,是符合你最大利益的。一般来说,当你来这里提问时,你应该将你的问题表述为:

  • 这是我的问题
  • 这就是我尝试过的
  • 这是我收到的错误信息
  • 我做错了什么

这是我刚才对你最后一个问题的回答的继续。同样,WireBox已经有了一些称为“运行时混合”的功能,这与您所要求的类似

基本上,当您使用WireBox创建对象时,您可以在组件上为UDF文件指定注释,该文件将作为公共方法添加

// Via annotation
component mixins="/helpers/base"{

}
您可以有多个mixin文件,这模拟了多重继承。如果您觉得它没有直接的用处,那么至少可以使用它的实现来获得灵感


充分披露:我是盒子图书馆的贡献者

好吧,你试过看会发生什么吗?看起来您基本上已经设置了示例代码。尽管使用另一种设计模式可能有很好的理由,但我可以确认,可以通过include在udf中进行混合。这些UDF应生活在其目标CFC的环境中,并共享其变量和范围。有些框架这样做是为了方便地包含UDF库,而不依赖继承、组合或编织AOP方面。第三段。这里不是您的确切方法,而是相同的方法。对于这个特定的示例,将fly()函数放在animal.cfc中似乎是实现目标的一种非常简单的方法。话虽如此,我曾经写过一个.net类库,其中的功能必须可供多个类使用。我使用的方法是创建一个HelperClass项目。CF等价物是创建cfc并在其他cfc中创建对象。然而,这与您在问题中提到的使用cfinclude非常相似。我很抱歉,@Adam。我不知道这只是你建议的一个例子。我仍在努力掌握使用氟氯化碳的窍门和它们的最佳实践。没问题。如果可以在编译前(即:在源代码中)定义混合需求,那么使用include肯定是一种简单的方法。无论如何,我的建议是在运行时做得更多。我道歉。我确实试过了,到目前为止,它似乎确实能满足我的需求。然而,由于没有人提到这是我之前的选择,我只是想知道这是一个实际的选择,还是我只是在给自己挖一个洞。我不认为简单地将它附加到我的原始问题中是正确的,因为我认为这是一个单独的问题。我编辑了我的问题以试图澄清。我感谢你的意见。