flutter Bloc事件与Clean Architecture用例相同吗?

2guxujil  于 2023-11-21  发布在  Flutter
关注(0)|答案(1)|浏览(147)

我有这个用例的示例代码:

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 Package新手 *
  • 是保留一个班级还是分开上课好呢?
qncylg1j

qncylg1j1#

您将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事件可能有利于提高可读性和可维护性。

相关问题