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,欢迎下载!