У меня есть следующий сценарий: у меня есть кнопки и PreviewButton в слое Gui, у них есть общая часть с именем BasedButton.Кнопка знает только IButtonPresenter, интерфейс ButtonPresenter.У кнопки не должно быть логики, презентатор может содержать некоторую логику.Проблема в том, что PreviewButton - настолько простой класс, что ему не нужен ни один ведущий.За исключением одной вещи: функция hasLed (), которая в зависимости от типа кнопки (простой случай переключения) определяет, имеет ли индикатор Button и PreviewButton светодиод или нет. Где должна быть эта общая функция hasLed ()? Моя идея:
PreviewButton также должен иметь презентатор, а функция hasLed () должна быть в общей части Button.и ведущий PreviewButton.Проблема: кажется чрезмерным, что только для этой одной функции я должен представить докладчика.
Поместите эту логику: hasLed () в BasedButton (в общей части Button и PreviewButton).Проблема: я пытался избежать введения какой-либо логики в мой родной интерфейс.
Создайте некоторое пространство имен (или используйте пространство имен типа enum!) И поместите в него эту простую функцию как встроенную функцию.Проблема: «логика» помещена в «странный» и не ожидаемый класс.
Поместите функцию hasLed () в один из наших классов менеджера в моем уровне презентаторов.Преимущество: интерфейс менеджера доступен для всех родных классов Gui.И код остается общим (без дублирования кода).Недостаток: мои менеджеры с такой функцией кажутся немного странными.
Другая идея?
Может быть, сейчас я бы выбрал 4-й ...