iOS Makes Me Hate
3.94K subscribers
1.16K photos
167 videos
15 files
1.34K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
💎 Клиентская архитектура

"если все, что у вас есть, это молоток, все выглядит как гвоздь"

Проблема клиентских приложей в большом росте связей и зависимостей между логикой на разных уровнях: бизнес-кейсами, отрисовкой и управлением данными.

Как организовать инфраструктуру приложения?
Ответов на этот вопрос множество. Пройдемся по нескольким вкратце и возьмем не только мобильные приложения. И почти не затронем iOS.

CLEAN — одна из основных концепций разделения логики тестируемым и гибким способом.

FSD (Feature Sliced Design) — Основная цель этой методологии - сделать проект более понятным и структурированным в условиях постоянно меняющихся бизнес-требований за счет нарезки на отрезки и четкой структуры

BLoC (Business Logic Component) — разрабы флаттера придумали свою архитектуру для разделения бизнес логики от интерфейса

Как можно заметить цели архитектуры — это не организация папок, а декомпозиция сущностей. Которые легко удалять, масштабировать и тестировать.

- Основы клиентской архитектуры
- Vertical Slice Architecture
- DDD на практике
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥21👌1🏆1
Layered Architecture to Design iOS Apps

Еще интересных статей про разделение архитектур на слои. Наверное, она вам что-то должна напомнить...

Ничего нового, скорее хорошая структура и визуализация
4👍2
☁️ прикольный тред чела, который готовился на собесы систем дизайна в западные компании

Опять же: проектирование — это знание системы на всех уровнях. Начиная от знания сети и бэка, заканчивая платформы и бизнес логики

https://twitter.com/e_matsyuk/status/1519539090097643521?s=20&t=DDEe04Mi8X3wONvKVd4hCw
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
🥱 MVC == MVP

🍏 MVC

Большое заблуждение в индустрии, что View и Controller связаны в одну сущность — ViewController. Но это не так. В своей документации эйпл говорила о комбинирующих ролях. Такое объединение допустимо лишь для некоторых апок, но не для всех.

Но если Controller != ViewController, и роль Presentor выполняет Controller, то чем тогда MVC отличается от MVP?

Фаулер описал это еще в далеком 2006 году для GUI архитектур. Еще тогда он описал о проблеме толковании MVC паттерна:

☁️ Разные люди, читающие о MVC в разных местах, берут из него разные идеи и описывают их как «MVC». Если это не вызывает достаточной путаницы, вы получаете эффект непонимания MVC, который развивается через систему китайского шепота.

Вся суть и история МVC — это в Separeted Presentation, где выделяется логика предметной области и вьюхами.

🍏 MVP
Шаблон проектирования MVP необходим уже тогда, когда ваше приложение имеет множество View.

Если просто, то основное отличие, это в том, что презентор должен ссылаться на вью. Когда в каноничном MVC — Controller не знает о вью.

💎 Но только не в иос. У нас MVC от эйпла одно и то же, что и MVP. Но многие придумали себе несуществующих проблем и сделали VIPER

- Дока эйпла по MVC
- Разница между MVC vs MVP
- Мартин Фаулер и GUI архитектуры
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁6😐4🔥2
Архитектура Твиттера
👍2🔥2💯2
вот заметил еще один неоспоримый (за спор бан) плюс юнит тестов — это скорость выполнения бизнес-кейса.

сейчас мне нужно было протестить поведение в одном из сложных флоу:
1. Запустить сборку
2. авторизоваться под несколькими учетками
3. воспроизвести поведение протухших токенов, отправки диплинков и тп
4. дождаться результата

Нетрудно посчитать, что симулятором и руками у меня бы это заняло пару минут. Умножай на 10-15 кейсов = в лучшем случае пару десятков минут, а в худшнем пару часов.

С написанными заранее моками и другими сущностями на каждый кейс ушло по 5-10 сек
👍13🌚2
Оптимальный способ хранения кэша картинок
Anonymous Quiz
14%
CoreData
50%
NSCache
5%
Realm
25%
FileManager
2%
RAM
5%
UserDefaults
#books

Для кого-то любимая рубрика о книгах. Долго думал стоит ли писать что-то о ней после прочтения.

не советую.

