【发布时间】:2014-06-25 17:28:26
【问题描述】:
我有一个方法可以做一些需要一段时间的事情并返回进度/状态消息。该方法曾经是我的控制台Program 类中的Main() 静态方法。后来,我决定将功能移动到一个共享库程序集中,以便新的 Web api 项目可以访问相同的功能,从而为 stdio 提供具有不同机制的不同用户界面。
什么是一个好的设计模式来替换我在移动方法中的所有Console.Writeline() 调用?
我正在考虑添加一个可观察的(字符串)集合来存储消息,然后让任何调用程序集订阅集合上的更改并实现它们自己的 ui 机制来向用户显示消息。
这是合理的还是重新发明轮子?框架中是否已经有专门构建的方法来处理这样的场景?
编辑:
感谢@astef,我这样实现了它:
public interface IMessageObserver
{
void Notify(string message);
void Notify(string format, params object[] args);
}
public class ConsoleMessageObserver : IMessageObserver
{
public void Notify(string message)
{
Console.WriteLine(message);
}
public void Notify(string format, params object[] args)
{
Console.WriteLine(format, args);
}
}
class Program
{
static void Main()
{
Library.LongRunningMethod(new ConsoleMessageObserver());
}
}
static class Library
{
public static void LongRunningMethod(IMessageObserver observer)
{
observer.Notify("Some progress happened...");
}
}
【问题讨论】:
-
添加一个事件怎么样?这样主程序(或日志客户端)可以根据需要订阅事件并格式化、显示或记录状态事件。
标签: c# architecture software-design