Je me demande si c'est une mauvaise pratique d'utiliser log4net directement sur mon objet de domaine ... J'utiliserai ELMAH pour mes exceptions sur le côté de l'application ASP.NET MVC, mais à des fins d'information j'aimerais m'enregistrer certaines données sur le modèle de domaine lui-même.Dois-je utiliser log4net directement dans mes objets de modèle de domaine?
Compte tenu de l'objet de domaine suivant:
public class Buyer
{
private int _ID;
public int ID
{
get { return _ID; }
set
{
_ID = value;
}
}
private IList<SupportTicket> _SupportTickets=new List<SupportTicket>();
public IList<SupportTicket> SupportTickets
{
get
{
return _SupportTickets.ToList<SupportTicket>().AsReadOnly();
}
}
public void AddSupportTicket(SupportTicket ticket)
{
if (!SupportTickets.Contains(ticket))
{
_SupportTickets.Add(ticket);
}
}
}
ajoute le comportement de l'exploitation forestière dans la AddSupportTicketMethod une mauvaise idée ... si essentialy qu'il avait ressembler à ceci:
public class Buyer
{
protected static readonly ILog log = LogManager.GetLogger(typeof(SupportTicket));
public Buyer()
{
log4net.Config.XmlConfigurator.Configure();
}
private int _ID;
public int ID
{
get { return _ID; }
set
{
_ID = value;
}
}
private IList<SupportTicket> _SupportTickets=new List<SupportTicket>();
public IList<SupportTicket> SupportTickets
{
get
{
return _SupportTickets.ToList<SupportTicket>().AsReadOnly();
}
}
public void AddSupportTicket(SupportTicket ticket)
{
if (!SupportTickets.Contains(ticket))
{
_SupportTickets.Add(ticket);
} else {
log.Warn("Duplicate Ticket Not Added.");
}
}
}
Le localisateur de service est un anti-pattern, et annule le but de l'injection de dépendance. Cette réponse n'est pas subjectivement erronée, elle est objectivement fausse. – jason
Je suis d'accord avec Jason. Plus d'infos: http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx – autonomatt