我想在我的Flatter应用程序上实现存储库模式。
假设我创建了一个界面来获取如下图书列表
abstract class BookRepository {
Future<List<Book>> getBookList();
}
我想在主页上显示图书列表。如果有internet连接,则从远程检索数据(使用Dio),否则从本地存储获取数据(使用Hive)
因此,我创建了两个实现上述接口的类。
第一个用于远程存储库
class BookRemoteRepository implements BookRepository {
@override
Future<List<Book>> getBookList() async {
List<Book> booksFromServer = await dio.get(); // Using Dio
return booksFromServer;
}
}
第二个是本地存储库
class BookLocalRepository implements BookRepository {
@override
Future<List<Book>> getBookList() async {
List<Book> booksFromLocalStorage = await Hive.get(); // Using Hive
return booksFromLocalStorage;
}
}
我不知道该把逻辑放在哪里来决定是从远程还是从本地获取数据
当前的实现是这样的
class HomePageController {
late BookRepository _bookRepository;
Future<List<Book>> retrieveBooks() async {
if (hasInternetConnection) {
_bookRepository = BookRemoteRepository();
} else {
_bookRepository = BookLocalRepository();
}
return await _bookRepository.getBookList();
}
}
那个
retrieveBooks
中的方法
HomePageController
如果用户按下UI上的按钮,将调用。
我是否正确实现了存储库模式?我需要单独上课来决定吗?我不知道该把逻辑放在哪里来决定是从远程还是从本地获取数据