更新: railoにはこの問題はまったくないようです。
更新:人々がこの質問の「大きなコンポーネントを分割するより良いアイデアを持っていますか」という部分(私が決して入れるべきではなかった)全体にもっと焦点を合わせていると感じているので、私はこの問題を閉じることに投票していますcfcomponent で cfincludes を使用する方法。
注:これは、アイデアを理解するために私がやろうとしていることの単純化された例です。
私が抱えている問題は、cfcomponent 内で cfinclude を使用して、同様のメソッドを別のファイルにグループ化し、管理しやすくしたいということです。私が直面している問題は、以下に示すように、cfinclude を使用してそのメソッドを管理する別のコンポーネントを拡張しようとしたときです。ComponentA は ComponentB を拡張することに注意してください。
ComponentA
==========
<cfcomponent output="false" extends="componentb">
<cfinclude template="componenta/methods.cfm">
</cfcomponent>
componenta/methods.cfm
======================
<cffunction name="a"><cfreturn "componenta-a"></cffunction>
<cffunction name="b"><cfreturn "componenta-b"></cffunction>
<cffunction name="c"><cfreturn "componenta-c"></cffunction>
<cffunction name="d"><cfreturn super.a()></cffunction>
ComponentB
==========
<cfcomponent output="false">
<cfinclude template="componentb/methods.cfm">
</cfcomponent>
componentb/methods.cfm
======================
<cffunction name="a"><cfreturn "componentb-a"></cffunction>
<cffunction name="b"><cfreturn "componentb-b"></cffunction>
<cffunction name="c"><cfreturn "componentb-c"></cffunction>
問題は、ComponentA を初期化しようとすると、「ルーチンを複数回宣言することはできません。ルーチン a が異なるテンプレートで 2 回宣言されています」というエラーが表示されることです。
これの全体的な理由は、cfinclude を使用すると、COMPILE TIME ではなく RUN TIME で評価されるためです。
メソッドをコンポーネント自体に移動し、cfinclude の使用を排除する以外に、どうすればこれを回避できますか、または誰かが大きなコンポーネントを分割するより良いアイデアを持っていますか?