我问了这个previous question关于coldfusion cfcs中的多重继承。现在,我有一个问题,这是否可以模仿cfcs中的多重继承以及可能存在的缺点。
假设我有这4个类: Animal,Horse,Bird,Pegasus 。
不是在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中多重继承问题的解决方案,我希望关于这是否是一个好的方式的一些反馈。
答案 0 :(得分:2)
是的,您所描述的内容将起作用,并且是出于各种原因相对频繁使用的技术。
那就是说,当你在这里提出问题时,在你询问它们是否会起作用之前,最好先尝试一下,特别是如果它们很容易尝试。一般来说,当你来这里询问时,你应该将你的问题说成:
- 这是我的问题
- 这就是我试过的
- 这是我收到的错误消息
- 我做错了什么?
答案 1 :(得分:1)
请将此视为我刚刚发布到您上一个问题的回复的延续。同样,WireBox已经有一些称为“运行时混合”的功能,类似于你要求的功能。
http://wiki.coldbox.org/wiki/WireBox.cfm#Runtime_Mixins()
基本上,当您使用WireBox创建对象时,您可以在组件上指定一个UDF文件的注释,该文件将作为公共方法添加。
// Via annotation
component mixins="/helpers/base"{
}
您可以拥有多个mixin文件,这可以模拟多重继承。如果你没有发现它直接有用,你至少可以使用它的实现来获得灵感。
完全披露:我是Box库的贡献成员。