Pull to refresh

Comments 13

Хм паттерн на паттерне сидит и паттерном погоняет.

Моя неосуществимая мечта что бы на всех уровнях была абстракция, а компилятор собирал все в жесткий кирпичный код.

И если НУЖНО!!! Разработчику!!! Включался специальный «Супермен» и разворачивал этот байт код в абстракции и прочие «сахары»
Для этого нужен язык который будет описывать что надо, а не как делать. И потом учитывая ограничения синтезировать монолитный код.
NoFearJoe, как думаешь, можно ли считать проблемой в таком подходе, что в протокол открывается внутренняя реализация? Т.е. наружу от роутера начинает торчать не только close(), но и transitionHandler, а от интерактора service?

И, как понимаю, сделать их private тоже нельзя, т.к. тогда нельзя будет инжектить снаружи.

Да, верно — все зависимости становятся доступными извне, но только для чтения. Это можно обойти, правда, потребуется больше протоколов :). Примерно так это может выглядеть:


protocol TransitionHandlerHolder {
    var transitionHandler: UIViewController! { get }
}

protocol CloseRouterTrait {
    func close()
}

extension CloseRouterTrait where Self: TransitionHandlerHolder {
    func close() {
        self.transitionHandler.dismiss(animated: true, completion: nil)
    }
}
Меня беспокоит следующее соображение.

Интерфейсы, протоколы, расширения и т.д.… Ведь это всё подмножество наследования классов в общем и множественного наследования в частности.

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

Не лучше ли просто сказать: «Вот множественное наследование — это сложный и мощный инструмент, которым ты, падаван, можешь и порезаться. Но изучив его один раз, ты изучишь его десять раз, и сможешь применять тысячей возможных способов.»

Зачем весь этот зоопарк технологий и разномастных названий одного и того же?
Сорян, не с первого раза картинка правильно вставилась
Выглядит как абстракции ради абстракций. Статья с названием «Как избавить проект от лишних килограммов» содержит в минусах «резко возрастающее количество протоколов» и «Иногда код может выглядеть не таким понятным, как при использовании обычных подходов»
Несмотря на то, что количество протоколов увеличивается, общий объем кода уменьшается сильнее, так как большие блоки кода перестают дублироваться. Парадокс, в общем.
Объем кода уменьшается, но
Иногда код может выглядеть не таким понятным, как при использовании обычных подходов
. Если сейчас это и выглядит хорошем решением, имхо, в будущем сделает код только хуже.
Это я про те случаи, когда в один класс добавлено много traits и становится непонятно откуда какой метод. Хотя, при использовании любого архитектурного решения, главное — делать это в меру, тогда не должно быть существенных проблем.
В строчках исходного когда уменьшается. А в байтах бинарника может и увеличиваться. В Убере вон в борьбе за размер бинарника повыпиливали протоколы везде где можно.
Чем плох размер бинарника? Или это Apple продаёт память по цене в 50 раз дороже, чем он д.б. была ставить? Вопрос без иронии, увеличить кругозор.
Sign up to leave a comment.