Изучение
Repository и доменные интерфейсы
Разделение переиспользуемого базового Repository и бизнес-контракта, принадлежащего Domain.
v0.1.0-dev.1Средний уровеньark_data_layer
Repository и доменные интерфейсы
Доменному интерфейсу не требуется расширять Repository<Data>:
dart
abstract interface class CatalogRepository {
CatalogData get data;
Stream<CatalogData> get stream;
Future<void> synchronize();
}
Реализация Data-слоя объединяет оба отношения:
dart
final class CatalogRepositoryImpl extends Repository<CatalogData>
implements CatalogRepository {
// Политика преобразования и координации источников.
}
Repository<Data> хранит одно актуальное значение. setData заменяет его, а updateData выполняет синхронное преобразование. Каждый явный commit публикуется, даже если новое значение равно предыдущему.
Для Data предпочтительны неизменяемые бизнес-снимки. Базовый класс не может запретить изменяемому объекту поменять себя после публикации.