Sapendo che C # non supporta l'ereditarietà multipla, è considerata una cattiva forma scrivere una classe di utilità?
Alcune riflessioni iniziali:
- Potrei creare un'interfaccia e una concrezione, ma poi l'implementazione non è portabile
- Se lo sviluppatore deve estendere la classe, ad esempio, un pattern di decoratore, potrebbe implementare questa nuova classe ed ereditare la classe base nella nuova classe
Modifica :
NB. Qui non sto parlando dell'eredità della vaniglia, ad es. barboncino < - cane < - mammifero < - animale
Più questo tipo di cose (sollevate da qui ):
using log4net;
using log4net.Config;
public class LogTest2
{
private static readonly ILog logger =
LogManager.GetLogger(typeof(LogTest2));
static LogTest2()
{
DOMConfigurator.Configure();
}
static void Main(string[] args)
{
logger.Debug("Here is a debug log.");
logger.Info("... and an Info log.");
logger.Warn("... and a warning.");
logger.Error("... and an error.");
logger.Fatal("... and a fatal error.");
}
}
Se dovessi rilasciare questo, per esempio, un servizio WCF, sarebbe opportuno che la variabile membro privata, il costruttore e forse alcuni metodi wrapper siedano in una classe base per risparmiare ingombrare il codice del servizio (e renderlo riutilizzabile ).
Finora, così noioso.
Tuttavia:
Che cosa succede se volessi aggiungere qualche altro tipo di registrazione non supportato da log4net? Per esempio. Acme Corp fornisce una classe a iMessage del team di supporto in caso di problemi.
Classe base
Se avessi implementato la roba di log4net in una classe base, dovrei quindi creare una nuova classe base master che supporti entrambe le classi e ereditarlo.
Interfaccia
Potrei implementare un'interfaccia ma la concrezione sarebbe ancora nel codice di servizio che stiamo cercando di evitare. Naturalmente la classe di Acme Corp ora può entrare subito, ma stiamo implementando due serie di codice che fanno cose molto simili in modi diversi.