progettazione software per una classe che utilizza molti servizi diversi

0

Sto provando a modellare un progetto per un progetto C #. Cercando di seguire i principi SOLIDI, questo è quello che ho ottenuto finora:

SDKClient class che ha tre proprietà importanti (per questa spiegazione) ( IAuthProvider , IHttpProvider e IFileService ). Il SDKClient deve essere disaccoppiato, quindi sono sempre libero di scambiare la classe auth o la classe http. Ecco perché sto usando solo le interfacce (per un futuro DI).

Ma il vero problema risiede nei servizi. Finora stavo usando il client esclusivamente per il cosiddetto " FileServices ", che condividono lo stesso comportamento. Ora non sono sicuro di cosa fare. Dovrei utilizzare nuovi servizi, che non condividono nulla in comune con FileServices .

Quindi la mia domanda è, c'è un modo per generalizzarlo a qualcosa come IService , o è questo il modo sbagliato, forse alcune fabbriche sono la soluzione giusta qui, o il servizio non dovrebbe essere nella SDKClient ?

Sono abbastanza inesperto nella progettazione del software, ecco perché spero in soluzioni / idee davvero pulite.

Se la mia spiegazione non è stata sufficiente, chiedimi solo domande sui punti che non puoi capire.

    
posta user3125470 23.03.2017 - 14:31
fonte

1 risposta

1

Si potrebbe renderlo generico:

public interface IService<in TRequest, out TResponse>
{
    TResponse Execute(TRequest request);
}



public interface IAsyncService<in TIn, TOut>
{
    Task<TOut> ExecuteAysnc(TIn request);
}

In sostanza, inviamo qualcosa e otteniamo qualcosa in cambio. Usa il file system, chiama un servizio web, chiama un database, è fino all'implementazione!

Se utilizza il servizio file, l'implementazione IService avrà un parametro IFileService nel costruttore. Quindi, ogni servizio potrebbe avere dipendenze aggiuntive secondo necessità, a seconda di cosa stanno facendo.

    
risposta data 23.03.2017 - 14:54
fonte

Leggi altre domande sui tag