Con la ayuda de AOP, puedo eliminar el código de registro de mi lógica empresarial. Pero creo que solo se puede usar para registrar cosas simples (es decir, entrada / salida del método de registro y valores de parámetros).
Sin embargo, ¿qué sucede si necesito registrar algo en mi lógica comercial? p.ej
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
}
El método de muestra anterior puede no ser lo suficientemente claro, lo que quiero mostrar aquí es que el método debe tratarse como la unidad más pequeña desde el punto de vista del dominio. No debe dividirse en piezas más pequeñas.
¿Es posible mover por encima del código de registro 3 fuera del método? ¿Cuál es la mejor práctica para tal situación?