2010-06-09 2 views
5

내 응용 프로그램의 예외 처리 계층에서 작업하고 있습니다.예외 처리에서 인터페이스를 사용하는 방법

나는 인터페이스와 제네릭에 관한 기사를 거의 읽지 않았습니다. 나는 꽤 많이 상속을 사용했고 나는 그 지역에서 편안하다.

public interface IMyExceptionLogger 
{ 
    public void LogException(); 

    // Helper methods for writing into files,db, xml 
} 

난 다음에 일을해야 무엇을 조금 혼란 스러워요 :

내가

내가 구현하는거야 아주 짧은 디자인이있다.

public class FooClass: IMyExceptionLogger 
{ 

    // Fields 
    // Constructors 

} 

나는 FooClassLogException() 메소드를 구현해야할까요? 그렇다면 구체적인 클래스 대신 인터페이스를 사용하는 것이 더 낫다는 것을 고심하는 것보다 ...

나는 인터페이스를 사용하는 다양한 클래스가 있지만, 각 클래스 내에 해당 인터페이스의 구현을 작성하려고하지 마십시오.

같은 시간에 하나의 클래스에서 인터페이스를 구현 한 다음 해당 클래스를 응용 프로그램의 다른 레이어에서 사용하면 인터페이스 대신 구체적인 클래스를 사용하게됩니다.

나는 그것이 의미가 있기를 바랍니다.

의견 및 제안을 환영합니다.

나는 배우기 위해 이것을하고 있기 때문에 net4log 나 그 경쟁자를 사용하는 것에는 관심이 없다.

좀 더 많은 코드를 작성 :

편집 감사드립니다. 따라서이 인터페이스 (예 : DBExceptionLogger, CSVExceptionLogger, XMLExceptionLogger 등)를 사용하여 다양한 로거를 구현할 것입니다. 필자는 다른 응용 프로그램 계층에서 사용해야하는 구체적인 클래스로 끝낼 것입니다.

답변

2

IMyExceptionLogger를 구현하는 구체적인 클래스는 피할 수 없습니다. 그러나 예외 로깅을 수행해야하는 클래스가 해당 구체적인 클래스에 종속되지 않도록 할 수 있습니다. 그것이 바로 인터페이스입니다. 그래서 당신은 그것을 사용하는 데 필요한 모든 클래스의 종속성으로 로거를 주입 : 당신은 또한 당신이 더 쉽게 이러한 종속성을 관리하는 데 도움이 같은 Unity 같은 일부 IOC의 용기에 볼 수 있었다

class MyClass 
{ 
    public MyClass(IMyExceptionLogger exceptionLogger) 
    { 
     .... 
     exceptionLogger.LogException(e); 
    } 
} 

.

+0

안녕하세요, 회신 해 주셔서 감사합니다. 이것은 하나의 DLL에 인터페이스를 저장하고 해당 인터페이스를 별도의 DLL로 구현한다는 것을 의미합니다. 이 방법을 사용하면 여러 개의 레이어가 단일 인터페이스 레이어를 참조하게됩니다. 이 올바른지? –

+0

예, 그렇게하는 것이 좋습니다. –

+0

고마워요! 정말 감사합니다. –

1

인터페이스 Logger를 정의하고 원하는만큼 구현을 정의합니다 (구현).

다음 사용 구성 - 로그 할 필요가있는 각 클래스에는 ctor 인수 또는 설정자를 통해 로거가 주입되어야합니다.

이것은 나에게 자연스러운 소리입니다.

1

예 FooClass에 LogException() 메소드를 구현해야합니다.

당신의 경우에있어서 로거의 구체적인 유형 (FooClass, DBExceptionLogger 등)을 생성하고 IMyExceptionLogger 참조 만 전달할 수있는 이점. 그래서 로그 정보가 모든 클래스는 로거의 구체적인 실현으로부터 독립 될 것입니다.

+0

그건 완벽하게 이해가됩니다. Spasibo! (thx) –

1

인터페이스 IExceptionLog를 사용해야합니다. 콘크리트 클라스가 공통점이 많은 경우 XmlLogger, SOAPLogger 당신은 그들을위한 기본 클래스를 만들 수 있습니다. 로거를 사용하려는 클래스에서 IExceptionLog (인터페이스) 유형의 멤버를 만들어야합니다. 이 구성원의 값은 종속성 삽입을 사용하여 설정됩니다. 원하는 경우 사용할 수 있습니다 IoC containter

+0

의존성 주입까지 모든 것이 완벽합니다. 나는 당신이 의미하는 바를 더 잘 이해하기 위해 당신이 제공 한 기사를 읽을 것입니다. 고맙습니다! –

+0

필자는 의존성 삽입 라이브러리 목록을 살펴 봤지만 이것이 무엇인지 생각하고 어떻게 사용하는지 더 자세히 조사해야한다고 생각합니다. –

+0

당신은 환영합니다 :) – Manu

관련 문제