如何使用设计模式以优雅的方式记录业务对象的操作?

how to log the operation of business object in an elegant way by using design pattern?

例如,我有两个 class 调用 Log 和 Order,Order 是一个业务对象。如果我需要记录业务对象 Order.Then 的插入操作,我必须这样做:

public class Order
{
  IOrderDal dal = DALFactory.DataAccess.CreateOrder();
  logger = new Logger();
  public void Inerst(OrderInfo order)
  {
    dal.Insert(order);
    logger.log(orderInfo.ToString(),"Insert",DateTime.Now.ToString());
  }
public class Logger
{
  public void log(string description,string operation,string time)
  {
    ....//dosometing to persist the information
  }
}

我的问题是,如果我有数百个业务对象需要记录,那么我必须在每个对象中添加类似 logger.log(orderInfo.ToString(),"Insert",DateTime.Now.ToString()) 的代码 业务对象的操作?我认为必须有一些设计方法可以使生活更轻松。

日志记录是 Aspect Oriented Programming 应用程序的典型示例,使用 AOP 您将能够实现您想要的。 AOP 框架允许您声明在方法执行期间应用于其他方法的方法。这允许您在方法执行之前、方法执行完成之后、方法抛出异常等情况下调用一些代码。

通常您可以访问有关方法的元数据(其名称、参数等),因此您可以轻松地记录诸如正在执行的方法和调用该方法的参数之类的内容。

在 .net 中最大和最流行的 AOP 框架可能是 Postsharp and they have an example of how logging with Postsharp works

plenty of other choices though.