Hun*_*unt 6 design-patterns modelmapper dart clean-architecture
与干净的架构一样,我们必须定义EntitiesinDomain层和ModelsinData层。现在我面临的问题是当我们将其作为存储库中的请求对象传递时将其转换entities为。models
这是描述实体(棕色)和模型(绿色)之间关系的图表。
现在,将实体转换为模型的最简单方法是什么dart,因为实现一个mapper字段然后从另一个字段复制一个字段似乎是一项非常乏味的工作,并且当类中有嵌套对象时(i.e. UserProfile data in below diagram)需要花费大量时间。那么是否存在任何现有的库或更好的方法可以无缝转换entities为model.
abstract class Mapper<E, D> {
D mapFromEntity(E type);
E mapToEntity(D type);
}
Run Code Online (Sandbox Code Playgroud)
如果您从 . 扩展,您可以轻松地从 转换model为。因为,对于这种情况,您实际上不需要映射器。您在初始化时传递字段。entitymodelentitysuper()
class UserEntity {
final String id;
final String name;
final String surname;
final String? avatarImage;
UserEntity({required this.id, required this.name, required this.surname, this.avatarImage});
}
Run Code Online (Sandbox Code Playgroud)
class UserModel extends UserEntity {
UserModel({
required String id,
required String name,
required String surname,
String? avatarImage,
}) : super(name: name, id: id, surname: surname, avatarImage: avatarImage);
Map<String, dynamic> toMap() {
return {
'id': this.id,
'name': this.name,
'surname': this.surname,
'avatarImage': this.avatarImage,
};
}
factory UserModel.fromMap(Map<String, dynamic> map) {
return UserModel(
id: map['id'] as String,
name: map['name'] as String,
surname: map['surname'] as String,
avatarImage: map['avatarImage'] as String,
);
}
}
Run Code Online (Sandbox Code Playgroud)
final UserEntity user=UserModel.fromJson(someMap);
Run Code Online (Sandbox Code Playgroud)
Ps 您还可以看到Converter<S,T>用于映射的预制抽象类
| 归档时间: |
|
| 查看次数: |
2982 次 |
| 最近记录: |