借助AOP,我可以从业务逻辑中删除日志记录代码。但是我认为它只能用于记录简单的事物(即记录方法的进入/退出和参数值)。
但是,如果我需要在业务逻辑中记录一些内容,该怎么办?例如
public void SomeDomainMethod(string id)
{
//Get user by Id
User user = Users.Get(id);
if (user == null)
{
Log.Warn("user is not existed"); //<----------------- Log A
throw new InvalidOperationException("user is not existed");
}
//Step 1
while(true)
{
//do something
}
Log.Info("Step 1 is completed"); //<----------------- Log B
//Step 2
while(true)
{
//do something
}
Log.Info("Step 2 is completed"); //<----------------- Log C
}
上面的示例方法可能还不够清楚,我想在这里展示的是,从域的角度来看,该方法应被视为最小的单位。它不应该分成较小的部分。
是否可以将3种以上的记录代码移出该方法?这种情况下的最佳做法是什么?