Информация о пользовательском интерфейсе в предметно-ориентированном дизайне

Я использую 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;
}

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

Есть предположения?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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; }
}

Мне нравится этот ответ, это очень изящный способ его инкапсуляции!

ADringer 30.10.2018 21:41
  • Все ли события определенного типа, например, день рождения или вечеринка, имеют одинаковый цвет?

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

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

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

Другие вопросы по теме