2014-03-28 131 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策略。这是我一直用于单元测试的东西。