문제

범위 및 캡슐화에 대한 일반적인 질문이 있습니다.두 가지 시나리오를 살펴보겠습니다.

시나리오 1:

// a global application level constant
public static const IS_DEMO_MODE:Boolean = false;   

... // somewhere deep in the codebase

private function _myFunction():void
{
    if (IS_DEMO_MODE == true) {
      // If Demo Mode do not allow this function to complete
      return;       
    }
    else {
       // Function behaves normally
       // Code ...
    }

}

시나리오 2:

// a global application level constant
public static const IS_DEMO_MODE:Boolean = false;   

... // somewhere deep in the codebase

 // call the function and pass in the constant
_myFunction(IS_DEMO_MODE);


private function _myFunction(isDemoMode:Boolean):void
{
    if (isDemoMode == true) {
      // If Demo Mode do not allow this function to complete
      return;       
    }
    else {
       // Function behaves normally
       // Code ...
    }

}

기능적으로 말하면 이 두 코드 조각은 똑같은 일을 합니다.나는 코딩 스타일의 더 미세한 점을 이해하려고 노력하고 있으며 왜 한 가지 방법이 다른 방법보다 선호될 수 있습니까?캡슐화 관점에서는 시나리오 2가 더 나은 것 같습니다.그러나 시나리오 1은 조건부 부울이 전역 상수인 한 곳에서만 나온다는 점에서 더 안전합니다.매개변수를 올바르게 수신하는 동안 잘못된 값을 전달할 수 있는 함수 호출에 대해 걱정할 필요가 없습니다.그러나 시나리오 2는 상수의 종속성을 제거하고 함수가 보다 동적으로 작동하도록 할 수 있기 때문에 가치가 있는 것 같습니다.이것에 대한 생각이 있나요?제가 검토하고 있는 다른 절충안이 있나요?

객체와 클래스에도 동일한 개념과 질문이 적용됩니다.하지만 코드 예제의 단순화를 위해 함수 측면에서 예제를 제시할 뿐입니다.

도움이 되었습니까?

해결책

두 번째 접근 방식에서는 다음을 수행할 수 있습니다. _myFunction 전역 모듈과의 종속성이 없는 별도의 모듈에 있으므로 테스트하기 쉽고 재사용하기 쉽고 대규모 코드베이스에서 종종 심각한 문제가 되는 종속성 그래프를 제어하는 ​​데 도움이 됩니다.쉽게 피할 수 있는 종속성을 삽입하면 종속성 그래프 문제가 더욱 악화될 뿐이며 이에 대한 비용을 지불할 수 있는 잠재적인 이점은 거의 없습니다.

실제로 이러한 종류의 이점을 얻으려면 모듈 간에 (일반적으로 바람직하지 않거나 바람직하지 않은) 종속성을 생성하는 개체를 명시적으로 INJECT하는 것이 좋습니다. 여기 시작을 위해.테스트, 느슨한 결합 및 재사용을 좋아하는 사람으로서 점차 종속성 주입도 좋아하게 되므로 인수로 전달하는 것이 확실한 대안인 전역 상수에 액세스하는 것은 꿈도 꾸지 않을 것입니다...;- ).

다른 팁

동일한 컴파일 장치가 두 버전 (특히 전 세계 고정 경로의 공유 라이브러리)에 연결되거나 동일한 프로세스에서 여러 인스턴스를 실행 한 경우 2가 선호됩니다. 그렇지 않으면, 소스에서 모든 것을 재건하는 것이 장애물이 아니라면 #1은 더 좋습니다.

어떤 것들은 실제로 전 세계적입니다. 글로벌 상수는 전혀 위험하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top