Pull to refresh

Comments 5

А можно для тех, у кого не очень большой опыт в разработке под iOS, пояснить – какие именно проблемы с UIKit?
Делал пару приложений и всё казалось логичным и удобным, особенно если есть возможность на Swift писать и Storyboard юзать. Но и с Obj-c и созданием элементов в коде тоже особо проблем не замечал...

Если для вас все логично и удобно то наверно вы не пытались покрывать код тестами. Иначе вы зразу бы столкнулись с тем что непонятно как организовывать передачу даних между экранами, кто на кого должен держать сильные ссылки, как обеспечить изолированость слоев (привет clean architecture) и собсвенно независимость экранов друг от дружки.

Тесты я писал, но не для UI, тут я согласен.


Передача данных между экранами прекрасно организуется через Segue (либо я что-то не так понял, делал не для тестов, а просто чтобы передать данные, например, в экран детализации о том, какой именно элемент был нажат).


Сильные ссылки у меня хранятся в том контроллере, который их создаёт...


Что такое изолированность слоёв я не понял, а экраны сами собой получаются изолированными, если не пытаться сделать что-то странное.

Возникает большой соблазн превратить UIContoller в анти-паттерн «god class». Как вам правильно заметили выше, это сильно усложняет покрытие кода тестами, и ухудшает такой важный для последующей поддержки кода параметр, как связность (coupling)

И дело не в передаче данных между экранами, а в том, что постепенно на UIController навешиваются обязанности заниматься чем угодно, что является грубым нарушением single responsibility principle.

Что такое изолированность слоёв я не понял


Я бы посоветовал поискать материалы на тему «луковой» архитектуры (onion architecture). Она хоть и придумывалась изначально для бэкенда, но даёт общее представление о том, какие бывают слои, и как их правильно изолировать.

Так god class практически с любой архитектурой можно накрутить, если захотеть. Мне показалось, что всё наоборот – подход Apple провоцирует деление кода на небольшие классы. Но – ещё раз – у меня мало опыта, возможно это справедливо только для небольших приложений, а в больших и сложных всё сложнее.

Sign up to leave a comment.