我有一个简单的 CFC 类来处理产品 - Product.cfc 上的 CRUD。
我正在扩展该类以允许基于应用程序的其他属性 - 例如 CartProduct.cfc 扩展 Product.cfc 以允许包含 Quantity 属性。
在 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() 方法从不同的表中检索和设置数量:
<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 或验证我的输入等。为了简单起见,我把那些废话留了下来,所以现在请不要给我这些建议。