ООП: связать настройку состояния с его отображением?

#objective-c #oop #coding-style

#цель-c #ооп #стиль кодирования #objective-c

Вопрос:

Допустим, у меня есть класс, который имеет три состояния: полноэкранное, оконное и свернутое. Состояние моего объекта хранится в виде перечисляемого типа,

 typedef enum {
    StateFullScreen,
    StateWindowed,
    StateMinimized
} State;
  

Если каждый раз, когда я меняю State , я вызываю два метода: setState: и showState: , должен ли я объединить эти действия в одно? Например, переопределить обычный синтезированный setState: метод и заставить его в зависимости от состояния вызывать соответствующий showState: метод? Или я должен сделать это наоборот, обойдя showState: call setState: ?

Является ли что-либо из этого хорошей практикой программирования, когда дело доходит до объектно-ориентированного проектирования?

Ответ №1:

Рассматривали ли вы возможность создания метода changeState (…)? Было бы достаточно просто создать рефакторинг первого прохода, который вызывает два других метода. Затем я бы провел дальнейший рефакторинг, чтобы полностью очистить его.

Комментарии:

1. Я проголосовал за вас, но я не думаю, что пойду по этому пути, поскольку не хочу, чтобы один из методов вызывался без другого.

2. Затем сделайте их закрытыми и вызовите из changeState() .

Ответ №2:

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

У меня есть класс сеанса, который имеет статусы подключения, отключения, онлайн и оффлайн. Если я вызову setStatus, он также вызовет метод делегирования и отключит сеанс, если новый статус равен отключению или отключен от сети.