Prevedo questo con alcune classi che mostrano ciò che sto cercando di fare
interface IDataField { /* ... */ }
class DataFieldImplementationA : IDataField { /* ... */ }
class DataFieldImplementationB : IDataField { /* ... */ }
interface IData
{
IDataField Field { get; }
}
class DataImplementationA : IData
{
public DataFieldImplementationA Field { get; set; }
IDataField IData.Field => this.Field; // this gets messy quickly
}
class DataImplementationB : IData
{
public DataFieldImplementationB Field { get; set; }
IDataField IData.Field => this.Field; // this gets messy quickly
}
class Program
{
static T Load<T>(/* ... */) where T : IData { /* ... */ }
static void Save(IData data) { /* ... */ }
static void Main(string[] args)
{
// load as a specific implementation, this is working fine
var a = Load<DataImplementationA>( /* ... */ );
var b = Load<DataImplementationB>( /* ... */ );
// save as any implementation, the saving system just cares about the data
Save(a);
Save(b);
}
}
Quello che ho sono due diverse rappresentazioni interne degli stessi dati. Uno è un dato piatto e uno supporta e traccia l'ereditarietà nei dati. Ho bisogno sia di fare diversi tipi di elaborazione.
Sono specificamente interessato a scoprire se esiste un approccio migliore per far rispettare le diverse proprietà senza dover avere una proprietà di interfaccia esplicita corrispondente sulle mie due implementazioni di dati, le righe in cui scrivo "questo diventa molto veloce".
Il mio obiettivo con l'interfaccia è se aggiorno le interfacce, questo mi costringerà ad aggiornare entrambe le mie implementazioni, in modo che entrambe funzionino e corrispondano.
In breve, ho bisogno di due classi per avere sempre le stesse proprietà, ma l'implementazione di queste proprietà potrebbe essere diversa dalle due classi. Fare questo con le interfacce sembra ovvio, ma siccome le proprietà possono essere implementazioni diverse, mi imbatto in una necessità di implementazioni esplicite dell'interfaccia che diventa complicata per le grandi classi di dati.
Domanda : come faccio a garantire che due classi abbiano le stesse proprietà con il minor numero di problemi?
Disclaimer: lo chiedo, sapendo bene che potrei andare su questo nel modo sbagliato. Se c'è un modo diverso di fare quello che sto facendo, anche queste risposte sono benvenute.