strongself / The-Book-of-VIPER

the one and the only
Other
958 stars 129 forks source link

Именование в Swift #60

Closed NikKovIos closed 7 years ago

NikKovIos commented 7 years ago

Хочу поднять вопрос правильного именования протоколов в Swift

Если в Objective-C понять протокол это или нет - можно по скобкам <>, то в swift 3 именование протоколов и названий классов не разделено и в связи с этим бывает происходит путаница класс это или протокол. Может в конце протоколов добавлять Protocol? Например ViewOutputProtocol.

Однако согласно конвенции добавлять Protocol в конце считается некрасиво и рекомендуют использовать прилагательные или причастия, образованные от существительного типа (..able, ..ing).

Каково ваше мнение?

mcrakhman commented 7 years ago

В частности, у нас на проекте мы придерживаемся следующего правила: протоколы называем без суффикса "Protocol", а конкретные реализации - с суффиксом "Implementation" (например, CalendarDataDisplayManager - CalendarDataDisplayManageImplementation).

Отдельный naming convention существует для VIPER модулей. Например, Presenter соответствует протоколам ViewOutput, ModuleInput и InteractorOutput (здесь мы понимаем, что суффиксы Input и Output могут быть только у протоколов).

Если протокол отражает какое-то свойство объекта, то мы добавляем окончание "able" (например, Mappable, SomethingConfigurable etc).

NikKovIos commented 7 years ago

Спасибо за ответ!

Ещё вопрос - как вы относитесь к объединению файлов интерфейса и имплементации в один свифтовый файл? В случае, если нужно сменить имплементацию просто добавляем новый файл имплементации и инджектим его к нужному интерфейсу?

В таком подходе есть плюс в скорости работы, так как не нужно постоянно переключаться между файлами интерфеса и имплементации. Также автоподстановка работает стабильнее - не нужно сохранять файлы интерфейса постоянно, чтобы появились подстановки в интерфейсе.

mcrakhman commented 7 years ago

Мы храним протоколы и реализации в разных файлах по следующим причинам:

Иногда в каких-то тестовых проектах, которые я пишу дома, я могу пренебречь этим правилом в целях экономии времени, но в продакшене все всегда в разных файлах.

NikKovIos commented 7 years ago

Тогда вопросец - может вы придумали способ быстро и удобно переключаться между протоколами и реализациями (как например можно в objective-C между файлами интерфеса и имплементации). Вся боль в разделении в том, что нужно часто переключаться между файлами и это неудобно.

mcrakhman commented 7 years ago

Есть 2 основных способа:

Также некоторые шорткаты можно еще подсмотреть вот здесь: https://medium.com/ios-geek-community/bobs-favorite-xcode-8-shortcuts-part-1-3-36381e07284d#.r72henn21