浅谈C# AOP的简单实现

2019-12-30 19:53:09丽君

博主觉得它的优势主要表现在:

1、将通用功能从业务逻辑中抽离出来,可以省略大量重复代码,有利于代码的操作和维护。

2、在软件设计时,抽出通用功能(切面),有利于软件设计的模块化,降低软件架构的复杂度。也就是说通用的功能都是一个单独的模块,在项目的主业务里面是看不到这些通用功能的设计代码的。

三、AOP的简单应用

为了说明AOP的工作原理,博主打算先从一个简单的例子开始,通过静态拦截的方式来了解AOP是如何工作的。

1、静态拦截


public class Order
  {
    public int Id { set; get; }
    public string Name { set; get; }
    public int Count { set; get; }
    public double Price { set; get; }
    public string Desc { set; get; }
  }

  public interface IOrderProcessor
  {
    void Submit(Order order);
  }
  public class OrderProcessor : IOrderProcessor
  {
    public void Submit(Order order)
    {
      Console.WriteLine("提交订单");
    }
  }

  public class OrderProcessorDecorator : IOrderProcessor
  {
    public IOrderProcessor OrderProcessor { get; set; }
    public OrderProcessorDecorator(IOrderProcessor orderprocessor)
    {
      OrderProcessor = orderprocessor;
    }
    public void Submit(Order order)
    {
      PreProceed(order);
      OrderProcessor.Submit(order);
      PostProceed(order);
    }
    public void PreProceed(Order order)
    {
      Console.WriteLine("提交订单前,进行订单数据校验....");
      if (order.Price < 0)
      {
        Console.WriteLine("订单总价有误,请重新核对订单。");
      }
    }

    public void PostProceed(Order order)
    {
      Console.WriteLine("提交带单后,进行订单日志记录......");
      Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "提交订单,订单名称:" + order.Name + ",订单价格:" + order.Price);
    }
  }

调用代码: