Open wupididu opened 1 year ago
Не очень понятно для чего это используется https://github.com/denisskin/todoapp/blob/f52d503a35a8be1da1eaecee0bd4d26b5085ebd6/lib/db.dart#L9-L11
Если хотелось сделать синглтон, то можно было сделать TaskDB абстрактным, создать приватную имплементацию и создать ее инстанс Например так
abstract class TaskDB {
// lazy инициализация
static TaskDB? _instance;
static TaskDB get instance => _instance ??= TaskDBImpl();
// Здесь методы, которые должны быть доступны снаружи
}
class _TaskDBImpl implements TaskDB {
// Заимлементить все методы
}
Так выходит, что снаружи никто не сможет случайно вызвать конструктор твоего класса не ожиданно, но при этом он имеет доступ к методам, которые ты ему позволил
Лучше поход в сеть и БД в конструкторе не вызывать, а создать для класса методы жизненного цикла init() dispose() которые сам определишь когда нужно вызывать. Например при старте и стопе приложения.
Для стейт менеджмента можно было завести себе в виджете переменные (список тасков, возможно еще что-то)
А подписавшись на изменение БД забирать оттуда, то что нужно(список тасков мб) и задавать их в стейте и обновлять setState
Чистота кода:
Readme: 0.5/1 - нет описания и скриншотов flutter_lints: 1 форматирование кода: 1 Код разбит на фичи и слои: 1/2 - Код разбит на слои, но есть проблемы с тем, что поход в сеть лежит и вызывается в БД. Лучше такие вещи разделять
Стейт менеджмент
стейт-менеджмент: 2.5/5 - используется стейт фул виджет. Минус в том, что стейт берется прям из БД, то есть виджет завязан на дата слое. Лучше создавать отдельно стейт(хотя бы задать переменные) в виджете, который изменять в зависимости от дата слоя косистентность: 3
Получение и хранение данных
релизована работа с бэком: 3 слой для бэка: 1/2 - Слой выделен в отдельный слой. Но сам класс похода в бэк предоставляет на прямую досуп в слой БД. И выходит, что слой бэка совсем не отделен от бд. Минусы такого подхода в том, что нельзя будет далать нормальные запросы напрямую в бэк не через БД. реализована работа с бд: 3 слой для бд: 0 - БД на самом деле не выделен в отдельный слой. Мы на прямую обращаемся в БД из слоя презентации (виджетов)
Можно было бы выделить слой БД Выделить слой для похода в бэк
Создать домэйн слой, который бы вызывал нужные методы у двух этих слоев
А сам виджет вызывал бы методы у домэйн слоя. Тогда виджет не был бы напрямую завязан на дата слое(это бд и бэк)
А также можно почитать про MVC или про MVVM такие паттерны помогут разобраться с разбиением на слои
Разное
работа с асинхроннкой: 1 интернационализация: 0 - ее нет
Результат: 17