[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目錄。