Поділ проблеми в флатера додатків

Останнім часом, я повинен був реалізувати адаптаційні проходження для Диспетчер завдань UDN новачки! Це було дуже важливим завданням, так як багато нових користувачів збиралися відкрити..

Поділ проблеми в флатера додатків

Udn Webber

детонація Розробник

Останнім часом, я повинен був реалізувати адаптаційні проходження для Диспетчер завдань UDN новачки! Це було дуже важливим завданням, так як багато нових користувачів збиралися відкрити платформу з неймовірно смішна реклама у нас прем'єра на Super Bowl ! ✨

через Диспетчер завдань UDN

Покрокове керівництво дозволяє наші численні нові користувачі, які, можливо, не знають, Диспетчер завдань UDN проте, щоб швидко зрозуміти, як використовувати кілька функцій з програми. Це постійні зусилля, так само, як новий Диспетчер завдань UDN Університет ресурси ми переслідуємо! 🚀

На щастя, архітектура програмного забезпечення позаду Диспетчер завдань UDN Детонація мобільний додаток дозволило мені реалізувати цю функціональність досить швидко, навіть повторне використання реальних віджетів з програми! Це означає, що проходження гри є динамічною, гнучкою, і точно збігається з реальними екранами застосування програми-і буде продовжувати, навіть тоді, коли віджети будуть розвиватися.

Я також був в змозі реалізувати функціональні можливості через праве поділ проблем.

Давайте подивимося, що я маю на увазі тут. 🤔

поділ проблем

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Проектування архітектури програмного забезпечення є одним з найбільш складних тем для інженерних груп. Серед усіх обов'язків, завжди важко передбачити майбутні еволюції програмного забезпечення. Ось чому створення добре шарувата і розв'язки архітектури може допомогти вам і вашим товаришам по команді з великою кількістю речей!

Основна перевага створення невеликих від'єднані систем, безсумнівно, здатність бути свідком у суді ! І це те, що допомогло мені створити демонстраційну альтернативу існуючих екранів з програми!

Керівництво крок за кроком

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Тепер, як ми можемо застосувати ці принципи до додатка Flutter?

Ми поділимося кілька техніку ми використовуємо для складання Диспетчер завдань UDN за допомогою простого прикладу проходження гри.

Приклад настільки просто, що він не може просвітити всі переваги за ним, але повірте, це допоможе вам створити набагато більше підтримувані додатки флатера зі складними базами коду. 💡

застосування

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Як приклад, ми створимо додаток, яке відображає населення США за кожен рік.

через Диспетчер завдань UDN

У нас є два екрани тут:

Ми зосередимося на реалізація, так як це є найбільш цікавою з асинхронним викликом.

Крок 1. Наївний підхід

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Найбільш очевидна реалізація для нашого застосування, полягає в використанні одного для всієї логіки.

Для доступу до запрошенням році ми читаємо від успадковується віджет.

Цей приклад викликає метод функція від пакет, щоб отримати дані з datausa.io API , Аналізує отриману за допомогою JSON спосіб від бібліотека, і тримати як частина держави з майном на ім'я .

Для того, щоб створити дерево віджетів, ми використовуємо , Який перебудовує себе щодо поточного стану нашого асинхронний виклик.

Добре, реалізація коротка і використовує тільки вбудовані віджети, але тепер думають про наш первісному намір: створення демо-альтернативи (або тести) для цього екрану. Це дуже важко контролювати результат виклику HTTP, щоб змусити додаток для візуалізації в певному стані.

Ось де поняття інверсія управління допоможе нам. 🧐

Крок 2. Інверсія управління

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Цей принцип може бути важко зрозуміти, для нових розробників ( а також важко пояснити ), Але загальна ідея полягає в тому, щоб витягти заклопотаності, за межами наших компонентів -так, що вони не несуть відповідальність за вибір поведінки-і передати його замість цього.

У більш загальній ситуації, вона просто складається з створення абстракцій і ін'єкційне реалізації в наші компоненти, так що їх реалізація може бути змінена пізніше, якщо це необхідно.

Але не хвилюйтеся, це буде мати більше сенсу після того, як наш наступний приклад! 👀

Для того, щоб контролювати HTTP виклик нашого API, ми виділяли нашу реалізацію в спеціалізований клас. Ми також створили клас, щоб дані легше маніпулювати і підтримувати.

У нашому прикладі ми використовуємо добре відомі постачальник пакет впорснути Примірник в корені нашого дерева.

