2012-11-02 2 views
0

종속성 삽입을 사용하면 개체 외부에있는 개체와 범위를 직접 참조하지 않아도됩니다. 대신 주입 된 종속성을 참조하십시오.CFML에서 전역 함수 라이브러리를 참조하는 방법은 무엇입니까?

전역 함수 라이브러리의 경우 가장 좋은 방법을 알고 싶습니다. 현재 내 기능을 서버 범위에 저장합니다. 나는 내 프로젝트가 다른 개발자들이 이해할 수있는 오픈 소스가되기를 원한다. 응용 프로그램에서 단위 테스트를 작성하고 더 느슨하게 결합하기를 원합니다.

전역 함수를 사용하는 모든 개체에 서버 범위를 삽입해야합니까?

또는 규칙에 예외를 만들고 이러한 함수를 참조 할 때 "server.functions.myFunction()"범위를 구성 요소에 직접 넣어야합니까?

방법 1 :

<cfcomponent> 
    <cffunction name="init"> 
     <cfscript> 
      server.functions.myFunction(); 
     </cfscript> 
    </cffunction> 
</cfcomponent> 

방법 2 :이 내 대답을 공식화 주위 없었어

<cfcomponent> 
    <cffunction name="init"> 
     <cfargument name="serverScope" type="struct" required="yes"> 
     <cfscript> 
      variables.serverScope=arguments.serverScope; 
      variables.serverScope.functions.myFunction(); 
     </cfscript> 
    </cffunction> 
</cfcomponent> 
+1

이 글로벌 라이브러리에는 몇 개의 함수가 있으며, 그 중 몇 퍼센트를 주입 할 각 구성 요소에서 어떤 비율로 사용할 것입니까? 저는 "전역 함수 라이브러리"와 같은 것들을 경계하며, 목적에 기초한 컴포넌트로 더 분해하고, 필요로하는 컴포넌트에 이들을 삽입하려고합니다. lib에있는 함수를 보지 않고도 말하기는 어렵지만, 여기에서 살펴볼 몇 가지 재구성이있을 것 같은데? –

+0

응용 프로그램 범위에서 서버 범위를 사용하는 이유는 무엇입니까? – NotJustClarkKent

+0

@NotJustClarkKent 동일한 기능을 사용하는 100 개 이상의 사이트가 있습니다. 새 소스 코드를 업로드 할 때 서버 범위에 대한 업데이트를 수동으로 동기화합니다. –

답변

1

여기

코드 예입니다. 당신이 코멘트에서 말한대로, 나는 이것을 할 것입니다 :

  • 당신의 글로벌 라이브러리를 목적에 맞는 특정 구성 요소로 분해 한 다음 객체 (상태 저장)로 처리하십시오. - 모든 의도와 목적에 대해 정적 라이브러리 (상태가 아님).
  • 예, 의존성 주입을 사용하여 주어진 상황에 맞춰이 필요한 을 주입하십시오.

편의를 위해 캡슐화를 중단하지 않을 것입니다.