【问题标题】:How create model in data layer for entities when get list of entities from data source in clean architecture在干净架构中从数据源获取实体列表时如何在数据层中为实体创建模型
【发布时间】:2022-05-23 19:52:54
【问题描述】:

我为一个简单的显示联系人项目遵循干净的架构。 在我的 Flutter 项目中,我有这些目录:Data、Domain、Presentation。 我首先在域层中为示例联系人创建一个实体

class Contact {
  final String fullName;
  final String email;
  final bool favourite;

  Contact(
      {required this.fullName, required this.email, required this.favourite});
}

当我们从数据源获取联系人时,它通常采用List<Contact> 的形式,例如这个 JSON 响应

{
  \"contacts\": [
    {
      \"fullName\" : \"John Doe (JSON)\",
      \"email\" : \"johndoe@json.com\",
      \"favourite\" : true
    },
    {
      \"fullName\" : \"Ema Doe (JSON)\",
      \"email\" : \"emandoe@json.com\",
      \"favourite\" : false
    },
    {
      \"fullName\" : \"Micheal Roe (JSON)\",
      \"email\" : \"michro@json.com\",
      \"favourite\" : false
    }
  ]
}

现在的问题是我们如何在数据层中实现模型,这将基于干净的架构是正确的。 这个模型正确吗?

class ContactsModel {
  late List<Contact> contacts;

  ContactsModel({required this.contacts});

  ContactsModel.fromJson(dynamic json) {
    if (json[\'contacts\'] != null) {
      contacts = [];
      json[\'contacts\'].forEach((v) {
        contacts.add(ContactModel.fromJson(v));
      });
    }
  }
}

class ContactModel extends Contact {
  ContactModel(
      {required String fullName,
      required String email,
      required bool favourite})
      : super(fullName: fullName, email: email, favourite: favourite);

  ContactModel.fromJson(dynamic json)
      : super(
          fullName: json[\'fullName\'],
          email: json[\'email\'],
          favourite: json[\'favourite\'],
        );
}

    标签: flutter dart oop model clean-architecture


    【解决方案1】:

    使用联系人列表作为模型类。 在您的域层中,这里是您的实体

    class Contact extends Equatable {
      final String fullName;
      final String email;
      final bool favourite;
    
      Contact(
          {required this.fullName, required this.email, required this.favourite});
    
      @override
      List<Object?> get props => [fullName, email, favourite];
    }
    

    这是数据层中的 ContactModel

    
    class ContactsModel {
      List<Contact> contacts = [];
    
      ContactsModel({required this.contacts});
    
      ContactsModel.fromJson(Map<String, dynamic> json) {
        if (json['contacts'] != null) {
          json['contacts'].forEach((v) {
            contacts.add(ContactModel.fromJson(v));
          });
        }
      }
    
      ContactsModel.fromXml(XmlDocument xmlDocument) {
        contacts = [];
        for (XmlElement xmlElement in xmlDocument.findAllElements('contact')) {
          contacts.add(ContactModel.fromXml(xmlElement));
        }
      }
    
      @override
      List<Object?> get props => [contacts];
    }
    
    class ContactModel extends Contact {
      ContactModel(
          {required String fullName,
          required String email,
          required bool favourite})
          : super(fullName: fullName, email: email, favourite: favourite);
    
      ContactModel.fromJson(Map<String, dynamic> json)
          : super(
              fullName: json['fullName'],
              email: json['email'],
              favourite: json['favourite'],
            );
    
      ContactModel.fromXml(XmlElement xmlElement)
          : super(
              fullName: xmlElement.findElements('fullName').single.text.trim(),
              email: xmlElement.findElements('email').single.text.trim(),
              favourite: xmlElement
                      .findElements('favourite')
                      .single
                      .text
                      .toLowerCase()
                      .trim() ==
                  'true',
            );
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多