Ho un'interfaccia di dominio ITransformation
con diverse classi di implementazione come RemoveRowsTransformation
e AddColumnTransformation
. L'albero di ereditarietà modella il modello di comando. L'interfaccia ITransformation
definisce un Execute(table)
. Ogni classe di implementazione contiene proprietà diverse che è necessario implementare il metodo. Ad esempio:
public class RemoveRowsTransformation : ITranformation {
public int TopRowsCount { get; private set; }
public int BottomRowsCount { get; private set; }
//snip
}
public class AddColumnTransformation : ITranformation {
public string ColumnName { get; private set; }
//snip
}
Diversi metodi di dominio richiedono o creano un IEnumerable<ITransformation>
. Questa enumerabile deve essere presentata nella vista (inviata come JSON tramite web API, in particolare) per la visualizzazione e la modifica. Come presentare più efficacemente i dati nell'enumerabile di trasformazioni (albero ereditario) nella vista o altrove?
Attualmente, ogni trasformazione concreta sta creando un viewmodel. Questo non mi sta bene, perché in questo modo il dominio è legato al livello vista. Inoltre, se è necessaria una visualizzazione diversa o se viene utilizzato un modello diverso per il salvataggio dei dati nel database, sarà necessario effettuare uno specifico metodo nel dominio per ogni conversione.
Un approccio alternativo che ho usato è quello di creare un'interfaccia che i modelli particolari erediteranno e i modelli di dominio che riempiono tali interfacce. Questo sembra più pulito, ma porta comunque a una grande quantità ingestibile di IDomainClassModel
e implementazioni per ogni singola cosa immaginabile.