c# - 有什么巧妙的方法可以在不让登录困惑代码的情况下应用日志记录?

标签 c# oop

目前我正在实现一个导入模块。但这也是必须记录每个操作的要求。例如。当我导入客户时,我需要检查该客户是否已经存在,如果客户不存在,我需要创建客户。我需要记录这两种情况。

所以现在我有一些这样的代码:

public event Action<string> OnMessageLog;

public void ImportOrder()
{
    LogMessage("The order is being created");
    var customer = ImportCustomer("MG_001");
    var order = new Order{ Customer = customer };
    LogMessage("The order is created");

    unitOfWork.Orders.AddObject(order);
}

public Customer ImportCustomer(string customerCode)
{
    var customer = this.unitOfWork.Customers.GetByCode(customerCode);

    if(customer == null)
    {
        LogMessage("The customer doesn't exists. A new customer is created");
        customer = new Customer{ \\.. here some initialization };
    }
    else
    {
       LogMessage("The customer exists.");
    }

    return customer;
}

private void LogMessage(string message)
{
     if(OnMessageLog != null)
     {
         OnMessageLog(message);
     }
}

我不太喜欢这样,因为我认为所有“LogMessage(...)”调用都不是很整洁。

作为替代方案,我正在考虑使用装饰器模式,但这变得难以实现,因为导入非常复杂。这意味着我需要为每个 Action 创建 2 个方法(而且我有很多 Action )。

您有什么建议或想法可以使这段代码更易读/更整洁吗?

最佳答案

您可以使用类似 PostSharp 的工具尝试面向方面的编程.

关于c# - 有什么巧妙的方法可以在不让登录困惑代码的情况下应用日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172643/

相关文章:

c# - 文字转语音不适用于不同的安卓手机

C#计算器指数函数。如何?

c# - 三元运算符用法

c++ - 用C++代码返回对象是什么意思?

php - 通过静态和非静态方法访问静态属性?

c# - DNX Core 5.0 中的 Thread.MemoryBarrier() 和其他内存栅栏功能

objective-c - 在尽可能少的耦合下在许多类之间传递一个对象

c# - 从派生类实例调用基类的虚方法

mysql - 使用 mysql 在 Express 中定义表

c# - 验证模板中隐藏的 AdornedElementPlaceholder