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

时间:2014-09-02 15:23:31

标签: oop inheritance coldfusion coldfusion-9 cfc

我问了这个previous question关于coldfusion cfcs中的多重继承。现在,我有一个问题,这是否可以模仿cfcs中的多重继承以及可能存在的缺点。

假设我有这4个类: Animal,Horse,Bird,Pegasus

  • 马和鸟是动物的子类。
  • Pegasus是Horse的子类。
  • 然而,Pegasus的飞行方式与Bird的实例相同 上课。

不是在Bird类和Pegasus类中相同地定义fly()两次,我可以在单独的文件中定义它并将其包含在Pegasus和Bird的cfc中吗?这样做有什么缺点吗?

horse.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中多重继承问题的解决方案,我希望关于这是否是一个好的方式的一些反馈。

2 个答案:

答案 0 :(得分:2)

是的,您所描述的内容将起作用,并且是出于各种原因相对频繁使用的技术。

那就是说,当你在这里提出问题时,在你询问它们是否会起作用之前,最好先尝试一下,特别是如果它们很容易尝试。一般来说,当你来这里询问时,你应该将你的问题说成:

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

答案 1 :(得分:1)

请将此视为我刚刚发布到您上一个问题的回复的延续。同样,WireBox已经有一些称为“运行时混合”的功能,类似于你要求的功能。

http://wiki.coldbox.org/wiki/WireBox.cfm#Runtime_Mixins()

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

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

}

您可以拥有多个mixin文件,这可以模拟多重继承。如果你没有发现它直接有用,你至少可以使用它的实现来获得灵感。

完全披露:我是Box库的贡献成员。