首先,我对 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 .
示例:
你有你的CardEntity
在data
图层并使用映射器类创建新的 Card
domain
中的实体层。然后将这个新创建的对象传递给 presentation
层,您再使用一个映射器,它会创建新的 CardModel
然后您可以在 UI 中的任何位置使用和操作它。
要在 Room 中创建新项目,您可以执行相同的操作,但方向相反:CardModel
至Card
( presentation -> domain
) 使用映射器,然后 Card
至CardEntity
( domain -> data
) 使用另一个映射器。然后保存CardEntity
使用房间数据库功能 @Insert
注释。
注意:
尽管创建此类类会使您的代码变得更加庞大,但它遵循整洁的架构并使每个模块更加解耦。
关于android - 使用 Room 时如何解耦模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594726/