esta pregunta me persigue en la cabeza desde hace un tiempo ... Para que el registro sea útil, debe estar allí en el código, pero luego hace que el código sea difícil de leer. Al igual que el siguiente código:introducir el registro sin contaminación del código fuente
public IDictionary<decimal, Status> GetStatus(decimal[] keys)
{
_logger.Debug("ENTERED GetStatus");
IDictionary<decimal, Status> statuses = new Dictionary<decimal, Status>();
string inClause = null;
inClause = FormatInClause(keys, inClause);
_logger.DebugFormat(" inClause: '{0}' ", inClause);
if (string.IsNullOrEmpty(inClause))
{
_logger.Error("Key collection is null or empty.");
throw new Exception("Key collection is null or empty.");
}
if (!IsOpen)
Connection.Open();
using (IDbCommand cmd = Connection.CreateCommand())
{
cmd.CommandText = " select id, date, status " +
" from ORDERS where id in (" + inClause + ") ";
inClause = null;
using (IDataReader reader = cmd.ExecuteReader())
{
int i = 0;
while (reader.Read())
{
object[] values = new object[reader.FieldCount];
reader.GetValues(values);
DebugHelper.LogValues(_logger, " reader.Read() #" + i + " reader.GetValues(values): ", values);
statuses[(decimal)values[0]] = new Status(
(decimal)values[0],
ValueOrDefult<string>(values[1]),
ValueOrDefult<string>(values[2]),
(decimal)values[3],
ValueOrDefult<DateTime>(values[4]));
_logger.DebugFormat(" reader.Read() #{0} created new Status() ", i);
values = null;
i++;
}
}
}
_logger.Debug("EXITED GetStatus");
return statuses;
}
¿Existe alguna estrategia para el registro que no reduzca la legibilidad del código fuente?
Me pegó :) – Pondidum
De acuerdo. PostSharp manejará el registro de tipo de entrada/salida. Lo he usado para esto mismo. Lo bueno es que PostSharp puede escribir los valores de los argumentos. – RQDQ
Unity Framework también proporciona AOP, al igual que Spring.NET – DaveRead