我们正在尝试构建一个基本的报告系统,以供我们的分析团队使用。这是同一系统的第三或第四次迭代,但是我们正在合并和重写大部分后端逻辑,以使生成报告更容易。
我们遇到的一个问题是形成将由我们的报告小部件实现的界面,以将其推送到我们的ViewComponents
。
几个小部件的示例可能类似于以下内容:
public interface IWidget<T>
{
WidgetType WidgetType { get; set; }
string WidgetName { get; set; }
T ViewModel { get; set; }
}
public class ChartWidget : IWidget<Chart>
{
public WidgetType WidgetType { get; private set; }
public string WidgetName { get; set; }
public Chart ViewModel { get; set; }
public ChartWidget() {
WidgetType = WidgetType.Chart;
}
}
public class HeadlineBarWidget : IWidget<HeadlineBarData>
{
public WidgetType WidgetType { get; private set; }
public string WidgetName { get; set; }
public HeadlineBarData ViewModel { get; set; }
public ChartWidget() {
WidgetType = WidgetType.HeadlineBar;
}
}
但是报告将包含小部件的集合,并且该集合将需要在View中进行迭代,以获取适当的ViewComponent并为其提供所需的匹配模型。不幸的是,似乎大多数集合类型都需要确保类型安全,而我需要一种方法来使其更好。就目前而言,我们的IWidget
对象将ViewModel定义为object
,我认为这不是一个好习惯。