我正在探索干净的架构,并在许多文章和视频中注意到它们将包/插件传递到数据源。例如,使用 SharedPreferences 作为本地数据源,使用 http 作为远程数据源。所以,我有几个问题:
您能否提供如何解决这个问题的建议?
示例 - 使用 http.client 的数据源类
class NumberTriviaRemoteDataSourceImpl implements NumberTriviaRemoteDataSource {
final http.Client client;
NumberTriviaRemoteDataSourceImpl({@required this.client});
Future<NumberTriviaModel> _getTriviaFromUrl(String url) async {
final response = await client.get(
url,
headers: {
'Content-Type': 'application/json',
},
);
if (response.statusCode == 200) {
return NumberTriviaModel.fromJson(json.decode(response.body));
} else {
throw ServerException();
}
}
}
处理此问题的推荐方法是使用抽象。高层模块不应该依赖于低层模块。两者都应该依赖于抽象。因此,如果稍后需要更改包/插件,您只需创建这些抽象类的新实现,而无需触及数据源类中的现有逻辑。
使用上述概念,如果您跨多个数据源使用具有特定标头的 HTTP,则创建包装类可以集中标头逻辑并简化数据源类。
学习依赖注入,无需修改现有逻辑即可轻松换出。