lviv md day 2015 Сергій Мумряк "Хто так будує? Антипаттерни...
TRANSCRIPT
![Page 1: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/1.jpg)
Хто так будує?Антипаттерни iOS розробки
Сергій Мумряк iOS Engineer @ Cogniance
![Page 2: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/2.jpg)
Суб’єктивність оцінки якості системи
• цілі, які переслідує розробка системи
• досвід розробників
• ризики
![Page 3: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/3.jpg)
Об’єкт-бог
![Page 4: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/4.jpg)
Об’єкт-бог
+ Швидка імплементація
+ Низький поріг входження в розуміння архітектури
![Page 5: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/5.jpg)
Об’єкт-бог
- Складність масштабування
- Відсутність кастомізації
- Високий поріг входження для підтримки
![Page 6: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/6.jpg)
Об’єкт-бог в композиції іншого об’єкта-бога
![Page 7: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/7.jpg)
Об’єкт-бог в композиції іншого об’єкта-бога
+ Низький поріг входження в розуміння архітектури
![Page 8: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/8.jpg)
Об’єкт-бог в композиції іншого об’єкта-бога
- pow("Складність масштабування", 2)
- Відсутність кастомізації
- Високий поріг входження для підтримки
- Час для рефакторинга близький до нескінченності
![Page 9: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/9.jpg)
Єдиний дата лоадер/провайдер
(частковий випадок об’єкта-бога)
![Page 10: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/10.jpg)
Єдиний дата лоадер/провайдер
+ доступ і завантаження всіх данних з будь-якого місця
![Page 11: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/11.jpg)
Єдиний провайдер данних
- доступ до всіх данних з будь-якого місця
- спагетті-код (зазвичай)
![Page 12: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/12.jpg)
Дата лоадер як сабкласс реквест менеджера
![Page 13: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/13.jpg)
Дата лоадер як сабкласс реквест менеджера
+ ?
![Page 14: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/14.jpg)
Дата лоадер як сабкласс реквест менеджера
- знецінювання оригінального призначення об"єкта
- збитковість коду
- неможливість очевидного розділення задач по типам (REST запити, завантаження документів, відсилання данних, завантаження великої кількості данних і т.д.)
![Page 15: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/15.jpg)
Нотіфікейшн від nil
![Page 16: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/16.jpg)
Нотіфікейшн від nil
+ швидкий хак
+ простота (дуже-дуже простота) в будуванні архітектури
![Page 17: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/17.jpg)
Нотіфікейшн від nil
- хак
- зменшення відповідальності
- зниження контролю над системою з боку розробника
- неочевидність
![Page 18: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/18.jpg)
Робота з raw-даними від бекенда
![Page 19: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/19.jpg)
Робота з raw-даними від бекенда
+ написав і забув
+ працює з базовими контейнерами (зазвичай)
![Page 20: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/20.jpg)
Робота з raw-даними від бекенда
- складність оновлення
- неочевидність
- довгий і болісний перехід на нормальну модель
- читабельність коду відсутня (майже)
![Page 21: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/21.jpg)
Парсер як частина модельного классу
![Page 22: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/22.jpg)
Парсер як частина модельного классу
+ простота імплементації
+ прозора десеріалізація (тільки root-об’єкти)
![Page 23: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/23.jpg)
Парсер як частина модельного классу
- майже відсутня абстрактність
- складність серіалізації ієрархії об"єктів
- неможливість десеріалізувати ієрархію об"єктів
![Page 24: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/24.jpg)
Декільна Root в’юконтроллерів
![Page 25: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/25.jpg)
Декільна Root в’юконтроллерів
+ ???
![Page 26: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/26.jpg)
Декільна Root в’юконтроллерів
- необхідний хак для їхнього переключення
- заміна рутового об"єкта в рантаймі недопустима
- ніякої докумендації про поведінку аппи при зміні рут в’юкотроллера
- забудьте про анімації
![Page 27: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/27.jpg)
Використання boolean замість сабклассінга (або будь-якого іншого рішення)
![Page 28: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/28.jpg)
Використання boolean замість сабклассінга (або будь-якого іншого
рішення)
+ швидкий хак хотфікс
+ прозорий код (на час першого введення)
![Page 29: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/29.jpg)
Використання boolean замість сабклассінга (або будь-якого іншого
рішення)
- головне джерело спагетті-кода
- pow("Складність", numberOfBooleans)
- довгий і не приємний рефакторинг
![Page 30: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/30.jpg)
Як правильно?
![Page 31: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/31.jpg)
Ніяк не правильно!
![Page 32: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/32.jpg)
Як уникнути?• Divide and conquer
• знати паттерни програмування
• знати свій фреймворк
• писати код в стилі фреймворка
• критично мислити
• переймати знання і досвід через код (github, cocoapods, різні конференції і т.д.)
• НІКОЛИ не вважати stackoverflow джерелом знань
![Page 33: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/33.jpg)
Що почитати/подивитись?
• Банда Чотирьох - Паттерни Проектування
• документація від Apple
• WWDC
• Василь Пастернак - Professional Software Development
![Page 34: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/34.jpg)
QA
![Page 35: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"](https://reader034.vdocuments.pub/reader034/viewer/2022042723/58ec422a1a28abde4e8b4757/html5/thumbnails/35.jpg)
Design Patterns Explained Simply https://sourcemaking.com/design-patterns-book
Professional Software Development by Vasyl Pasternak https://speakerdeck.com/vasylp/professional-software-development
AFNetworking https://github.com/AFNetworking/AFNetworking
Alamofire https://github.com/Alamofire/Alamofire
Realm.io https://realm.io/docs/objc/latest/