Каковы технические ограничения RxSwift для отладки? - PullRequest
1 голос
/ 12 февраля 2020

Контекст: Моя команда запускает новый проект Swift среднего размера ( около 20 ММ ), и я думаю разработать его в RxSwift. Один из моих менеджеров подозревает, что однажды у него был плохой опыт отладки в Реактивном программировании , поэтому он предлагает избегать RxSwift и go с классическим Swift. Я пытаюсь выяснить недостатки RxSwift и не нашел ни одного из их , упомянутых о проблемах отладки.

Вопрос: Каковы фактические технические ограничения RxSwift для возможности отладки?

1 Ответ

2 голосов
/ 12 февраля 2020

Я использую RxSwift с 2015 года, когда он впервые появился. Я вложил это во множество малых и средних проектов за эти годы. Я бы не назвал это сложным для отладки, но это отличается для отладки. Как отметил @AjinkaSharma в комментариях, отслеживание стека - очень неприятное занятие, так что даже не беспокойтесь. Лучше поместить .debug() операторов в стратегические c места.

Что еще более важно, если вам даже немного сложно заставить наблюдаемую цепочку работать так, как вы хотите, написать юнит тест . Чрезвычайно легко обернуть немного логики c в оператора, а затем написать тест для него с помощью RxTest, и я не знаю, почему больше людей не делают этого, кроме того, что они привыкли к юнит-тестам, являющимся болью при использовании MVC.

По моему опыту, самая трудная часть для отладки - утечка ресурсов. Даже обнаружить их может быть сложно, если вы не включите флаг TRACE_RESOURCES в свою отладочную сборку. После того, как вы это сделаете, вы можете добавить следующее в ваш делегат приложения:

#if DEBUG
_ = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
    .map { _ in RxSwift.Resources.total }
    .distinctUntilChanged()
    .subscribe(onNext: { print("♦️ Resource count \($0)") })
#endif

Таким образом, вы сможете отслеживать количество ресурсов при go назад и четвертом между экранами, чтобы убедиться, что все освобождается правильно.

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

Присоединяйтесь к нам на слабом месте RxSwift, где есть множество знающих и активных участники, которые будут рады ответить на быстрые вопросы или поделиться небольшим количеством кода в любое время дня. https://rxslack.herokuapp.com

...