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?