Three Designs

1.封装变化

  Log 功能比较普遍。最简单的就是直接输出:

      Console.WriteLine("some message");

  但如果代码中有 100 处这样的直接输出,某天需要改变,例如:
     Console.WriteLine("{0}: some message", DateTime.Now);

  就要改动 100 处。如果将此变化封装成 Log 类:

     class Log
    {
        public void Write(string message)
       {
          Console.WriteLine(message);
          //改变:Console.WriteLine("{0}:" + message, DateTiem.Now);
        }
    }

  则只需改变一处即可。

2.面向接口

  开发时,Log 直接输出。发布时,却希望将信息保存到文件中。怎样灵活转换呢?
  面向接口,而不是面向实现:

  interface ILog
  {
     void Write(string message);
  }

  程序中使用 ILog 即可:
 
  class Program
  {
     ILog _log = new Log(); // or new FileLog(); 皆实现 ILog 接口
     // ......
  }

3.依赖注入

  DI,依赖注入,听起来恐怖,实际却简单:

  class Program
  {
    ILog _log;
    public Program(ILog log) // 通过构造函数注入
   {
      _log = log;
    }
  }

  现在,Log 的实现彻底地同 Program 解耦了。

有个关于设计的例子:download/code/DvbbsToHtml,欢迎下载!

posted on 2011-01-25 16:43  x01  阅读(125)  评论(0编辑  收藏  举报

导航