1

我的问题是我想应用策略模式来保存日志

在此处输入图像描述

从上图

我将使用替换我的班级来形象化

上下文 = 日志类策略 = ILog

具体策略A = CreateSituation

具体策略B = NameSituation

具体策略C = StatusSituation

[来自图像的附加]

具体策略D = PriceSituation

具体策略E = DiscountSituation

在 ILog 中有这些方法 SaveLog(Log log);

每个具体的StrategyA、B、C、D、E 实现 ILog

公共类 CreateSituation : ILog

{

public void SaveLog(Log log)

{

    using(var context = new ProductContext())

    {

      log.Message = "This product is created";

      context.productLog.InsertonSubmit(log);

      context.submitChange();

    }

}

}

公共类 NameSituation : ILog

{

public void SaveLog(Log log)

{

    using(var context = new ProductContext())

    {

      log.Message = "this produce has updated name from \"oldProduct\" to \"newProduct\"";

      context.productLog.InsertonSubmit(log);

      context.submitChange();

    }

}

}

公共类StatusSituation:ILog

{

public void SaveLog(Log log)

{

    using(var context = new ProductContext())

    {

      log.Message = "this produce has updated status from \"In stock\" to \"Sold Out\"";

      context.productLog.InsertonSubmit(log);

      context.submitChange();

    }

}

}

公共课 PriceSituation : ILog

{

public void SaveLog(Log log)

{

    using(var context = new ProductContext())

    {

      log.Message = "this produce has updated price from $10 to $150";

      context.productLog.InsertonSubmit(log);

      context.submitChange();

    }

}

}

公共类 DiscountSituation : Ilog

{

public void SaveLog(Log log)

{

    using(var context = new ProductContext())

    {

      log.Message = "this product has updated discount price from $0 to $20";

      context.productLog.InsertonSubmit(log);

      context.submitChange();

    }

}

}

未来可以有比现在更多的情况

我展示的这些课程是解决这些问题的好方法

4

1 回答 1

1

是的,这是一个可以使用策略模式的场景。

但是,对我来说,在每个日志记录场景中使用完全不同的记录器实例似乎有点太多了。但在不了解您的架构的情况下,这只是我个人的直觉。

作为一种替代方法,我可以想象实现一个工厂来组装适当的日志消息,具体取决于日志记录情况。

[编辑]

此外,我建议使用一些框架,如log4net,使日志记录变得非常简单和直观。例如,log4net 可以区分多个日志记录级别,例如WARN, INFO, DEBUG, ERROR,FATAL允许您微调输出。

于 2012-06-25T09:29:39.100 回答