0%

【文章翻譯】Introducing Realm for Dart & Flutter

【文章內容使用 Gemini 1.5 Pro 自動產生】

案例研究:使用 Dart 平台原生指令建立一個豐富的跨平台函式庫,支援 Dart 和 Flutter 應用程式

我們很興奮地看到 MongoDB 今天宣布 Realm for Dart 和 Flutter 的正式發佈!Realm 是一個反應式、面向物件的跨平台資料庫,在應用程式開發人員中很受歡迎。換句話說,它非常適合 Dart 和 Flutter。因此,在過去的一年中,我們與 MongoDB 合作將 Realm 帶到 Dart 和 Flutter。查看 MongoDB 發布的 部落格文章,了解 Realm 提供的功能、自早期預覽版以來的改進以及未來計畫。我們認為 Realm 將非常適合 Dart 和 Flutter 開發人員。

使用 Dart 將書籍寫入 Realm 資料庫

在這篇伴隨文章中,我們將透過幕後一窺 Realm for Dart 和 Flutter 的建立過程,作為一個實際的範例,說明如何建立新的基於 Dart 的開發人員 SDK。

Realm 範例

在深入探討 Realm SDK 的實作之前,讓我們先從快速了解如何使用 SDK 作為在 Dart 終端應用程式 上工作的開發人員開始(注意:Flutter 應用程式的步驟略有不同;請參閱 文件 以獲取詳細資訊)。

首先,您定義資料模型。這可以使用帶有額外 Realm 注解的普通 Dart 類別來完成。以下是一個書籍的範例資料類別:

定義好模型,並完全生成資料模型(見下文)後,您可以開始將一些書籍寫入 Realm 資料庫:

Realm for Dart 和 Flutter 是如何建立的

既然我們已經涵蓋了基本知識,讓我們看看 MongoDB 團隊是如何使用許多 Dart 函式庫和工具建立 Realm for Dart 和 Flutter。我們將看看在初始化 Realm SDK 時會發生什麼,Realm SDK 如何建立在一個共用原生 C++ 函式庫之上,Realm 終端工具是如何建立的,以及 Realm 模型是如何生成的。

初始化 Realm SDK

Dart 和 Flutter 開發人員將首先將 Realm 加入到他們現有的應用程式中,然後運行安裝程式:

1
2
dart pub add realm_dart
dart run realm_dart install

第一步只是將 Realm SDK 加入到 pubspec.yaml 中,以 註冊它作為應用程式的相依。第二步運行 Realm 終端工具,要求它安裝 SDK。如果我們查看 安裝指令的原始碼,我們可以看到安裝會確定我們正在開發的作業系統,然後下載該作業系統的 Realm SDK 二進位檔案。

但是為什麼安裝指令要下載二進位檔案?Realm SDK 是一個非常全面的產品,可以在各種作業系統和開發人員框架上使用。為了避免必須建立大量 Realm SDK 的實例,Realm 團隊決定將核心 Realm SDK 實作為一個共用的 realm-core C++ 函式庫。因此,安裝指令真正做的事情是下載這個核心函式庫的編譯版本,適用於應用程式支援的所有平台。

調用 realm-core SDK

使用 Realm SDK 撰寫 Dart 或 Flutter 應用程式的使用者可以獲得不錯的強類型 Dart API,如本文開頭所示。這些 API 如何與 realm-core C++ 函式庫相對應?

如果我們瀏覽 Realm SDK 的 lib 目錄,我們會找到 realm_bindings.dart,它以以下內容開頭:

謎團解開了:Realm SDK 使用 Dart 對原生 API 的互操作性支援(透過 dart:ffi 函式庫)來調用 realm-core。為了避免必須為大量可用的 Realm API 手動撰寫 FFI 綁定,這些綁定是使用 Dart 的 ffigen 工具自動生成的。這是我們在 Dart 團隊中看到快速發展的模式。

Realm 終端工具

讓我們轉向 Realm 終端工具本身。在上面,我們運行了安裝指令,但我們也可以在沒有指定指令的情況下運行這個工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ dart run realm_dart
Realm commands for working with Realm Flutter & Dart SDKs.

Usage: dart run realm|realm_dart <command> [arguments]

Global options:
-h, --help Print this usage information.

Available commands:
generate Generate Realm objects from data model classes
install Download & install Realm native binaries into a Flutter or Dart project
metrics Report anonymized builder metrics to Realm

Run "dart run realm|realm_dart help <command>" for more information about a command.

您可能會注意到這個輸出看起來很像核心 dart 和 flutter 工具的輸出。這不是巧合;所有三個工具都是使用相同的 Dart 基礎函式庫建立的,這些函式庫來自 package:args,專門用於終端工具:

  • args 函式庫對將原始命令列參數解析為選項和標誌有豐富的支援。
  • command_runner 函式庫提供工具支援的指令結構(例如,安裝)。

生成 Realm 模型

生成指令特別有趣,因為它根據我們在「Realm 範例」章節中定義的帶有注解的 Dart 模型類別生成完整的 Realm 模型:

1
dart run realm_dart generate

生成指令是如何工作的?它依賴於 Realm 生成器,該生成器建立在 Dart 的 build_runner 之上,這是一個用於生成器的框架,它接收一組輸入檔案,然後建立新的輸出檔案。通常 - 如 Realm 案例 - 輸入是帶有注解的 Dart 原始碼檔案,輸出檔案是額外的生成的 Dart 原始碼。

結語

希望您喜歡這次對大型開發人員框架如何從一組可重複使用的 Dart 函式庫中建立起來的幕後一窺。如果您是框架開發人員,希望這能为您提供一些靈感,激發您下一个基於 Dart 的框架的構思。

對於 Dart 和 Flutter 應用程式開發人員來說,Realm 是 MongoDB 團隊提供的一個很棒的新產品。我們邀請您查看 Realm SDK 文件 以及今天的 Realm 部落格文章


介紹 Realm for Dart 和 Flutter 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

undefined