2

作为序言,我对 Android 开发还很陌生,目前我正在尝试通过构建应用程序来学习,同时遵循 Clean Architecture。

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

@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;

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

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

4

1 回答 1

2

要遵循 Android 中的 Clean Architecture 原则,Room您需要在层data <-> domain之间创建一些映射器类。domain <-> presentation可以在此处找到此类映射器的示例:Mapper for an Entity

例子:

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

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

笔记:

即使创建这样的类会使您的代码更加庞大,但它遵循清洁架构并使每个模块更加解耦。

于 2018-04-23T10:39:37.583 回答