Я использую 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;
}
Но тогда вы почувствуете, что такие вещи, как дата начала / окончания, не должны быть в подчиненной сущности, они являются основой фактического события.
Есть предположения?
Я бы сделал что-то подобное с учетом масштабируемости и инкапсуляции:
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; }
}
Все ли события определенного типа, например, день рождения или вечеринка, имеют одинаковый цвет?
Есть ли необходимость объединять даты и отображать цвет в одном событии?
Можно ли настроить цвет отображения с помощью отдельной конфигурации, а не указывать явно в событии?
Если цвета для разных типов событий можно настроить полностью отдельно, я предлагаю сохранить информацию, связанную с цветом, в отдельном объекте.
Мне нравится этот ответ, это очень изящный способ его инкапсуляции!