2012-09-25 1 views
3

응용 프로그램간에 ColdFusion ORM 객체를 재사용 할 수 있습니까?응용 프로그램간에 ColdFusion ORM 엔티티/객체를 재사용 하시겠습니까?

예를 들어 app1이라는 폴더에 app1이라는 ORM 사용 응용 프로그램을 설정합니다.

<cfcomponent> 
<cfset this.name = "app1"> 
<cfset this.ormenabled = "true"> 
<cfset this.ormSettings = { 
    datasource = "myDS", 
    schema = "mySchema", 
    dialect = "Oracle10g", 
    logSQL = "false" 
}> 

내가로드하고 CFM 파일에서 내용을 덤프 수 있습니다 :

<cfset item = EntityLoad("department")> 
<cfdump var="#item#"> 

그럼 내가 동일한 설정 나는 부서 데이터베이스 테이블에 해당하는 department.cfc을 생성 app2라는 폴더에 app2라는 ORM 사용 응용 프로그램이 있습니다. 이 시스템은 시도한

은을 사용하기 :

<cfcomponent persistent="true" extends="my.path.app1.department"> 
</cfcomponent> 

내가로드하고 내용을 덤프하려고, 나는 오류가 발생 : 나는 APP1에 department.cfc을 확장 거기 department.cfc을 생성 코드 또는 일부 시스템 코드에서 일반적으로 프로그래밍 오류를 나타내는 정의되지 않은 값입니다. Null 포인터는 정의되지 않은 값의 또 다른 이름입니다.

경로가 올바른지 확인했습니다. 예 : 나는 CreateObject를 사용하여 객체를 생성 할 수 있었다 : 나는 하나의 CFC를 참조하여 객체를 다시 사용할 수 있습니다 바라고

<cfset item = CreateObject("component","my.path.app1.department")> 
<cfdump var = "#item#"> 

을하지만, 내가 뭔가를 누락하지 않는 한이해야 할 수도 있습니다 것 같습니다 app2에서 개체를 다시 만듭니다.

+0

동일한 인스턴스를 가져 오거나 동일한 cfc를 인스턴스화하려고합니까?두 경우 모두 두 응용 프로그램 내에서 엔티티의 메타 데이터를 정의하지 않고 별도의 응용 프로그램 내에서 동일한 엔티티를 ORM 관점에서 재사용 할 수 없습니다. 같은 데이터 소스/엔티티 매핑을 사용하면서 application.cfc를 확장하는 라이브러리를 가질 수 있습니다. – AlexP

+0

동일한 코드로 여러 개의 CFC를 사용하는 것이 중복 될 것이라고 생각하여 동일한 CFC를 인스턴스화하려고합니다. ORM 라이브러리 앱에 대한 귀하의 생각을 좋아합니다. – cherdt

답변

1

CFC (엔터티)는 각각 고유 한 ORM을 사용하는 두 개의 별개의 응용 프로그램에서 인스턴스화 할 수 있습니다. 서버의 중앙 위치에 이들을 배치하고 응용 프로그램 별/전역 파일 매핑을 작성한 다음 새 인스턴스를 작성할 수 있습니다. 그러나 가장 편리한 방법은 application.cfc 내의 "this.ormSettings"변수를 통해 모든 것을 한 곳에서 수행 할 수 있기 때문입니다. 예를 들어

:

component displayname="Application" 
    { 
     this.ormSettings = { 
      cfclocation = [ 
       "/full/path/to/cfc/directory", 
       "Entity", 
       "https://stackoverflow.com/a/relative/path" 
      ] 
     }; 

     this.mappings["/Entity"] = "full/dir/path/to/another/cfc/directory/called/whatever"; 

    } 

이 위치의 각

는 다른 디렉토리 전에 일치하는 CFC를 검색되므로, 명시 적으로 정의하여 잠재적 인 성능 혜택도있다.

+0

감사합니다 알렉스 - 이것은 나가 찾고 있던 무엇을 정확하게이다! – cherdt

0

AlexP가 말한 것처럼 여러 응용 프로그램에서 동일한 "모델"또는 ORM 엔터티 CFC 집합을 사용할 수 있으므로 매핑을 통해 액세스 할 수 있습니다.

그러나 상속은 ORM에서 약간 다르게 작동합니다. 영속적 인 CFC는 다른 영속적 인 CFC를 확장 할 수 없습니다 (적어도 CF9에는 포함되지 않습니다). 대신 부모 CFC는 "수퍼 클래스 매핑 된"으로 표시되어야하며 persistent 속성은 false로 설정되거나 제거되어야합니다. 하위 영구 CFC는이를 확장 할 수 있어야합니다.

<cfcomponent name="Pet" mappedSuperClass="true" persistent="false"> 
... 
</cfcomponent> 

<cfcomponent name="Cat" extends="Pet" persistent="true" table="cats"> 
... 
</cfcomponent> 

이것은 ORM에서 상속을 통해 수행 할 수있는 작업을 분명히 제한합니다. 애완 동물을 자체적으로 엔티티로 사용할 수는 없지만 Cat, Dog 및 Rabbit 엔티티에서 중복되는 속성을 공유하는 데 유용합니다.