Репозиторий как только связь с Data Layer?
Я следую чистой архитектуре, и я понимаю использование хранилища для таких действий, как getUsers или queryUsers. Однако для меня не имеет смысла использовать хранилище для входа в систему пользователя. Как мне тогда взаимодействовать с уровнем данных, должен ли я пропустить уровень репозитория и получить доступ к сетевому уровню?
3 ответа
Я определенно думаю, что вы не должны пропускать слои.
Весь смысл внедрения определенной архитектуры состоит в том, чтобы следовать ей без исключения, поэтому все модули вашего приложения ведут себя ожидаемым и предсказуемым образом.
Итак, если вы посмотрите на это с другой стороны, что означает вход в систему? Вы получаете имя пользователя и пароль, и вы должны проверить, соответствуют ли они имени пользователя и паролю, которые хранятся в вашем источнике данных. Для этого вы запускаете запрос к вашим текущим пользователям. И запросы выполняются где - в хранилище! Вы сказали это сами - в хранилище должны быть все запросы. То, что за этим стоит, не имеет значения.
Итак, я предлагаю добавить такой метод:
public interface UserRepository {
User findByUsernameAndPassword(@NonNull String username, @NonNull String
password);
}
Если вам удастся найти пользователя - хорошо, он аутентифицирован, если нет - извините, попробуйте еще раз.
Я верю в чистую архитектуру, вы не должны пропускать слои. Я вижу несколько вариантов здесь:
userRepository.get\set-User()
- для меня это выглядит немного странно, потому что Repository - это абстракция над коллекцией, в то время как нам нужен только один.- создать абстракцию над пользовательским хранилищем. Например,
userStorage.get\set-User() or userStorage.login(User), logout(), get()
Исходя из этого руководства, я думаю, что лучше использовать репозиторий. мой ответ основан на определении цитаты хранилища:
Модули репозитория отвечают за обработку данных.