Начало бодрое, но дальше уже вода водой. Кроме антипаттернов в конце и какой-то систематизации вначале не стоит тратить время

лучше уж рефакторинг, клин или другие популярные книги перечитать
👍5😁1🌭1
Этот канал не только про иос разработку, а в том числе и про образ жизни. Поэтому буду делиться вещами, которые помогают мне лучше кодить. А вы делитесь тоже.

Одна из супер главный вещей для прогера — музыка. Она создает ритм и фон работе. Теперь будем собирать плейлисты для эффективной работы в такой сложной науке как кнопкостроение.

Начну с себя. Хоть я нихера не музыкант и не смогу описать собранный жанр, но попробую описать сердцем.

Собранные мной звуки электронной музыки бьют нотами индустриализации и модерна.

Здесь смешалось всё. Симфонии фиксов багов. Танец битов и байтов. Скачки напряжение и толчки бассов фокусят на тональность дедлайна. Где-то музыка давит тяжестью толстых реквестов. Где-то окрыляет быстрой сборкой.

🎹 плейлист: https://music.yandex.ru/users/levbond93/playlists/1013
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7👍2🔥1🤔1
Single Responsibility Principle

В "Чистой архитектуре" Мартин говорит:

Принцип единственной ответственности касается функций и классов, но он проявляется в разных формах на еще двух более высоких уровнях:

На уровне компонентов он превращается в принцип согласованного изменения

💎

Принцип согласованного изменения — в один компонент должны включаться классы, изменяющиеся по одним причинам и в одно время. В разные компоненты должны включаться классы, изменяющиеся в разное время и по разным причинам. По сути это перефразированный SRP, только для компонентов. Иначе говоря, компонент не должен иметь несколько причин для изменений.

Если два класса тесно связаны, физически или концептуально, настолько, что всегда будут изменяться вместе, они должны принадлежать одному компоненту. Это поможет уменьшить трудозатраты, имеющие отношение к повторному выпуску, тестированию и развертыванию программного обеспечения.

Сходство с принципом единственной ответственности:

Принцип SRP требует выделять методы в разные классы, если они изменяются по разным причинам.
Принцип CCP аналогично требует выделять классы в разные компоненты, если они изменяются по разным причинам. Оба принципа можно привести к общей формуле:

Собирайте вместе все, что изменяется по одной причине и в одно время. Разделяйте все, что изменяется в разное время и по разным причинам.

- Common Closure Principle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Какая архитектура UI слоя перекочевала в iOS с книги "Чистая архитектура"?
Anonymous Quiz
14%
MVC
10%
MVVM
6%
Микро-сервисная
4%
REDUX
26%
VIPER
17%
VIP
22%
PIDOR
Продолжаю собирать принципы из чистой архитектуры.

Common Reuse Principle в iOS

(Common Reuse Principle; CRP) Принцип совместного повторного использования — помогает определять, какие классы и модули должны включаться в компонент.

Он указывает, что в компонент должны включаться классы и модули, используемые совместно.
Классы редко используются по отдельности.

Проще говоря, нам не нужно зависеть от интерфейсов, модулей, компонентов, которые нам не нужны, но тянутся с другим компонетом
🔥1🍓1
Component cohesion (Связанность компонентов)

Выше познакомились с принципами связанности, но иногда они вступают в противоречие с друг другом

Архитектор, уделяющий внимание только принципам REP и CRP, обнаружит, что простое изменение вовлекает слишком большое количество компонентов . С другой стороны, архитектор, уделяющий особое внимание принципам CCP и REP, вынужден будет выпускать слишком много ненужных версий.

⚖️ Хороший архитектор найдет в этом треугольнике противоречий золотую середину, отвечающую текущим нуждам разработчиков, а также подумает об изменениях, которые могут произойти в будущем . Например, на ранних этапах разработки проекта принцип CCP намного важнее, чем REP, удобство разработки важнее удобства повторного использования.

- Component cohesion: principles and benefits
- 3 правила связанности для джуна
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
одна из идей за которую я топлю — высокая техническая культура и выход за рамки поверхностного изучения инструментов своей платформы.

вот норм видос как изучать быстро разные языки и технологии. стандартная тема, что все упирается в компьютер сайнс, но в более доступной форме

допом еще бонуска из видео про важность изучения дополнительных языков
👍10🔥1