Я использую в своем классе свойство журнала, предназначенное только для целей отладки.
Примечание: Я не использую какой-либо существующий пакет логгера, поскольку управляю большими списками объектов, каждый из которых имеет свой собственный (!) Журнал.
Поскольку он не используется в режиме выпуска, он заключен в директиву препроцессора:
#if DEBUG
public List<LogItem> DebugLog { get; }
#endif
К сожалению, мне нужно несколько раз инициализировать и скопировать это свойство, что приводит к грязному коду:
public MyClass(object parameterA, object parameterB, ...,
#if DEBUG
, List<LogItem> debugLog
#endif
) {
throw new NotImplementedException();
}
Хотя для реального ведения журнала я написал метод [Conditional("DEBUG")]
, я не знаю ни одной возможности избежать этой уродливой и нарушающей идиомы директивы для обозначения аргументов и параметров. Условный атрибут представляется применимым только к свойствам и атрибутам.
Мне интересно, существует ли какой-либо шаблон проектирования для этой проблемы, обеспечивающий лучшую читаемость. Я с нетерпением жду ваших идей!