dart系列之:手寫Library,Library編寫最佳實踐

flydean發表於2022-01-10

簡介

Library是dart用來組織程式碼的一種非常有用的方式,通過定義不同的Library,可以將非常有用的dart程式碼進行封裝,從而提供給其他的專案使用。雖然我們可以自由使用import或者export來對library進行匯入和匯入。但是什麼樣的用法才是最合適的用法呢? 一起來看看吧。

使用part和part of

雖然很多程式設計師討厭使用part,但是dart確實提供了part這種功能用來將一個大的lib拆分成多個小的檔案。

沒錯,和part的中文含義一樣,part就是將lib檔案進行拆分用的。

part of表示當前檔案是另外一個主檔案的一部分。part表示主檔案是由引用的檔案組成的。

我們舉個例子,假如現在有三個檔案student_age.dart,student_name.dart和student.dart.

其中前面兩個檔案是後面一個檔案的組成部分。

student_age.dart:

part of student;

int getAge(){
    return 18;
}

student_name.dart:

part of student;

String getName(){
    return "jack";
}

student.dart:

library student;

part 'some/other/student_age.dart';
part 'some/other/student_name.dart';

上面的程式碼有什麼問題呢?

上面程式碼的問題在於對於student_age.dart來說,裡面的part of只是指定了所屬的library,但是我們讀起來會一頭霧水,因為不知道具體的library到底在什麼地方。

所以應該這樣寫:

part of '../../student.dart';

src中的檔案

預設情況下lib目錄下的src檔案只是package內部使用的,不允許被外部的專案所呼叫。

所以我們一定不要直接引入lib包中的src檔案。

package中的lib檔案

對於package來說,lib中的檔案是可以被匯出的檔案,但是我們在引入package的時候最好不要使用絕對路徑或者相對路徑直接匯入lib中的檔案。

而是需要使用import 'package:'.

舉個例子,假如我們有下面結構的library檔案:

my_package
└─ lib
   └─ api.dart
   test
   └─ api_test.dart

api.dart就是我們要匯出的檔案。如果我們在api_test.dart中需要引用api.dart,則可以有下面兩種方式:

import 'package:my_package/api.dart';

和:

import '../lib/api.dart';

其中上面一種方式是官方推薦的方式,為什麼不使用下面一種方式呢?這是因為相對路徑的方式只能在包內部使用。並且dart官方不建議將lib放在引用路徑中,如果要引用lib內部的檔案, 一定要使用package:。

當然,如果是package內部的引用,則優先使用相對路徑,比如:

my_package
└─ lib
   ├─ src
   │  └─ stuff.dart
   │  └─ utils.dart
   └─ api.dart
   test
   │─ api_test.dart
   └─ test_utils.dart

那麼對應lib/api.dart來說,可以這樣引用:

import 'src/stuff.dart';
import 'src/utils.dart';

對於utils.dart來說,可以這樣引用:

import '../api.dart';
import 'stuff.dart';

對於test/api_test.dart來說,可以這樣引用:

import 'package:my_package/api.dart'; 

import 'test_utils.dart';

總之,不要在import的路徑中出現lib。

總結

以上就是dart中Library編寫最佳實踐。

本文已收錄於 http://www.flydean.com/28-dart-libraries-effective/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章