Mik*_*Dev 9 java android system-design
我在使用 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 对象和一个 BookModel 列表。我没有 userModel.getBooks()。我没有 userModel.save() (它也可以保存所有书籍更改)。
为了突出这个问题,为了让这个类比看起来更像我的实际用例,我还有书中所有页面的列表!:) 因此,当我保存用户时,我想保存到书籍中,以及可能已修改的每本书的所有页面。
我该怎么办?
第二个奖励问题:在我的现实问题中,我有从基类派生的类。使用上面的类比:LeftPage 和 RightPage 将派生自 PageBase。一本书有一个列表。但是 LeftPage 和 RightPage 都有各自的存储库、单独的用例等(但这不起作用)如何保存列表?我是否必须制作一个单独的用例 SavePages ,它会有一个:
if (pages.elementAt(i) instanceof LeftPage) { SaveLeftPage saveLeft = new ..... } else { SaveRightPage saveRight = new ..... }
我不认为我可以使用多态,因为在我看到的所有文档中,模型不知道用例。
我希望你能帮助,非常感谢你的时间:)
-麦克风
这就是鲍勃叔叔的干净架构。Fernando Cejas 在 Android 中做了一个简化的示例,但您应该阅读原始版本中的概念。
对于您的问题,您的用例实际上是什么?用书籍和页面拯救用户?如果用例有要求,您可以这样做。您的实体 User 可以拥有一系列书籍,而每本书又将拥有一系列页面,并且您的 UserRepository 必须能够将每个书籍解析为自己的表(或者您可以将存储库注入到您自己的存储库中,但在这种情况下,您必须可以全部保存或回滚)
您可以仅保存用户参考的书籍吗?拥有一个属性来标识该书的所有者,或者通过参数将其传递给该书的用例。
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
}
}
Run Code Online (Sandbox Code Playgroud)
关于第二个额外问题,如果您只有 PageBase 列表,则必须将其传递给用例 SavePages,这会将每个项目解析到正确的存储库(在这种情况下,您将注入 2 个存储库)。
但在您的示例中,它可以是同一个数据库实体,并带有一个字段来标识其左侧还是右侧,并且在这种情况下,仅使用一个存储库。
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |