Ero interessato a come dovrebbe essere affrontato il seguente approccio sia pragmatico che orientato al modello. Preferirei una risposta di mondo reale su "modello corretto".
Esempio semplice: Supponiamo che io voglia un sistema di registrazione degli eventi in cui gli sviluppatori chiamino semplicemente il metodo di registro e forniscano un tag personalizzato solo per stampare come prefisso all'errore.
IEventLog eventLog = new StandardEventLog();
eventLog.LogData("trace data", new TraceLogType());
eventLog.LogData("error data", new ErrorLogType());
dove quanto sopra è definito come tale.
public interface IEventLog
{
string Log { get; set; }
void LogData(string log, EventLogType type);
}
public class StandardEventLog : IEventLog
{
public void LogData(string log, EventLogType logType)
{
Log += logType.Type + ": " + log;
}
public string Log { get; set; }
}
public abstract class EventLogType
{
public abstract string Type
{
get;
}
}
public class TraceLogType : EventLogType
{
public override string Type {
get
{
return "TRACE";
}
}
}
public class ErrorLogType : EventLogType
{
public override string Type
{
get { return "ERROR"; }
}
}
Sembra che il sovraccarico per un così piccolo esempio di dover definire un nuovo ErrorLogType e istanziarlo ogni volta per l'uso è un po 'troppo.