Информация о пользовательском интерфейсе в доменном дизайне - PullRequest
0 голосов
/ 26 октября 2018

Я внедряю DDD в свой проект, и у меня есть модель с именем event (как на дне рождения, вечеринке и т. Д.).

У события есть дата начала и окончания, поэтому есть модель, такая как:

public class Event
{
    private DateTime _startDate;
    private DateTime _endDate;

    // methods omitted for brevity
}

Пока все хорошо, и я доволен этим.

Теперь в пользовательском интерфейсе раздела, который показывает даты начала и окончания, пользователь может выбрать цвет фона. Это может быть добавлено как:

public class Event
{
    private DateTime _startDate;
    private DateTime _endDate;
    private Color _dateColor;
}

И это может повторяться много раз для каждого раздела пользовательского интерфейса (раздел местоположения может иметь цвет и т. Д.).

Мне кажется, что в домене не должно быть определенных значений пользовательского интерфейса, но тогда, где еще я могу сохранить это?

Я также беспокоюсь о загрязнении домена всеми этими дополнительными полями, поэтому могу сделать что-то вроде:

public class Event
{
    public EventDates EventDates { get; private set; }
}

public class EventDates
{
    private DateTime _startDate;
    private DateTime _endDate;
    private Color _dateColor;
}

Но тогда возникает ощущение, что такие вещи, как дата начала / окончания, не должны быть в под-сущности, они являются ядром фактического события.

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018
  • Все ли события данного типа, то есть день рождения или вечеринка, имеют одинаковый цвет?

  • Необходимо ли объединять даты и отображать цвет в одном событии?

  • можно ли настроить отображение цвета с отдельной конфигурацией, а не указывать явно в событии?

Если цвета для разных типов событий могут бытьнастроен полностью отдельно, тогда я предлагаю сохранить отображаемую информацию о цвете в отдельном объекте.

0 голосов
/ 27 октября 2018

Я бы сделал что-то подобное с учетом масштабируемости и инкапсуляции:

public class Event
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public EventDisplayOptions DisplayOptions { get; set; }
}

public class EventDisplayOptions
{
    public Color DateBackgroundColor { get; set; }
    public Color SomeOtherFieldColor {get; set; }
}
...