【问题标题】:converting entities into model in clean architecture in dart在 dart 的干净架构中将实体转换为模型
【发布时间】:2021-08-04 13:34:49
【问题描述】:

在干净的架构中,我们必须在Domain 层中定义Entities,在Data 层中定义Models。现在我面临的问题是将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);
}

【问题讨论】:

  • 我也想知道在 dart 中将实体转换为模型的最简单方法,有任何示例代码吗?谁能指导我们?
  • @Achin 我最终为模型到实体和实体到模型创建映射器类

标签: dart design-patterns clean-architecture modelmapper


【解决方案1】:

如果您的model 扩展自您的entity,您可以轻松地从model 转换为entity。因为,对于这种情况,您实际上不需要映射器。您在初始化时将字段传递给super()

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});

  
}
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,
    );
  }
}

final UserEntity user=UserModel.fromJson(someMap);

附:您还可以看到Converter&lt;S,T&gt; 预制的映射抽象类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2022-05-23
    相关资源
    最近更新 更多