mercredi 4 février 2015

Is this code bad design, what's the alternative

I recently implemented some code similar to below and submitted a pull request to get it added to our shared repository. The request was rejected and I was told this pattern was bad. Instead I should be putting my dependencies closer to the creation of my objects. If the parent object creates a child object then a Func childFactory should be passed in rather than a more generic object since that could be misused, increases coupling and becomes much harder to test.



public interface ILogResolverService
{
ILogger<T> Resolve<T>();
}

public class LogResolverService : ILogResolverService
{
private readonly IContainer _container;

public LogResolverService(IContainer container)
{
_container = container;
}

public ILogger<T> Resolve<T>()
{
return _container.Resolve<ILogger<T>>();
}
}


The idea of the code is to pass an object that can create an ILogger so that you can log with the correct class name. If you create a child view model for example you would let it create it's own ILogger etc


Since this issue has polarized opinions amoungst my colleagues I wanted to get an opinion from the community.


Aucun commentaire:

Enregistrer un commentaire