提问人:Ουιλιαμ Αρκευα 提问时间:11/17/2023 更新时间:11/17/2023 访问量:31
Bloc 事件是否与 Clean Architecture 用例相同?
Are Bloc events the same as Clean Architecture use-cases?
问:
我有这个用例示例代码:
final class AuthUseCases {
final DataProxy dataProxy;
const AuthUseCases(this.dataProxy);
Future<AuthSession> login(TCredential credential) async {
// a lot of lines here...
}
AuthSession logout(AuthSession session) {
// a few lines here...
}
}
我使用 Freezed 包为 BloC 事件提供了以下示例代码:
@freezed
sealed class TmdbEvent with _$TmdbEvent {
const factory TmdbEvent.login(TCredential credential) = LoginEvent;
const factory TmdbEvent.logout() = LogoutEvent;
}
class TmdbBloc extends Bloc<TmdbEvent, PageState> {
// more lines here...
}
所以我问自己是否可以把这些课程合并在一起,因为我认为 BloC 事件与用例相同。所以这里有一些问题:
- 这个想法正确吗?
- 这个新班级会是什么样子?我是 Freezed 包的新手
- 保留一个班级还是将它们分开是个好主意?
答:
1赞
pixel
11/17/2023
#1
与用例相结合的想法是合理的,因为两者都与处理业务逻辑和表示应用程序中的操作有关。但是,保持明确的关注点分离至关重要。虽然它们可以共享相似之处,但将它们保留为不同的实体通常有益,以便更好地组织代码和可维护性。BloC events
建议如下:
@freezed
abstract class AuthBlocEvent with _$AuthBlocEvent {
const factory AuthBlocEvent.login(TCredential credential) = LoginEvent;
const factory AuthBlocEvent.logout() = LogoutEvent;
}
class AuthBloc extends Bloc<AuthBlocEvent, PageState> {
final DataProxy dataProxy;
AuthBloc(this.dataProxy) : super(InitialState);
@override
Stream<PageState> mapEventToState(AuthBlocEvent event) async* {
if (event is LoginEvent) {
// Login logic...
} else if (event is LogoutEvent) {
// Logout logic...
}
}
}
但是,请记住,合并或分离类的决定取决于代码复杂性、可维护性和对单一责任原则的遵守等因素。如果类变得太大或太复杂,将其拆分为单独的用例和 BloC 事件可能是有益的,以提高可读性和可维护性。
上一个:数独棘手的棋盘填充器
下一个:FLTK 键盘事件取决于窗口大小
评论