Sto lavorando su un pezzo di codice che esegue un'attività impostata in diversi ambienti paralleli in cui il comportamento dei diversi componenti nell'attività è simile ma molto diverso.
Questo significa che le mie implementazioni sono abbastanza diverse ma sono tutte basate sulle relazioni tra le stesse interfacce, qualcosa del genere:
IDataReader
-> ContinuousDataReader
-> ChunkedDataReader
IDataProcessor
-> ContinuousDataProcessor
-> ChunkedDataProcessor
IDataWriter
-> ContinuousDataWriter
-> ChunkedDataWriter
Quindi in entrambi gli ambienti abbiamo un IDataReader, IDataProcessor e IDataWriter e quindi possiamo usare Dependency Injection per assicurarci di averne uno corretto per l'ambiente corrente, quindi se stiamo lavorando con i dati in blocchi usiamo il ChunkedDataReader
, ChunkedDataProcessor
e ChunkedDataWriter
e se abbiamo dati continui abbiamo le versioni continue.
Tuttavia, il comportamento di queste classi è abbastanza diverso internamente e non è certamente possibile passare da ContinuousDataReader
a ChunkedDataReader
anche se sono entrambi IDataProcessors
. Mi sembra che non sia corretto (forse una violazione di LSP?) E certamente non è un modo di lavorare teoricamente corretto. È quasi come se l'interfaccia "reale" qui fosse la combinazione di tutte e tre le classi. Sfortunatamente nel progetto a cui sto lavorando con le scadenze a cui stiamo lavorando, siamo praticamente bloccati con questo design, ma se avessimo un po 'più di spazio al gomito, quale sarebbe un approccio di design migliore in questo tipo di scenario?