2012-07-27 5 views
1

Product-Product.cfc에서 CRUD를 처리하는 간단한 CFC 클래스가 있습니다.CRUD OOP CFC에서 검색어를 어떻게 다시 사용할 수 있습니까?

응용 프로그램을 기반으로 추가 속성을 허용하도록 클래스를 확장합니다. 예를 들어 CartProduct.cfc는 Product.cfc를 확장하여 Quantity 속성을 포함 할 수 있도록합니다. 기본 Product.cfc 클래스에서

, 내가 먼저 ID를 전달하고, 데이터베이스에서 데이터를 검색하기 위해 내 읽기() 메소드의 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 검색하고 읽기() 메소드를 사용하여 다른 테이블에서 수량을 설정 :이 작업을 수행 할 때, 단지 확장 읽기()

<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() 메소드를 호출하여 기본 클래스의 특성을 먼저 설정 한 다음 확장 클래스의 특성을 설정할 수있는 방법을 찾고 있습니다.

이 문제에 대한 의견이 있으십니까?

p.s. 나는 CFQUERYPARAM을 사용하지 않거나 입력을 검증하지 않는다는 것을 안다. 나는이 단순함을 유지하기 위해 그 쓰레기를 남겨 두었으므로 지금 제안하지 말아라.

대신 읽기() 메소드에서 쿼리를 반환하는, 내가 구조체에 쿼리 행을 변환하여 구조체를 반환하고 있습니다 :

답변

1

좋아, 여기에 내가 생각 해낸거야. 그렇게하면 read() 내에서 SUPER.read()를 호출 한 다음 상위 구조체의 키와 값을 모든 수준의 새 구조체에 복사 할 수 있습니다. 조금 더 많은 코드이지만 작업이 완료됩니다.

<cffunction name="read" returntype="Struct" output="false"> 
    <cfscript> 
     var _qData = QueryNew(""); 
     var _properties = SUPER.read(); 
    </cfscript> 

    <cfquery> 
    ... 
    </cfquery> 

    <cfscript> 
     StructAppend(
      _properties, 
      REQUEST.UDFLib.Query.queryRowToStruct(_qData) 
      ); 

     return _properties; 
    </cfscript> 
</cffunction> 
0

"슈퍼"범위를 사용하여 확장 구성 요소를 참조 할 수 있습니다. 따라서 CartProduct.cfc 내에서 Product.cfc의 "read"메소드를 호출하려면 Super.read()를 호출하십시오.

+0

그래, 그게 내가하려는 일이지만, 먼저 다른 유형으로 변환하지 않고도 여러 쿼리 개체를 쉽게 결합 할 수 없다. 아래에서 구조체를 사용하여 내 대답에 설명했듯이. –