存储库仅与数据层通信?
Repository as only communication with Data Layer?
我正在遵循干净的架构,并且我了解使用存储库执行 getUsers 或 queryUsers 等操作。但是对我来说使用存储库登录用户没有意义。那么我应该如何与数据层通信,是否应该跳过存储层访问网络层?
来自 this guid 我认为使用存储库是更好的选择。我的回答基于存储库引用的定义:
Repository modules are responsible for handling data operations.
我相信干净的架构不应该跳过层。我在这里看到了几个选项:
userRepository.get\set-User()
- 对我来说,它看起来有点奇怪,因为 Repository 是对集合的抽象,而我们只需要一个。
- 创建对用户存储的抽象。例如,
userStorage.get\set-User() or userStorage.login(User), logout(), get()
我绝对认为你不应该跳过层。
引入特定架构的全部意义在于毫无例外地遵循它,因此您的所有应用程序模块都以预期和可预测的方式运行。
那么,换个角度来看,登录是什么意思呢?您获得用户名和密码,您必须检查它们是否与存储在数据源中的用户名和密码相匹配。为此,您 运行 对当前用户进行查询。查询是 运行 where - 在存储库中!您自己说过 - 存储库是所有查询都应该发生的地方。背后的实现是什么并不重要。
所以,我的建议是添加一个这样的方法:
public interface UserRepository {
User findByUsernameAndPassword(@NonNull String username, @NonNull String
password);
}
如果您设法找到一个用户 - 很好,他已通过身份验证,如果没有 - 抱歉,请重试。
我正在遵循干净的架构,并且我了解使用存储库执行 getUsers 或 queryUsers 等操作。但是对我来说使用存储库登录用户没有意义。那么我应该如何与数据层通信,是否应该跳过存储层访问网络层?
来自 this guid 我认为使用存储库是更好的选择。我的回答基于存储库引用的定义:
Repository modules are responsible for handling data operations.
我相信干净的架构不应该跳过层。我在这里看到了几个选项:
userRepository.get\set-User()
- 对我来说,它看起来有点奇怪,因为 Repository 是对集合的抽象,而我们只需要一个。- 创建对用户存储的抽象。例如,
userStorage.get\set-User() or userStorage.login(User), logout(), get()
我绝对认为你不应该跳过层。
引入特定架构的全部意义在于毫无例外地遵循它,因此您的所有应用程序模块都以预期和可预测的方式运行。
那么,换个角度来看,登录是什么意思呢?您获得用户名和密码,您必须检查它们是否与存储在数据源中的用户名和密码相匹配。为此,您 运行 对当前用户进行查询。查询是 运行 where - 在存储库中!您自己说过 - 存储库是所有查询都应该发生的地方。背后的实现是什么并不重要。
所以,我的建议是添加一个这样的方法:
public interface UserRepository {
User findByUsernameAndPassword(@NonNull String username, @NonNull String
password);
}
如果您设法找到一个用户 - 很好,他已通过身份验证,如果没有 - 抱歉,请重试。