Early Bound と Late Bound の違い(Dynamics 365 / Dataverse)

D365 Project

Dynamics 365 の Dataverse(旧 Common Data Service, CDS) では、C# を使用してデータを操作する際に、
主に Early Bound(早期バインディング)Late Bound(遅延バインディング) の2つの方法があります。

それぞれのアプローチにはメリット・デメリットがあり、プロジェクトの要件に応じて使い分ける必要があります。

Early Bound(早期バインディング)

特徴:

・コンパイル時にデータ構造が決まる(型安全)。

・C# のクラス(エンティティクラス)を生成 して利用する。

・CrmSvcUtil.exe または Power Platform Tools for Visual Studio を使ってエンティティクラスを生成する必要がある。

・ntelliSense(入力補完)対応 で、コードの記述が容易。

・コンパイル時に型チェック できるため、タイポやエラーを防げる。

・ただし、データモデルが変更された場合は、クラスを再生成する必要がある。

Early Bound のサンプルコード:

using (var service = new OrganizationService(context))
{
    var contact = new Contact
    {
        FirstName = "太郎",
        LastName = "山田",
        EmailAddress1 = "taro.yamada@example.com"
    };
    service.Create(contact);
}

Contact クラスは、Dataverse から生成された型安全な C# クラス。

FirstName, LastName, EmailAddress1 などのプロパティが事前に定義されており、IntelliSense が機能する。

Late Bound(遅延バインディング)

特徴

・実行時にデータ構造を決定 するため、型が決まっていない(型安全ではない)。

・事前にエンティティクラスを生成する必要がない。

・汎用 Entity クラスを使用 し、属性を文字列キーで指定する。

・データモデルの変更に対して柔軟 だが、IntelliSense が効かず、開発が難しくなる。

・プロパティ名を手入力する必要があり、タイポ(スペルミス)のリスクがある。

Late Bound のサンプルコード:

using (var service = new OrganizationService(context))
{
    Entity contact = new Entity("contact");
    contact["firstname"] = "太郎";
    contact["lastname"] = "山田";
    contact["emailaddress1"] = "taro.yamada@example.com";
    service.Create(contact);
}

Entity クラス を使用して、Dataverse のテーブル(エンティティ)を動的に作成する。

"firstname", "lastname", "emailaddress1" などのプロパティ名は文字列で指定 するため、ミスしやすい。

・タイポがあってもコンパイル時にエラーにならず、実行時エラーが発生する 可能性がある。

Early Bound と Late Bound の比較

方式メリットデメリット適用シナリオ
Early Bound✔ IntelliSense 対応
✔ 型安全(コンパイル時チェック)
✔ コードが読みやすい
✖ データモデル変更時にクラスの再生成が必要
✖ 初期設定が必要
長期的なプロジェクト
安定したデータモデルを持つシステム
Late Bound✔ 柔軟で迅速な開発が可能
✔ スキーマ変更に強い
✔ 初期設定が不要
✖ IntelliSense が使えない
✖ 実行時エラーのリスクが高い
✖ コードの保守性が低い
プロトタイピング
頻繁にデータ構造が変わるシステム

Early Bound と Late Bound 以外にも、Dataverse では以下の方法でデータを操作できます:

  • LINQ クエリ(Early Bound を使用)
  • FetchXML(SQL に近い XML ベースのクエリ)
  • Web API (外部システムとの連携向け)

まとめ

✔ Early Bound を選ぶべきケース
→ 型安全性が重要 で、長期的に保守しやすいコードを書きたい場合
✔ Late Bound を選ぶべきケース
→ 柔軟性を重視 し、データモデルが頻繁に変更される場合

どちらの方法を選ぶかは、プロジェクトの性質と開発スタイルに依存します。

コメント

タイトルとURLをコピーしました