#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, он также вызовет метод делегирования и отключит сеанс, если новый статус равен отключению или отключен от сети.