製品のCRUDを処理する単純なCFCクラス(Product.cfc)があります。
アプリケーションに基づいて追加のプロパティを許可するようにクラスを拡張しています。たとえば、CartProduct.cfcは、Quantityプロパティを含めることができるようにProduct.cfcを拡張しています。
Base Product.cfcクラスでは、最初にIDを渡し、read()メソッドでそのIDを使用して、データベースからデータを取得します。
<cffunction name="read" returntype="Query">
<cfquery name="qData" datasource="mydb">
SELECT description
FROM mySKUTable
WHERE id = '#VARIABLES.Sku#'
</cfquery>
<cfreturn qData />
</cffunction>
<cffunction name="setSku" returntype="Product">
<cfargument name="Sku" type="String" required="true" />
<cfscript>
var qData = QueryNew("");
VARIABLES.Sku = ARGUMENTS.Sku;
qData = read();
VARIABLES.description = qData.description;
</cfscript>
</cffunction>
CartProduct.cfcでこれを拡張して、read()メソッドを使用して別のテーブルからQuantityを取得および設定したいと思います。
<cffunction name="read" returntype="Query">
<cfquery name="qData" datasource="mydb">
SELECT quantity
FROM myCartTable
WHERE id = '#VARIABLES.Sku#'
</cfquery>
<cfreturn qData />
</cffunction>
<cffunction name="setSku" returntype="Product">
<cfargument name="Sku" type="String" required="true" />
<cfscript>
var qData = QueryNew("");
THIS = SUPER.setSku(Sku);
qData = read();
VARIABLES.quantity = qData.quantity;
</cfscript>
</cffunction>
これを行うと、拡張read()のみが呼び出されます。これは問題ありません、これは設計どおりです。ただし、両方のread()メソッドを呼び出す方法を探しているので、最初に基本クラスでプロパティを設定し、次に拡張クラスでプロパティを設定できます。
これについて何か考えはありますか?
ps CFQUERYPARAMを使用していない、または入力を検証していないことなどを知っています。これを単純にするために、そのがらくたを残しました。そのため、今はそれらの提案をしないでください。