我在使用Clean Architecture时遇到了问题.对于那些阅读过Fernando Cejas博客文章的人
http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/,我的问题是基于它和他的代码.
他的示例项目只有一个域对象和用户. POJO一切都很清楚.我遇到问题的地方是,让我们说用户有书.一对多关系.你会如何处理清洁架构中的这个问题?
就像他一样,我有几层,每个域对象有3个类(User,usermodel,UserEntity),每个域对象有一个存储库(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 …..
}
其他{
SaveRightPage saveRight = new …..
}
我不认为我可以使用多态性,因为在我看过的所有文档中,模型都不知道用例.
我希望你能提供帮助,非常感谢你的时间:)
-麦克风
解决方法:
这是Uncle Bob’s Clean Architecture. Fernando Cejas在AndroID中做了一个简化的例子,但你应该阅读原版的概念.
对于您的问题,实际上您的用例是什么?用书籍和页面保存用户?您可以这样做,如果是用例的要求.您的实体用户可以拥有一组书籍,而这些书籍的每一本书都会有一个页面集合,您的UserRepository必须能够将每个书籍解析为自己的表格(或者您可以将存储库注入您自己的存储库,但在这种情况下,您必须能够保存全部或回滚)
你只用一个用户参考来保存一本书吗?拥有一个标识图书所有者的属性,或者通过参数将其传递给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,它会将每个项目解析到正确的存储库(在这种情况下,你将注入2个存储库).
但在您的示例中,它可以是相同的数据库实体,其字段标识其左侧还是右侧,并且在此方案中仅使用一个存储库.
总结以上是内存溢出为你收集整理的java – 如何在Clean Architecture中实现一对多关系全部内容,希望文章能够帮你解决java – 如何在Clean Architecture中实现一对多关系所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)