Именование в Swift
NikKovIos opened this issue · 5 comments
Хочу поднять вопрос правильного именования протоколов в Swift
Если в Objective-C понять протокол это или нет - можно по скобкам <>, то в swift 3 именование протоколов и названий классов не разделено и в связи с этим бывает происходит путаница класс это или протокол. Может в конце протоколов добавлять Protocol? Например ViewOutputProtocol.
Однако согласно конвенции добавлять Protocol в конце считается некрасиво и рекомендуют использовать прилагательные или причастия, образованные от существительного типа (..able, ..ing).
Каково ваше мнение?
В частности, у нас на проекте мы придерживаемся следующего правила: протоколы называем без суффикса "Protocol", а конкретные реализации - с суффиксом "Implementation" (например, CalendarDataDisplayManager - CalendarDataDisplayManageImplementation).
Отдельный naming convention существует для VIPER модулей. Например, Presenter соответствует протоколам ViewOutput, ModuleInput и InteractorOutput (здесь мы понимаем, что суффиксы Input и Output могут быть только у протоколов).
Если протокол отражает какое-то свойство объекта, то мы добавляем окончание "able" (например, Mappable, SomethingConfigurable etc).
Спасибо за ответ!
Ещё вопрос - как вы относитесь к объединению файлов интерфейса и имплементации в один свифтовый файл? В случае, если нужно сменить имплементацию просто добавляем новый файл имплементации и инджектим его к нужному интерфейсу?
В таком подходе есть плюс в скорости работы, так как не нужно постоянно переключаться между файлами интерфеса и имплементации. Также автоподстановка работает стабильнее - не нужно сохранять файлы интерфейса постоянно, чтобы появились подстановки в интерфейсе.
Мы храним протоколы и реализации в разных файлах по следующим причинам:
- у одной реализации может быть несколько протоколов (например, презентер всегда соответствует нескольким протоколам), в этом случае объединять файлы, очевидно, не имеет смысла,
- у одного протокола может быть много реализаций (так часто бывает в проектах практически любой сложности), тем самым, не логично отдавать приоритет какой-то реализации и объединять ее в один файл с протоколом.
Иногда в каких-то тестовых проектах, которые я пишу дома, я могу пренебречь этим правилом в целях экономии времени, но в продакшене все всегда в разных файлах.
Тогда вопросец - может вы придумали способ быстро и удобно переключаться между протоколами и реализациями (как например можно в objective-C между файлами интерфеса и имплементации). Вся боль в разделении в том, что нужно часто переключаться между файлами и это неудобно.
Есть 2 основных способа:
- поскольку протокол и реализация находятся в одной папке, то можно использовать Command-Shift-J (переходит на текущий файл в файл-менеджере слева и подсвечивает его) и стрелки вниз/вверх для перехода между файлами,
- использовать Command-Shift-O для поиска файла по имени.
Также некоторые шорткаты можно еще подсмотреть вот здесь: https://medium.com/ios-geek-community/bobs-favorite-xcode-8-shortcuts-part-1-3-36381e07284d#.r72henn21