Начните с предметно-ориентированного проектирования в своих кодовых базах Flutter.
Это пример настройки доменно-ориентированного дизайна для Flutter. Я использую скелетное приложение Flutter, чтобы все было просто. Давай начнем.
Основной или доменно-ориентированный дизайн
Основной концепцией предметно-ориентированного проектирования является использование объектов-значений в качестве атомарных единиц для связи с компонентами и слоями. На этот раз мы создаем очень простой объект-значение:
Вы заметите, что мы помечаем его как неизменяемый и что он использует миксин Equatable. И поэтому, когда мы используем this в качестве базового класса, он также имеет тенденцию быть объектом-значением:
Во-первых, давайте реализуем это:
Теперь давайте расширим его до Model
:
И затем реализация SampleItemModel
:
А теперь давайте посмотрим, как мы это тестируем:
Я использую mocktail для макетов, но mockito
также имеет тот же базовый API, вот макеты:
И макет Model
:
И тогда тест будет:
Теперь помните, что это каркасное приложение, в котором есть только модель списка и нет пользовательского ввода.
Также нет никакой логики для доступа к какому-либо нелокальному API. Таким образом, осталось добавить один источник данных, одноразовый вариант использования и модель представления списка. Итак, добавим это.
Завершение примера
Начнем с реализации модели представления списка:
И модульный тест будет таким:
И теперь нам нужен источник данных для этой модели представления списка:
Для интерфейсов источника данных, репозитория и варианта использования мы используем пакет Dartz
:
Теперь позвольте мне немного поговорить об ошибках и исключениях. Теперь позвольте мне спросить, почему я не использую здесь исключение? Две ключевые причины.
Во-первых, каждый раз, когда возникает ошибка, он дает трассировку стека.
Во-вторых, очевидно, что мы сопоставляем наш уровень предметной области, чтобы не создавать исключения для остановки приложения. Таким образом, мне нужно использовать класс Error
, а не класс исключений:
Итак, модульный тест для источника данных:
Макет:
И модульный тест:
И, наконец, у нас есть вариант использования:
Интерфейс:
И конкретная реализация:
И модульный тест:
Дополнительно
Теперь я не упомянул, как связать модель представления, но если вы будете следовать шаблону представления настроек с сервисным компонентом и контроллером, добавить его довольно легко. Но чего не хватает?
Я сохранил простоту и не стал добавлять другие части DDD, а именно остальную часть механизма объекта-значения и диспетчеризацию событий.
Другой механизм объекта ценности связан с изменением сущностей на ValueObject(Types)
и настройкой валидаторов и других интеграций. Затем расширяем это до объектов Event State Value и создаем диспетчеры событий для варианта использования, источника данных, репозитория и модели представления.
Короче проводка управления состоянием. Напротив, в Clean Arch во Flutter, как правило, просто подключают модель представления для управления состоянием с помощью BLoC или Redux.
Заключение
Это некое ядро доменно-ориентированного дизайна, с которого можно начать. Далее следует создание более сложных объектов-значений и диспетчеризация событий. Пример кода можно найти в этом репозитории:
Вот некоторые из плагинов сообщества Flutter, над созданием которых я работаю:
Want to Connect? Follow me on Twitter. You can also stay updated with my latest Flutter sprints available in this GitHub Repository.
Ресурсы
Некоторые полезные ресурсы (ссылки на книги относятся к архивам бесплатных pdf-файлов и выдаче книг):
- Material Design 3 (Material You) Спецификации
- Nielsen Norman Group — одна из ведущих исследовательских групп в области UI-дизайна. Некоторая информация находится в платном доступе, но все еще есть хорошая база бесплатных материалов для просмотра и использования.
- Повседневные дела Дональда Нормана
- Юзабилити-инжиниринг Якоба Нильсена
- Краткое изложение книги Роберта Мартина Чистая арка находится в основной части, доступной здесь.
- Краткий обзор InfoQ по предметно-ориентированному проектированию (PDF)
- Курс освоения искусства смешивания цветов от Бетти Эдвардс
- Репозиторий Scott’s Dart Design Patterns на GitHub
- Сеточные системы Йозефа Мюлера в графическом дизайне
- Архив писем
- Stephen Coles Anatomy Of Type In Six Letters (и да, это сайт Стивена Коула, и там есть другие жемчужины)
- Тип Детали
- Дизайн логотипа Love от Дэвида Эйри
- Архив дизайна AIGA
- Краткое изложение книги Дэйва Тротта о хищническом мышлении: мастер-класс по перехитринию конкурентов
- Теория категорий Бартоша Милевского для программистов в формате PDF (т. е. функциональное программирование и теория типов ООП)
- Категория конспектов лекций и книжных ресурсов