Вход в поток в Android Чистая архитектура

Я пытался реализовать простое приложение для Android с аутентификацией Firebase, используя чистую архитектуру, чтобы в соответствии с документацией Firebase пользователь мог проверить, вошел ли он в систему.

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}

так что я не понимаю, куда следует поместить это условие, должно ли оно быть в UseCase или в Presenter, вызываемых независимо с помощью одного и того же исходного объекта.

что-то вроде

public interface FirebaseAuthDataSource {
    Single<User> loginUser(String username, String password);
    Single<User> isUserLoggedIn();
}
public class LoginUserUseCase {
  public Observable<ResponseValues> buildUseCase(RequestValues requestValues) {
   return firebaseAuthDataSource.loginUser(username,password);
  }
}
public class LoginPresenter{
 public void onStart(){
  firebaseAuthDataSource.isUserLoggedIn()
  .subscribe(LoginView::navigateToMenuScreen);
 }
}

Итак, условия, подобные этим, соответствуют ли они бизнес-логике? или логика потока?

2 ответа

Решение

По словам дяди Боба, пользовательский интерфейс не должен ничего знать о базе данных. Эти условия относятся к слою фреймворка, где должны быть все ваши базы данных. И связь проходит через UseCase и интерфейс доступа к данным.

Если это слишком много для вас, то вы также можете просто перенести чувствительные части, которые, вероятно, будут изменены в будущем, на "Чистую архитектуру". Но это только мое мнение. Я надеюсь, что это поможет вам

В Чистой Архитектуре вы вкладываете как можно больше логики в слой вариантов использования - интеракторы. Доступ к таким деталям, как база данных, абстрагируется с помощью интерфейса, определенного на уровне прецедента и реализованного на уровне адаптера платформы / интерфейса. докладчики должны быть как можно более простыми - в идеале только "преобразователи данных".

В случае, если интеракторы решат, когда выполнить проверку входа в систему и выполнить ее, используя интерфейс с базой данных Firebase. Интеракторы также решат, что произойдет, если проверка входа не удалась.

Если вы хотите узнать больше о реализации докладчиков, взгляните на мой пост: https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/

Другие вопросы по тегам