[TOC]
这些指南帮助您以一致的、可维护的方式将多个文件组成程序。为了使这些指南简洁,他们使用“import”来涵盖import和export指令。这两项准则同样适用。
## 一定要在部分指令中使用字符串。
许多Dart开发人员完全避免使用part。他们发现,当每个库都是一个文件时,他们更容易理解自己的代码。如果您选择使用part将库的一部分分割成另一个文件,Dart要求另一个文件依次指出它属于哪个库。由于遗留原因,Dart允许指令的这一部分使用它所属的库的名称。这使得工具在物理上查找主库文件变得更加困难,并且可能使部分实际上属于哪个库变得模糊不清。
首选的现代语法是使用指向库文件的URI字符串,就像在其他指令中使用的一样。如果你有一些库,my_library.dart,包含:
~~~
library my_library;
part "some/other/file.dart";
~~~
然后part文件应该如下:
~~~
part of "../../my_library.dart";
~~~
而不是:
~~~
part of my_library;
~~~
## 不要导入位于另一个包的src目录中的库。
lib下的src目录被指定为包含包自身实现的私有库。包维护者版本包的方式考虑到了这个约定。他们可以自由地对src下的代码进行全面修改,而不需要对包进行破坏性的修改。
这意味着,如果您导入了其他包的私有库,该包的一个小的、理论上没有中断点的版本可能会破坏您的代码。
## 优先在导入包的lib目录中的库时,选择相对路径。
当从同一包中的另一个库中引用包的lib目录中的库时,可以使用相对URI或显式包:。
例如,假设您的目录结构如下:
~~~
my_package
└─ lib
├─ src
│ └─ utils.dart
└─ api.dart
~~~
如果api.dart想要输入utils.dart,它应该这样做:
~~~
import 'src/utils.dart';
~~~
而不是:
~~~
import 'package:my_package/src/utils.dart';
~~~
没有深刻的理由选择前者——它只是更短,我们希望保持一致。
“在您自己的包的lib目录中”部分很重要。lib中的库可以导入lib(或其子目录中)中的其他库。lib之外的库可以使用相对导入访问lib之外的其他库。
但你不能“cross the streams”。在lib之外的库不应该使用相对导入来访问lib下的库,反之亦然。这样做将破坏Dart正确判断两个库uri是否引用同一库的能力。遵循这两个原则:
* 导入路径不应该包含/lib/。
* 库不应该使用../转义lib目录。