如何在 Flutter Clean 架构中很好地组织文件夹结构

how to good organize folder structure in flutter clean architecture

提问人:user18084770 提问时间:10/29/2023 最后编辑:user18084770 更新时间:11/6/2023 访问量:63

问:

我使用 Flutter 干净架构 MVVM,我有几个问题:

我们可以将向 API 发送请求分为 2 个阶段: - 第一个 - 调用正在通过整个应用程序(查看 -> 查看模型 -> 模型)作为请求到 API - 第二个 - 我们调用的结果来自 API 并遍历所有应用程序(模型 -> 查看模型 -> 视图)作为响应

我有 2 个带有模型的文件夹:

  • 在视图模型中,我有一个名为实体的文件夹
  • 在模型 I 中,文件夹称为模型

在第一阶段,我有有效载荷模型,它被放置在实体文件夹中。在此有效负载中,我扩展了 toModel 方法,该方法基本上将有效负载转换为最终模型(该结构放置在模型文件夹中)。最终对象在 API 调用中作为正文(或标头中的参数)发送。

在第二阶段,我从API获得响应,该响应映射到放置在模型文件夹中的模型。在这个模型中,我有扩展 toEntity,它将模型转换为最终实体(放置在 entites 文件夹中)。

因此,在 entites 文件夹中,我在实体中有 2 种类型的类 - Entity 和 Payload 以及模型中有 2 种类型的类 - 转换了来自 API 的有效负载和响应。将它们分隔在文件夹结构中是否有意义,例如:

   -entities
     -entity
     -payload

   -models
     -model
     -dto

其中 payload -> dto(在第一阶段)和模型 -> 实体(在第二阶段)。

  1. 在这些文件夹中分隔这两种类型的类是否有意义?
  2. 在模型层中将其称为“dto”是否合适?
  3. 有时有效载荷与 dto 相同或几乎相同,模型和实体的情况也是如此。在这种情况下,我应该使用继承机制吗?例如

我的有效载荷:

@unfreezed
class AddTaskPayload with _$AddTaskPayload {
  factory AddTaskPayload({
    String? title,
    String? description,
    DateTime? date,
    TimeOfDay? startingTime,
    TimeOfDay? endingTime,
    TaskPriority? priority,
  }) = _AddTaskPayload;
}

extension AddTaskPayloadExtension on AddTaskPayload {
  AddTaskModel get toModel {
    final String startingDate = DateTime(date!.year, date!.month, date!.day,
            startingTime!.hour, startingTime!.minute)
        .toIso8601String();

    final String endingDate = DateTime(date!.year, date!.month, date!.day,
            endingTime!.hour, endingTime!.minute)
        .toIso8601String();

    return AddTaskModel(
      title: title,
      description: description,
      startingDate: startingDate,
      endingDate: endingDate,
      priority: priority?.getIntFromPriority(),
    );
  }
}

我的DTO:

@unfreezed
class AddTaskModel with _$AddTaskModel {
  factory AddTaskModel({
    String? title,
    String? description,
    String? startingDate,
    String? endingDate,
    int? priority,
  }) = _AddTaskModel;

  factory AddTaskModel.fromJson(Map<String, Object?> json) =>
      _$AddTaskModelFromJson(json);
}

在这种情况下,在 DTO 中使用继承是否有意义?2 个字段具有相同的类型(标题和描述),其余字段不同。如果不是,当它使敏感使用继承时?

Flutter MVVM 干净架构

评论


答: 暂无答案