2014-03-28 129 views
0

我有一系列程序因爲各種原因反覆向用戶顯示消息。我給這家最初的想法,是一個基本的靜態輔助方法(S):顯示消息對話框的方法

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策略。這是我一直用於單元測試的東西。