- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在使用 Clean Architecture 时遇到问题。对于那些阅读过 Fernando Cejas 博客文章的人 http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/ ,我的问题是基于它,以及他的代码。
他的示例项目只有一个域对象一个用户。使用 POJO 一切都很清楚。我遇到问题的地方是,假设用户有书。一对多的关系。在 Clean Architecture 中,您将如何处理这个问题?
就像他一样,我有几个层次,所以每个域对象 3 个类(用户、用户模型、用户实体)和每个域对象一个存储库 (UserDataRepository)。我们的新示例还将包含 Book、BookModel、BookEntity 和 BookDataRepository。
我还有带有 CRUD 变体的用例类。
我的问题是在 UI/Presenter 级别。此时在程序中我有一个 UserModel 对象和一个 BookModels 列表。我没有 userModel.getBooks()。我没有 userModel.save()(它也会保存所有书籍更改)。
为了强调这个问题,为了让这个类比看起来更像我的实际用例,我还有书中所有页面的列表! :) 因此,当我保存用户时,我想保存到书籍中,以及每本书可能已被修改的所有页面。
我该怎么做?
第二个奖励问题:在我的现实世界问题中,我有派生自基类的类。使用上面的类比:LeftPage 和 RightPage 将派生自 PageBase。一本书有一个 list 。但是,LeftPage 和 RightPage 都有各自的存储库、单独的用例等(但这不起作用)如何保存列表??我是否必须制作一个单独的用例 SavePages,它会有一个:
if (pages.elementAt(i) instanceof LeftPage) { SaveLeftPage saveLeft = new.....}别的 { SaveRightPage saveRight = new.....
我不认为我可以使用多态性,因为在我看到的所有文档中,模型不知道用例。
我希望你能帮上忙,非常感谢你抽出时间:)
-麦克
最佳答案
那是 Uncle Bob's Clean Architecture . Fernando Cejas 在 Android 中做了一个简化的例子,但你应该阅读原文中的概念。
对于您的问题,您的实际用例是什么?用书籍和页面保存用户?如果是用例的要求,您可以这样做。您的实体 User 可以拥有 Books 的集合,而每本书又将拥有 Pages 的集合,并且您的 UserRepository 必须能够将每个解析到它自己的表(或者您可以将存储库注入(inject)您自己的存储库,但在这种情况下您必须能够全部保存或回滚)
你能保存一本只有用户引用的书吗?拥有标识图书所有者的属性,或通过参数将其传递给图书的 UseCase。
public class SaveBookCase extends UseCase
{
public SaveBookCase(IBookRepository repository, Book book, int userId)
{
///
}
//or
public SaveBookCase(IBookRepository repository, SaveBookRequest request)
{
/// SaveBookRequest is a class that has the book and the user id
}
}
关于你的第二个奖励问题,如果你只有一个 PageBase 列表,你必须将它传递给用例 SavePages,这会将每个项目解析到正确的存储库(在这种情况下你将注入(inject) 2 个存储库)。
但在您的示例中,它可以是同一个数据库实体,带有一个字段来标识它是左侧还是右侧,并且在这种情况下,仅使用一个存储库。
关于java - 您如何在 Clean Architecture 中实现一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210197/
我是一名优秀的程序员,十分优秀!