gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:02:49 25 4
gpt4 key购买 nike

首先,我是 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;

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

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

最佳答案

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

示例:

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

要在 Room 中创建新项目,您可以做同样的事情,但要倒退:CardModelCard ( presentation -> domain ) 使用映射器,然后 CardCardEntity ( domain -> data ) 使用另一个映射器。然后保存那个 CardEntity将 Room 数据库功能与 @Insert 结合使用注释。

注意:

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com