当我使用Room时,如何将模型分离

时间:2018-04-01 04:11:29

标签: android android-room clean-architecture

为了预备这一点,我对Android开发还很陌生,而且我正在尝试通过在遵循Clean Architecture的同时构建应用程序来学习。

我目前有一个名为“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;

我已经尝试将模型子类化为装饰器但是无法获得注释以在子类上工作。有没有更好的方法,这是我应该关注的事情?

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

1 个答案:

答案 0 :(得分:0)

要使用Room关注Android中的清洁架构原则,您需要在data <-> domaindomain <-> presentation层之间创建一些映射器类。可以在此处找到此类映射器的示例:Mapper for an Entity

示例:

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

要在Room中创建新项目,您可以执行相同操作,但向后:CardModelCardpresentation -> domain)使用mapper,然后Card到{{1 (CardEntity)使用另一个映射器。然后使用带有domain -> data注释的Room数据库函数保存CardEntity

注意:

即使创建这样的类也会使你的代码变得更笨重,它遵循Clean Architecture,从长远来看使一切变得更容易理解。