我有一个域接口ITransformation,它有几个实现类,比如RemoveRowsTransformation和AddColumnTransformation。继承树对命令模式进行建模。ITransformation接口定义了一个Execute(table)。每个实现类包含实现方法所需的不同属性。例如:
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
}各种域方法都需要或创建一个IEnumerable<ITransformation>。此枚举必须在视图中显示(特别是以JSON形式通过web发送)以供查看和编辑。如何最有效地在视图或其他地方显示可枚举的转换(继承树)中的数据?
目前,每个具体的转换都在创建一个视图模型。这并不适合我,因为这样域就被绑定到视图层了。此外,如果需要不同的视图或使用不同的模型将数据保存到数据库中,则必须为每个转换创建域中的特定方法。
我使用过的另一种方法是创建一个特定模型将继承的接口,并填充这些接口。这看起来更干净,但仍然会导致大量无法管理的IDomainClassModel和实现,以满足每一件可以想象的事情。
发布于 2017-07-26 20:34:07
如果您在视图中插入一个字典,将具体类型的ITransformation映射到适当的转换视图,该怎么办?您可以迭代您的IEnumerable<ITransformation>,调用每个GetType(),并使用字典实例化每个视图。
这种做法有若干好处:
ITransformation的多个具体实现,可以选择重用相同的视图,而无需重复代码或杂乱的设计。https://softwareengineering.stackexchange.com/questions/354500
复制相似问题