Постачальник дозволяє будь-якому нащадкові віджет (" люблю наш ) читати найближчий верхня в дереві. Потім ми можемо використовувати його метод, щоб почати наш Замість фактичної реалізації HTTP.

Тепер ми можемо скористатися цим!

У разі, якщо ви не знаєте: які класи в дротику також побічно визначити відповідний інтерфейс . Це дозволяє нам забезпечити альтернативну реалізацію який завжди повертає той же екземпляр з його виклики методів.

цей метод

Тепер у нас є всі ключі, щоб відобразити демонстраційний екземпляр класу !

Ми просто перевизначити в даний час за умови, Примірник, оточивши наш в постачальника, який створює Примірник замість цього!

І ось це-наша читає цей демонстраційний екземпляр замість цього, і використовує наші дані замість виклику HTTP.

Це відмінний приклад Інверсія управління. Наш віджет не несе відповідальності за логіку отримання даних більше, але воно делегує замість виділеного об'єкта клієнта. І тепер ми в змозі створити демонстраційні екземпляри екрану, або реалізувати віджет тестів для нашого екрану! Чудово! 👏

Але ми можемо зробити ще краще!

Оскільки ми не в змозі змоделювати стан завантаження, наприклад, ми не маємо повний контроль над будь-якою зміною стану на нашому рівні віджета.

Крок 3. Управління державного

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Це гаряча тема в Флаттера!

Я впевнений, що ви вже читали довгі нитки людей, які намагаються обрати кращий стан управління Розчин для флатера. І ясно, що це не те, що ми будемо робити в цій статті. На нашу думку, до тих пір, як ви відокремити бізнес-логіку від вашої візуальної логіки, все в порядку! Створення цих шарів дуже важливо для ремонтопридатності. Наш приклад простий, але в реальних додатках, логіка може швидко стати складним і такий поділ робить його набагато простіше, щоб знайти чисто логічні алгоритми. Ця тема часто резюмувати державне управління .

У цьому прикладі ми використовуємо Basic поряд з . Але ми могли б також використовуватися flutter_bloc або riverpod (Або інше рішення) , І це було б добре працювали, теж. Принципи залишаються тими ж, і до тих пір, як ви відокремлені ваші стану і логіку, можна навіть до порту ваш кодова від одного з інших рішень.

Це поділ також допомагає нам контролювати будь-який стан наших віджетів, щоб ми могли висміювати його всіляко!

Замість того, щоб покладатися на з рамок, ми тепер представляємо наше стан екрану в якості об'єкт.

Важливо також, щоб реалізувати і способи, щоб зробити наш об'єкт можна порівняти за значенням. Це дозволяє виявити, якщо два примірника повинні бути розглянуті різні.

💡 equatable або заморожена Пакети великі варіанти, які допоможуть вам реалізувати і методи!

Наша держава завжди пов'язане з , Але у нас є чотири різних можливе стану щодо того, що ми хочемо показати користувач:

Ці стани ясніше, ніж , Так як він дійсно представляє наші випадки використання. І знову ж таки, це робить наш код більш ремонтопрігоден!

💡 Ми рекомендуємо Типи союзу від замороженого пакету представляти свої логічні стану! Це додає багато утиліт, таких як або методи.

Тепер, коли ми маємо уявлення нашої держави, ми повинні зберігати його екземпляр десь це мета з . Він буде тримати струм Примірник в його власності і нададуть методи для поновлення стану.

ми забезпечуємо початковий стан, і яким чином будуть завантажуватися даних з і оновити поточну .

Щоб створити екземпляр і спостереження за станом нашого екрану, ми також покладатися на постачальника і його . Цей вид провайдера автоматично шукає будь-який створений і буде ініціювати відновлення з кожен раз, коли він отримує повідомлення про зміну (Коли наше значення повідомника відрізняється від попереднього).

Чудово! Наша архітектура додатка починає виглядати досить добре. Всі розділені на певні верстви, з певними проблемами! 🤗

Одна річ все ще відсутня для тестування, хоча ми хочемо визначити струм контролювати стан нашого .

Крок 4. Віджет візуального виділеного макета

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

На останньому кроці ми дали трохи занадто сильно відповідальність за нашу віджет: він несе відповідальність за встановлення . І, як ми бачили раніше, ми намагаємося уникати будь-якої логічної відповідальності на рівні перегляду!

Ми можемо легко вирішити це, створивши інший шар для нашого віджету екрану: ми розділимо наш віджет на два:

Поєднуючи два, ми зможемо просто створити демо / тестові екземпляри, але маючи для справжнього використання у нашій заявці.

Досягти кращого поділу занепокоєння, ми перемістили все під віджет до присвяченого віджет. Цей новий віджет лише споживає дані і не несе відповідальності за будь-яку інстанцію. Це просто перетворює стан читання до певного дерева віджетів.

Точний дзвонити і інстанція залишається в , і цей віджет просто повертає з попередньо налаштованим деревом залежності!

Це незначне вдосконалення є конкретним для використання постачальника, але ви помітите, що ми також додали a так що будь-який віджет нащадок може безпосередньо споживати a . Це полегшить макету даних.

Ніколи не соромтеся витягти дерево віджет у виділений клас! Це покращить продуктивність, і зробити код більш підтримкою.

У нашому прикладі ми створили один візуальний віджет макета для кожного з асоційованих типів стану:

Тепер ми маємо повний контроль над тим, що ми можемо знущатися та відображення на наш екран!

Ми просто повинні обертати з для імітації стану макета.

Висновок

Диспетчер завдань UDN перетворює вашу роботу з провідними властивостями

Створення підтримуваної архітектури програмного забезпечення остаточно нелегко! Передбачаючи майбутні сценарії, можуть вимагати багато зусиль, але я сподіваюся, що деякі поради, які я поділяв, допоможе вам у майбутньому!

Приклади можуть виглядати просто - це може навіть схоже, що ми перевищує інженегу, - але складність вашої програми зростає, маючи ці стандарти вам багато допоможуть вам! 💪

Весело провести час, і дотримуйтесь блогу, щоб отримати більше технічних статей, як це! Залишайтеся на зв'язку!

Зв'язатися з нами

Ви шукаєте простий, швидкий, легкий, і простий у використанні рішення для вашого бізнесу? Зв'яжіться з нами зараз!