android - 使用 Room 时如何解耦模型

标签 android android-room clean-architecture

首先,我对 Android 开发相当陌生,目前我正在尝试通过构建应用程序来学习,同时遵循整洁的架构。

我目前有一个名为“Card”的模型和用于存储所有“Card”数据的 Room 库。但是,我发现在我的应用程序中实现 Room 库的唯一方法是将“Card”模型指定为驻留在我的应用程序的域层中的实体。根据我的理解,这违反了层的解耦,因为领域层应该独立于框架。

@Entity
public class CardImpl implements Card {
  @PrimaryKey
  @NonNull
  public String cardID;

  @ColumnInfo(name = "card_name")
  public String name;

  @ColumnInfo(name = "card_class")
  public String cardClass;

  @ColumnInfo(name = "card_text")
  public String text;

  @ColumnInfo(name = "card_cost")
  public int cost;

我尝试将模型子类化为装饰器,但无法让注释在子类上工作。有没有更好的方法来解决这个问题,这是我应该关心的事情吗?

此外,我不确定您需要多少信息来回答我的问题,但如果您需要更多信息,请告诉我!谢谢!

最佳答案

遵循 Android 中的简洁架构原则 Room您需要在 data <-> domain 之间创建一些映射器类和domain <-> presentation层。可以在这里找到此类映射器的示例: Mapper for an Entity .

示例:

你有你的CardEntitydata图层并使用映射器类创建新的 Card domain中的实体层。然后将这个新创建的对象传递给 presentation层,您再使用一个映射器,它会创建新的 CardModel然后您可以在 UI 中的任何位置使用和操作它。

要在 Room 中创建新项目,您可以执行相同的操作,但方向相反:CardModelCard ( presentation -> domain ) 使用映射器,然后 CardCardEntity ( domain -> data ) 使用另一个映射器。然后保存CardEntity使用房间数据库功能 @Insert注释。

注意:

尽管创建此类类会使您的代码变得更加庞大,但它遵循整洁的架构并使每个模块更加解耦。

关于android - 使用 Room 时如何解耦模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594726/

相关文章:

c# - Clean Architecture 外部 REST API 作为适配器

android - (this::methodName) 如何在此代码中工作?

android - 使用具有依赖项的 gradle 创建 Android LIbrary 项目 Jar

android - 按日期排序房间结果为字符串

domain-driven-design - DDD 存储库可以是有状态的吗?

java - 整洁的代码: Using prefix get for java function name

android - 编辑通知对象?

Android:如何使用 "uses-library"?

android - 房间 : Proper way to test DAO Apis

android - 房间数据库正在返回 1 个额外的对象