Реализация универсальных интерфейсов для коллекций виджетов? - PullRequest
0 голосов
/ 03 июля 2018

Мы пытаемся создать довольно простую систему отчетности для нашей аналитической команды. Это наша третья или четвертая итерация той же системы, но мы выполняем консолидацию и переписываем большую часть внутренней логики, чтобы упростить создание отчетов в будущем.

Одна из проблем, с которыми мы сталкиваемся, - это формирование интерфейсов, которые будут реализованы нашими виджетами для отчетов, чтобы протолкнуть их к нашему 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;
    }
}

Но отчет будет содержать коллекцию виджетов, и эту коллекцию необходимо будет перебрать в представлении, чтобы выбрать нужные ViewComponents и предоставить им подходящую модель, которую они ожидают. К сожалению, кажется, что большинство типов коллекций должны обеспечивать безопасность типов, и мне нужен способ сделать это немного лучше. В нашем нынешнем виде наш IWidget объект определяет ViewModel как object, и я не думаю, что это хорошая практика.

...