Ard*_*jan 8 architecture dart flutter clean-architecture
在清洁架构中,我们将用例作为业务逻辑规则。但我们也可以直接调用存储库中的函数,因此我们不需要用例。这背后的原因是什么?
示例用例
class GetMarketUseCase implements UseCase<Stream<ResponseModel>, void> {
final PriceTrackerRepository priceTrackerRepository;
GetMarketUseCase(this.priceTrackerRepository);
@override
Stream<ResponseModel> call(void params) {
return priceTrackerRepository.getMarketWithSymbols();
}
}
Run Code Online (Sandbox Code Playgroud)
样本库
class PriceTrackerRepositoryImpl implements PriceTrackerRepository {
late final PriceTrackerDataSource priceTrackerDataSource;
PriceTrackerRepositoryImpl(this.priceTrackerDataSource);
@override
Stream<ResponseModel> getMarketWithSymbols() {
return _marketStreamController.stream;
}
Run Code Online (Sandbox Code Playgroud)
man*_*n21 12
因为它可以防止你的演示者在必须处理 UI 逻辑和业务逻辑时成为上帝对象。
例如:一个注销用例,您需要在里面调用API注销AuthenRepo
,取消注册Firebase FCM令牌,关闭套接字,也许还清除里面的一些本地数据CartRepo
,UserRepo
...然后想象一下将所有这些东西放在Presenter中,而不是一团糟创建LogoutUseCase
对您需要的每个存储库的调用
而且,您可以在很多地方使用它,例如当用户按下“注销”按钮时,当用户登录令牌过期时,...只需调用LogoutUseCase
而不是将代码从这个 Presenter 复制到另一个 Presenter,当您需要时也可以轻松使用更改有关注销要求的内容
Presenter 的代码示例是 Bloc:
AuthBloc 与用例:
class AuthBloc extends Bloc<AuthEvent, AuthState> {
AuthBloc(AuthState state) : super(state) {
on<AuthLogoutEvent>(_onLogout);
}
Future<void> _onLogout(
AuthLogoutEvent event,
Emitter<AuthState> emit,
) async {
await getIt<LogoutUseCase>().call(NoParams());
}
}
Run Code Online (Sandbox Code Playgroud)
没有用例的 AuthBloc:
class AuthBloc extends Bloc<AuthEvent, AuthState> {
AuthBloc(AuthState state) : super(state) {
on<AuthLogoutEvent>(_onLogout);
}
Future<void> _onLogout(
AuthLogoutEvent event,
Emitter<AuthState> emit,
) async {
await getIt<AuthRepo>().logout();
await FirebaseMessaging.instance.deleteToken();
await getIt<SocketRepo>().close();
await getIt<CartRepo>().clearData();
await getIt<UserRepo>().clearData();
// maybe more Repo need to call here :((
}
}
Run Code Online (Sandbox Code Playgroud)
在你上面的例子中,它只是简单的用例,只有action getMarketWithSymbols()
,那么我同意这里的Usecase是多余的,但是为了一致性,它应该有,谁知道,将来这个UseCase需要扩展,那么你会很容易然后。
归档时间: |
|
查看次数: |
2178 次 |
最近记录: |