首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android项目、清洁架构和模块化方法

Android项目、清洁架构和模块化方法
EN

Software Engineering用户
提问于 2020-03-05 12:14:24
回答 1查看 883关注 0票数 -1

我已经用MVVM和干净的架构很好地实现了这个项目,但是我决定将它分成模块。现在我有了:顶模

  • apimodule:与改造依赖关系
  • app:具有数据、域和表示层。

我想对它进行更多的模块化:使用域模型、使用库和存储库接口创建域模块。从理论上讲,这个模块不应该依赖于数据层。使用存储库和DataSources创建一个数据模块,它依赖于apimodule (最终还依赖于数据库模块)和域模块。将活动和视图模型移动到仅依赖于域模块的表示模块。

到目前一切尚好。当我试图向方程中添加一个DI库时,问题就开始了(为此我使用了Koin )。

  • 如果我在域模块中定义了存储库注入,那么它应该依赖于存储库模块来检索存储库实现。
  • 如果我在数据模块中定义了注入,那么我就将表示模块耦合到数据模块,这也使存储库接口变得无用。

我认为第一种方法比第二种方法要好得多,但我也不喜欢它,因为它违背了“域层不依赖数据层”的原则。

EN

回答 1

Software Engineering用户

发布于 2020-03-06 12:47:29

域模块应该为它所需要的所有存储库定义接口。您所称的存储库模块应该有实现存储库接口的公共类。这样做可以使域类不受任何外部引用的影响。域类需要的任何数据都将来自实现域模块中定义的存储库接口的对象。

Repository当然取决于域类,但是由于存储库实现了在域模块中定义的接口,因此域模块中不应该存在对具体存储库类的直接引用。

如果我在数据模块中定义了注入,那么我就将表示模块耦合到数据模块,这也使存储库接口变得无用。

域模块和存储库模块都不应该对依赖注入容器有任何了解。DI容器应该配置在应用程序的组合根附近,例如main方法或某种类型的“应用程序”类。应该传递给任何域或存储库类的任何依赖项都应该通过构造函数注入来完成,从而消除域和存储库模块中对DI类的引用。

使用存储库和DataSources创建一个数据模块,它依赖于apimodule (最终还依赖于数据库模块)和域模块。

对我来说这似乎有点复杂。创建一个存储模块是有意义的,但是由于存储技术的不同,进一步将其划分为数据模块、API模块和数据库模块似乎是不必要的分离。关于web和数据库查询的知识,您的存储库模块没有什么问题。该模块的主要目的是数据存储和检索。保持简单

将活动和视图模型移动到仅依赖于域模块的表示模块。

在这里,这可能是不必要的分离。一旦您进入活动和视图模型,代码就变得特定于应用程序。除非您需要重用多个应用程序中的活动并查看模型,否则请将它们保存在同一个模块中:如果愿意,请将它们保存在应用程序模块中。只有当您看到需要重用此代码时,才能将其拆分到它自己的模块中。雅格尼是你最好的朋友。

创建演示模块似乎过分了。创建API和数据库模块也是如此,YAGNI再次为我们提供了一些指导。尽管如此,创建域和存储库模块是非常有意义的,因为它允许将这些模块解耦,并简化测试。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/406143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档