public class Connection : IConnection
{
public Connection(Uri baseAddress, ISerializer serializer)
{
BaseAddress = baseAddress;
Serializer = serializer;
ResponseFactory = new ResponseFactory(serializer);
}
private Uri BaseAddress { get; set; }
public IResponseFactory ResponseFactory { get; set; }
private ISerializer Serializer { get; }
}
In questo codice (redatto per brevità), la classe Connection ha due dipendenze ottenute tramite l'iniezione del costruttore.
Ha una terza dipendenza, su IResponseFactory , in cui è disponibile l'iniezione di proprietà, ma viene creato un default tramite la riga ResponseFactory = new ResponseFactory(serializer) nel costruttore. Suppongo che la vista fosse che ResponseFactory è un "default locale" adatto, per usare la terminologia di Mark Seemann, ma un utente della classe Connection è libero di fornire un IResponseFactory alternativo se lo desiderano.
Nel rivisitare questo codice dopo un po 'di tempo, sono ambivalente riguardo alla creazione del default locale nel costruttore e alla sua dipendenza da ISerializer . Mentre ISerializer è richiesto a destra dalla classe Connection , 'concatenarlo' insieme a ResponseFactory sembra sbagliato. Sembra che la classe Connection debba richiedere un IResponseFactory tramite il costruttore e rinunciare alla praticità del default locale e alla sua dipendenza da ISerializer , che si verifica anche in questa classe.
Che ne pensi? Si tratta di un 'odore' definito?