Nella mia azienda, stiamo costruendo un SDK composto da un numero di assiemi. Ad esempio, forniamo un assembly chiamato Company.Platform.Security
che contiene l'implementazione del nostro modello di autorizzazione.
Ora questo assembly contiene il codice che parla con altri servizi su HTTPS. È quindi necessario scoprire dove tali servizi vivono e deve registrare le interazioni e gli eventuali errori che ne derivano.
Quindi lo stesso SDK contiene assiemi chiamati Company.Platform.Logging
, Company.Platform.ServiceDiscovery
ecc. Questi gruppi espongono le interfacce chiamate Company.Platform.Logging.ILogging
e Company.Platform.ServiceDiscovery.IServiceDiscovery
rispettivamente.
Ora la mia domanda è, se le classi in Company.Platform.Security
prendono queste interfacce come dipendenze nei loro costruttori? O dovrebbe Company.Platform.Security
definire la propria interfaccia Company.Platform.Security.Interfaces.ILogging
e Company.Platform.Security.Interfaces.IServiceDiscovery
e prendere gli oggetti che implementano quelli nel costruttore delle sue classi?
Quest'ultimo rende l'assemblaggio IMO più coeso in quanto lo protegge dai cambiamenti in quelle interfacce (che possono essere o non essere mantenute da altri membri del team o team). Ma molte classi concrete saranno solo classi di adattatori molto semplici per le classi negli altri assiemi. Potrebbe anche rendere il sistema più complesso.
Quali sono argomenti validi per entrambi gli approcci?