이 질문은 당분간 머리가 고개를 들고 있습니다 ... 로깅을 유용하게 사용하려면 코드에 모든 것이 있어야하지만 코드를 읽기가 어렵게 만듭니다. 다음 코드와 같습니다 :소스 코드 오염없이 로깅을 소개합니다
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;
}
소스 코드의 가독성을 떨어 뜨리지 않기위한 전략이 있습니까?
나를 이길 : – Pondidum
동의. PostSharp는 입력/종료 유형 로깅을 처리합니다. 나는 이걸 위해 사용한거야. 멋진 점은 PostSharp가 실제로 인수의 값을 쓸 수 있다는 것입니다. – RQDQ
Unity Framework도 Spring.NET과 마찬가지로 AOP를 제공합니다. – DaveRead