在 Dart 应用程序中减少 'parts' 的数量

Reducing amount of 'parts' in a Dart app

我有一个使用 partpart of 的相当大的 Dart 应用程序,因此我不必使用相对的 import。但是,应用程序可能在入口点文件中有这样的内容:

part 'file1.dart';
part 'file2.dart';
part 'file3.dart';
part 'some_sub_dir/file1.dart';
part 'some_sub_dir/file2.dart';
part 'some_sub_dir/file3.dart';
part 'some_sub_dir/file4.dart';
part 'some_sub_dir/file5.dart';
part 'some_sub_dir/file6.dart';
...

据我所知,当我创建新的 class 时,我的 IDE (WebStorm) 不会自动添加 part 语句。有什么办法可以避免使用这么多 part 吗?如果没有,每次添加新的 parts 的过程可以自动化吗?

我了解到:

part/part of 用于将库分成几个部分(脚本)。您可以看到 public 和私人成员。

导入 是 "call/use" 您图书馆中的另一个图书馆。您只能看到导入库的 public 个成员。

WebStorm 无法推断您希望脚本成为库的一部分。

我尽可能理解你的问题,我会尝试根据我在 Dart 中的经验来回答。

据我所知,您正试图将所有(或很多)项目文件作为一个库的一部分。是错误的观念。在 Dart 库中不是什么大事。这里有一些关于如何组织文件的建议。

  1. 不要试图将大量文​​件作为一个库的一部分。而是将每个文件保存为单独的库。
  2. 您可以在一个文件中保留几个 classes。但请确保 classes 一起为一个想法工作。
  3. 只有当一​​个库有很多 class 或一个 class 太大时,您才可以将一个库拆分成几个部分文件。但请确保所有这些文件都应该放在一个库中。
  4. 如果您不知道如何在库中组合 class,请将每个 class 保存在单独的库中。几天后你就会明白哪些 classes 一起玩了。
  5. 如果一个库中的 class 不仅在库中而且在其他库中都有使用 - 将其分离库。
  6. 将部件放在与主库文件相同的文件夹中。
  7. 如果库有部分将所有库文件放入单独的文件夹。
  8. 使用部分的相对链接。
  9. 始终使用到其他库的绝对链接。对你以后进行重构有帮助。

比如这是一个类似TODO列表应用的项目。所以,我们有视图 class:

// This is a view html component class. //
library todolist.list_viewer;

import 'package:todolist/task.dart'; // model class

class ListViewer extends HtmlElement {
  // it showes list of tasks
}

class TodoRenderer extends HtmlElement {
  // this is a renderer for one todo item
}

这是一个模型 class:

// This is a todo model task //
library todolist.task;

class TodoProvider {
  List<TodoItem> todos;
  String addItem(TodoItem new Todo) { 
    //... 
  }
}

class TodoItem {
  String Author;
  DateTime date;
}

现在看起来很简单,分成了独立的库。但是如果我们想添加 RecId class 来保持 todo 数据库 id 就变得太复杂了。我们应该把它分成两个库:todo_providertodo_model 并将 RecId class 放在最后一个。现在又好了。

如果我们想再添加一个模型:一个User,那么每个待办事项都可能有执行者或作者。我们不能只是把它 todo_model。现在我们应该将 TodoItemUser class 组合成 model 库。所以我们只需将 todo_model class 重命名为 model 并添加 User class 即可。

或者我们可以制作 user_model 库以保留 User class,而不是最后一个操作。由于用户模型也有 recId 属性,我们应该将 RecId class 提取到单独的库中。

这完全取决于我们的 class 有多庞大和复杂。