2014-03-28 3 views
0

여러 가지 이유로 사용자에게 반복적으로 메시지를 표시하는 프로그램 모음이 있습니다.메시지 대화 상자를 표시하는 방법

public class Message 
{   
    public static void ShowMessage(...) 
    { 
     ... 

자체가 여러 가지 일을 수행하는 방법 (즉,이 MessageBox.Show() 단지 래퍼되지 않습니다) :이에 대한 나의 초기 생각은, 기본 정적 도우미 메서드 (들)이었다.

분명히 이것은 테스트에 문제를 만듭니다. 따라서 마음에 튀는 다음 솔루션은 싱글 톤 패턴을 사용하는 것입니다.

확실한 방법은 의존성 삽입이지만, 메시지를 표시 할 때마다 새로운 상태없는 객체를 인스턴스화해야한다는 문제가 있습니다.

내 목표는 공통 클래스에 대한 단일 호출을 허용하는 구조를 만드는 것입니다.

Message.ShowMessage("hello"); 

테스트 가능성을 유지하면서 간단하게이를 달성 할 수있는 방법이 있습니까?

+1

'하지만 메시지를 표시하고 싶을 때마다 새로운 상태없는 객체를 인스턴스화해야한다는 문제가 있습니다. - 사실이 아닙니다. 모든 객체는 객체에 등록 할 때 지정한 수명 범위에 따라 달라집니다. 컨테이너. – Maarten

답변

0

사용자는 양식 클래스를 확장하고 필요한대로 메서드를 만드는 방법으로이 작업을 수행 할 수 있습니다.

1

내 접근 방식은 전략 패턴 (프로젝트의 크기에 따라 다소 과장 될 수 있음)을 사용하는 것입니다.

interface IMessageShowingStrategy 
{ 
    void ShowMessage(...) 
} 

class RealMessageShowingStrategy : IMessageShowingStrategy 
{ 
    void ShowMessage(...) 
    { 
     // Real code 
    } 
} 

class TestingMessageShowingStrategy : IMessageShowingStrategy 
{ 
    void ShowMessage(...) 
    { 
     // Code used for testing 
    } 
} 

class Message 
{ 
    IMessageShowingStrategy messageStrategy; 

    void ShowMessage(...) 
    { 
     this.messageStrategy.ShowMessage(...); 
    } 

} 

그런 다음 사용할 전략을 선택할 수 있습니다. 테스트를 위해 TestingMessageShowingStrategy의 인스턴스를 사용할 수 있습니다 (어쩌면 응용 프로그램이 -debug 스위치 등으로 시작될 때). 그렇지 않으면 Real 전략을 사용합니다. 이것은 내가 단위 테스트를 위해 사용해온 것입니다.

관련 문제