36
Хто так будує? Антипаттерни iOS розробки Сергій Мумряк iOS Engineer @ Cogniance

Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Embed Size (px)

Citation preview

Page 1: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Хто так будує?Антипаттерни iOS розробки

Сергій Мумряк iOS Engineer @ Cogniance

Page 2: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Суб’єктивність оцінки якості системи

• цілі, які переслідує розробка системи

• досвід розробників

• ризики

Page 3: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Об’єкт-бог

Page 4: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Об’єкт-бог

+ Швидка імплементація

+ Низький поріг входження в розуміння архітектури

Page 5: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Об’єкт-бог

- Складність масштабування

- Відсутність кастомізації

- Високий поріг входження для підтримки

Page 6: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Об’єкт-бог в композиції іншого об’єкта-бога

Page 7: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Об’єкт-бог в композиції іншого об’єкта-бога

+ Низький поріг входження в розуміння архітектури

Page 8: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Об’єкт-бог в композиції іншого об’єкта-бога

- pow("Складність масштабування", 2)

- Відсутність кастомізації

- Високий поріг входження для підтримки

- Час для рефакторинга близький до нескінченності

Page 9: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Єдиний дата лоадер/провайдер

(частковий випадок об’єкта-бога)

Page 10: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Єдиний дата лоадер/провайдер

+ доступ і завантаження всіх данних з будь-якого місця

Page 11: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Єдиний провайдер данних

- доступ до всіх данних з будь-якого місця

- спагетті-код (зазвичай)

Page 12: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Дата лоадер як сабкласс реквест менеджера

Page 13: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Дата лоадер як сабкласс реквест менеджера

+ ?

Page 14: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Дата лоадер як сабкласс реквест менеджера

- знецінювання оригінального призначення об"єкта

- збитковість коду

- неможливість очевидного розділення задач по типам (REST запити, завантаження документів, відсилання данних, завантаження великої кількості данних і т.д.)

Page 15: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Нотіфікейшн від nil

Page 16: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Нотіфікейшн від nil

+ швидкий хак

+ простота (дуже-дуже простота) в будуванні архітектури

Page 17: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Нотіфікейшн від nil

- хак

- зменшення відповідальності

- зниження контролю над системою з боку розробника

- неочевидність

Page 18: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Робота з raw-даними від бекенда

Page 19: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Робота з raw-даними від бекенда

+ написав і забув

+ працює з базовими контейнерами (зазвичай)

Page 20: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Робота з raw-даними від бекенда

- складність оновлення

- неочевидність

- довгий і болісний перехід на нормальну модель

- читабельність коду відсутня (майже)

Page 21: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Парсер як частина модельного классу

Page 22: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Парсер як частина модельного классу

+ простота імплементації

+ прозора десеріалізація (тільки root-об’єкти)

Page 23: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Парсер як частина модельного классу

- майже відсутня абстрактність

- складність серіалізації ієрархії об"єктів

- неможливість десеріалізувати ієрархію об"єктів

Page 24: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Декільна Root в’юконтроллерів

Page 25: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Декільна Root в’юконтроллерів

+ ???

Page 26: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Декільна Root в’юконтроллерів

- необхідний хак для їхнього переключення

- заміна рутового об"єкта в рантаймі недопустима

- ніякої докумендації про поведінку аппи при зміні рут в’юкотроллера

- забудьте про анімації

Page 27: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Використання boolean замість сабклассінга (або будь-якого іншого рішення)

Page 28: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Використання boolean замість сабклассінга (або будь-якого іншого

рішення)

+ швидкий хак хотфікс

+ прозорий код (на час першого введення)

Page 29: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Використання boolean замість сабклассінга (або будь-якого іншого

рішення)

- головне джерело спагетті-кода

- pow("Складність", numberOfBooleans)

- довгий і не приємний рефакторинг

Page 30: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Як правильно?

Page 31: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Ніяк не правильно!

Page 32: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Як уникнути?• Divide and conquer

• знати паттерни програмування

• знати свій фреймворк

• писати код в стилі фреймворка

• критично мислити

• переймати знання і досвід через код (github, cocoapods, різні конференції і т.д.)

• НІКОЛИ не вважати stackoverflow джерелом знань

Page 33: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Що почитати/подивитись?

• Банда Чотирьох - Паттерни Проектування

• документація від Apple

• WWDC

• Василь Пастернак - Professional Software Development

Page 34: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

QA

Page 35: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

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/

Page 36: Lviv MD Day 2015 Сергій Мумряк "Хто так будує? Антипаттерни iOS розробки"

Дякуюwww.cogniance.com