使用 Room 时如何解耦我的模型
How can I decouple my models when I'm using Room
首先,我是 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;
我已经尝试将模型子类化为装饰器,但无法让注释在子类上工作。对此有更好的方法吗?这是我应该关注的问题吗?
此外,我不确定您需要多少信息才能回答我的问题,但如果您需要更多信息,请告诉我!谢谢!
要遵循 Android 和 Room
中的清洁架构原则,您需要在 data <-> domain
和 domain <-> presentation
层之间创建一些映射器 classes。可以在此处找到此类映射器的示例:Mapper for an Entity.
示例:
您在 data
层中有 CardEntity
并使用映射器 class 在 domain
层中创建新的 Card
实体。然后将这个新创建的对象传递到 presentation
层,你再使用一个映射器,创建新的 CardModel
然后你可以在 UI.[=28 中的任何地方使用和操作它=]
要在 Room 中创建新项目,您可以做同样的事情,但要倒退:使用映射器 CardModel
到 Card
(presentation -> domain
),然后 Card
到 CardEntity
(domain -> data
) 使用另一个映射器。然后只需使用带 @Insert
注释的 Room 数据库函数保存 CardEntity
。
注意:
即使创建这样的 classes 会使您的代码更加庞大,它遵循 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;
我已经尝试将模型子类化为装饰器,但无法让注释在子类上工作。对此有更好的方法吗?这是我应该关注的问题吗?
此外,我不确定您需要多少信息才能回答我的问题,但如果您需要更多信息,请告诉我!谢谢!
要遵循 Android 和 Room
中的清洁架构原则,您需要在 data <-> domain
和 domain <-> presentation
层之间创建一些映射器 classes。可以在此处找到此类映射器的示例:Mapper for an Entity.
示例:
您在 data
层中有 CardEntity
并使用映射器 class 在 domain
层中创建新的 Card
实体。然后将这个新创建的对象传递到 presentation
层,你再使用一个映射器,创建新的 CardModel
然后你可以在 UI.[=28 中的任何地方使用和操作它=]
要在 Room 中创建新项目,您可以做同样的事情,但要倒退:使用映射器 CardModel
到 Card
(presentation -> domain
),然后 Card
到 CardEntity
(domain -> data
) 使用另一个映射器。然后只需使用带 @Insert
注释的 Room 数据库函数保存 CardEntity
。
注意:
即使创建这样的 classes 会使您的代码更加庞大,它遵循 Clean Architecture 并使每个模块更加解耦。