2011-03-12 7 views
4

depedency injection을 이해하고 있는지 확인하려고합니다.C# Dependency Injection

나는 파서로 사용되는 프로젝트를 가지고있다. 그것은 구분 된 텍스트, 키 - 값을 구문 분석 할 수 있으며 또한 정규식입니다.

첫 번째 방법은 스위치가있는 하나의 기능입니다. 다음 방법은 별도의 함수에 넣고 스위치를 기반으로 호출하는 것입니다.

다음에 생각한 것은 인터페이스를 만들고 각 유형별로 클래스를 구현하는 것입니다. 그게 많이 효과가 있니? 문제가 기능에 영향을 미치는지 아니면 내가 아직 보지 못했던 혜택을 보여줄 것인가?

저는 처음에는 인터페이스를 구현할 때마다 새로운 클래스를 구현하는 데 필요한 구문 분석이 필요하다고 생각합니다. 하지만 그보다는 나에게 주입형 프레임 워크를 사용하는 방법을 알지 못하기 때문에 일부 유형의 논리 흐름에 추가 할 필요가 있습니다.

태그 또는 xml을 기반으로하는 구문을 분석하는 다른 방법을 추가한다고합니다. 인터페이스를 구현하는 클래스를 만들고 사용자가 해당 텍스트 유형을 구문 분석하도록 선택한 경우 해당 인터페이스로 인스턴스화하기 위해이를 흐름 논리에 추가해야합니다. 그렇게 할 수있는 명확한 방법이 있습니까?

+1

이것이 내가 Dependency Injection과 어떤 관련이 있는지 잘 모르겠지만, 당신이 말하는 것과 가장 유사한 개념이 [MEF] (http://mef.codeplex.com/)라고 생각합니다. – R0MANARMY

+0

동의, MEF 또는 다른 플러그인 모델 – rboarman

답변

2

정말 필요한 것은 공장이라고 생각합니다. 팩토리 (Factory)는 필요한 정보가 주어지면 필요한 적절한 유형의 객체를 만드는 방법을 알고있는 클래스입니다. 귀하의 경우에는 파서 인터페이스를 만든 다음 다양한 파서를 구현하는 클래스를 분리해야합니다. 마지막으로, 생성 할 파서의 종류를 알려주고, 필요한 종류를 생성하고 리턴하는 퍼서 팩토리를 작성하십시오. 이것은 당신의 논리가 갈 곳입니다. Factory는 생성되는 항목에 대한 생성 논리를 현지화하는 방법을 제공합니다. 공장은 플러그인 구성을 읽을 적절한 플러그인을로드하고, 필요에 따라 인스턴스 유형을 만드는 데 적용 할 수 있습니다 필요한 경우

public interface IParser<T> 
{ 
    T Parse<T>(string item); 
} 

public class KeyValueParser : IParser<KeyValue> 
{ 
    KeyValuePair Parse<KeyValue>(string item); 
} 

... 

public class ParserFactory 
{ 
    public IParser<T> CreateParser<T>() 
    { 
     var type = typeof(T); 
     if (type == typeof(KeyValuePair)) 
     { 
      return new KeyValueParser(); 
     } 
     ... 
     throw new InvalidOperationException("No matching parser type."); 
    } 
} 

일부 다른 사람, 플러그인 모델을 제안하고있다. 이 경우 간단히 인스턴스를 만드는 것 이상으로 공장을 "관리자"라고 생각하는 것이 더 적절할 수 있습니다.

2

나는 옳은 길로 말 하겠지만, 당신은 약간 잘못되었습니다. 먼저 파싱 문제를 해결하려면 Factory Method와 Visitor patern의 방향으로 가야합니다.

  1. 다양한 유형의 입력을 처리하는 방문자.
  2. 방문자는 Factory Method로 생각됩니다.
  3. 공장이 종속성 삽입 패턴을 달성하는 생성자로 주입됩니다.

이 작품은 당신을 위해 재미있을 수 - http://www.exciton.cs.rice.edu/research/sigcse05/dp4rdp.pdf

+0

깨진 링크 .... – hagensoft

2

당신이 원격으로 만 의존성 삽입 (Dependency Injection)에 연결되어 설명된다. 그러나 의 포스터 예제는 다형성 조건부로 바꿉니다.Refactoring (255 페이지)이므로 좋은 아이디어입니다.

조건부를 완전히 없애고 대신 전략을 소비자에게 삽입하면 DI가됩니다.

0

나는 추상 팩토리 패턴을 사용하여 파일 파서를 구현했다. 그리고 내 공장은 파일 확장자를 요구하고 전략 (또는 스위치 케이스)을 사용하여 인스턴스화 할 파서를 결정합니다.

관련 문제