我問這個previous question有關coldfusion cfcs中的多繼承。現在,我有一個問題,這是否會模仿cfcs中的多重繼承,以及可能的缺點。我可以在一個單獨的文件中定義函數,然後將它們包含在多個cfc中以模擬多重繼承嗎?
假設我有這4個類:動物,馬,鳥,飛馬。
- 馬和鳥是動物的子類。
- 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中多重繼承問題的解決方案,所以我希望得到一些反饋意見這是否是一個好方法。
那麼,你有沒有試過看看會發生什麼?它看起來像你有很多樣本代碼設置。雖然可能有很好的理由使用另一種設計模式,但我可以確認可以通過include來混合使用UDF。這些UDF應該放在目標CFC的環境中,並分享它的變量和範圍。有些框架可以輕鬆包含UDF庫,而不依賴於繼承或組合或編織AOP方面。 – 2014-09-02 15:33:58
嗯,是的,*在我給出的答覆(並且你接受了另一個問題)中提到了。第三段。這裏不是你確切的方法,但同樣的事情。 – 2014-09-02 16:04:19
對於這個特定的例子,將fly()函數放入animal.cfc中似乎是實現您的目標的一種非常簡單的方法。話雖如此,我曾經寫過一個.net類庫,其中我必須具有可供多個類使用的功能。我使用的方法是創建一個HelperClasses項目。 CF等價物將創建cfc並在您的其他cfc中創建對象。但是,這與使用cfinclude非常類似,就像您在問題中提到的那樣。 – 2014-09-02 16:41:06