2013-07-22 2 views
1

나는 아래와 같이 spec translator을가집니다.메소드 매개 변수에 대한 데이터 캡슐화 고려 사항 (종속성 삽입)

//all specifications implement this base class 
    public abstract class SpecBase 
     { 
      public abstract void Translate(IContext context);  
     } 

//spec translator implementation 
     public interface ISpecTranslator 
     { 
      void Translate(IContext context); 
     } 

SpecTranslator 생성자의 종속성을 주입해야합니다. 나는 직관력을 표현하는 두 가지 방법이 있습니다.

솔루션 1

public class SpecTranslator:ISpecTranslator 
    { 
     IList<SpecBase> specs; 

     public SpecTranslator(IList<SpecBase> specs) 
     {  
       this.specs = specs; 
     } 

    } 

지금 IList<SpecBase> 작품을 사용하여주의,하지만 솔루션이 더 많은 보호 기능을 제공 보인다하시기 바랍니다.

용액 2 : 생성자 의존성 주입을 사용할 때

public class SpecTranslator:ISpecTranslator 
    { 
     ISpec spec; 
     public SpecTranslator(ISpec spec) 
     {  
       this.spec = spec; 
     } 

    } 

    public interface ISpec 
    { 
     IList<SpecBase> specs {get;} 
    } 

그러나 ISpec의 구현은 동일한 문제가있다.

이 두 가지 해결책 또는 다른 해결책에 대한 장단점에 대한 아이디어가 있습니까?

답변

0

사양 목록을 "번역"(분석)하기 위해 나타나는 것처럼, 주어진 경우 ISpec 인스턴스의 내용은 모든 경우에 파기되어야합니다. 목록을 가져 와서보아야합니다. 얼마나 많은 추상화 계층을 만들 었는지에 상관없이 결국 SpecTranslator에 목록이 필요합니다.

나는 귀하의 경우에 ISpec을 공장으로 생각합니다. 목록이 느리게 계산되지 않으면 값이 없습니다.

또한 단순성은 중요한 디자인 원칙입니다. ISpec은 기능 또는 아키텍처상의 자유를 추가하지 않으므로 자체 무게를 지니지 않습니다.

+0

감사합니다. 도움이됩니다. 나는 그것을 좋아한다. – Pingpong

관련 문제