想象一下,我有一个简单的模态,其中呈现了静态数据。
该数据作为 Parcelable
参数传递给模态 fragment
。当模式打开时,我想将其添加到 userHistory 数据库
中,这是一个简单的插入,我不期望任何类型的返回。
为了实现这个实现,我做了 ->
呈现数据的 fragment
将数据插入数据库的 DAO(带有 Room)
调用 DAO 查询的存储库
但我有一个关于如何从 Fragment
调用 repository.insertPage
的内部问题。
将存储库引用添加到 fragment 中是否不好?
我应该创建一个 viewmodel
并仅使用一个函数来在调用存储库的 OnCreateView
上创建代理吗?
我应该创建一个调用存储库并引用 Fragment
上的 usecase
的 useCase
吗?
老实说,我认为最好的方法是在 fragment
中引用存储库,但是我不知道这是否是一个糟糕的设计。
最佳答案
Is it bad add the repository reference into fragment?
您所描述的称为宽松的分层架构,其中依赖项可能会绕过较低层。 Simon Brown 在 Clean Architecture 一书中的第 34 章“缺失的章节”中对此进行了描述。
罗伯特·C·马丁 (2017), Clean Architecture
与宽松分层架构相反的是严格分层架构,其中箭头应始终指向下一个相邻的较低层。
在某些情况下,可以绕过域层。但前提是两者之间没有业务逻辑。通常情况并非如此。通常你至少有验证逻辑。
Should I create a useCase that calls the repository and reference the usecase on Fragment?
在整洁的架构中,您通常将实体对象传递到存储库,而不是像 Parcelable
这样的请求对象。实体对象确保与应用程序无关的域规则。因此,您应该首先将数据(Parcelable)转换为实体对象,然后将它们传递到存储库。您通常在实现应用程序特定域规则的用例或交互器中执行此操作。
也许该用例的结果是它只是将数据转发到实体,然后转发到存储库。如果是这样,则意味着用例和实体中都没有域逻辑,甚至没有验证。这通常暗示您实现了贫乏的领域模型。在这种情况下,直接调用存储库可能就可以了。
但首先您应该尽最大努力维护架构。每一次绕过都是默认架构规则的异常(exception),因此使架构变得更加随意,从而削弱了架构。维护架构很困难,因为您必须抵制为特殊情况创建旁路。但如果异常(exception)是常态,您可能会使用错误的架构或以错误的方式应用它。
关于android - 从 Fragment 构建单个插入事件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71131890/