FFLIBはアペックスのための無料のフレームワークが拡張されましたです。その構造は、Salesforceは推奨できアペックスエンタープライズデザインパターンを。
FFLIBフレームワークを使用する方法を学ぶ前に、まず、デザインパターンのApex企業の構造を見てください。
アペックス企業のデザインパターン
の「関心事の分離」の概念に従うように構造設計パターンアペックス企業。
「関心事の分離」のために、ウィキペディアのように定義されます。
問題(問題の分離、SOC)の分離は、唯一の懸念を包装及び取扱い、すなわち同一性「は、パッケージおよび操作を特定」する能力のソフトウェア部分に関連する「特定の概念、標的」(注目点)から構成されています容量。それは複雑で、原則として契約です。大幅に増加し、複雑にフォーカス混合一緒にリードするので、別の焦点を合わせることが可能であり、それぞれ、複雑さの処理原理を分離し、この方法は、処理されます。
懸念の分離は、オブジェクト指向プログラミングの中心概念です。ビジネス・ロジックから独立して特定の問題領域を対処する懸念このようなコードの分離は、ビジネス・ロジック・コードを呼び出すコードは、いかなる特定の問題領域(特定の問題領域の抽象コードに以下のコードを含まない、例えば、コード、側によってカプセル化を維持するために、特定の問題領域を持つ関数やクラス)、ビジネスロジックにパッケージ化、そのような変更は、管理するのは非常に良いことができますアプリケーション全体に分散していました。
4つの部分に分割され、企業の設計モデルを実装します。
- サービス層(サービス層)
- モデル層(ドメイン・レイヤー)
- 選択ロジック層(セレクタレイヤ)
- 作業部(作業単位)
四、基準部ものより詳細な定義Martin Fowler氏のサイト。
サービス層
サービス層の役割は、外部コールのカプセル化の再利用可能と機能、論理のセットを提供します。
ここで「外部」とは、外部アプリケーションと、コントローラVisualforceページ、SalesforceのAPIサービスとして、Salesforceの自体が機能の一部が含まれます。
サンプルコード
アペックスでのサービスクラスの設立:
public with sharing class AccountService {
public static Account createAccount(String name) {
// 建立 Account 对象的逻辑
Account a = new Account(Name = name);
SavePoint sp = Database.setSavePoint();
try {
insert a;
} catch (Exception e) {
Database.rollback(sp);
throw e;
}
}
}
次いで、(例えば、コントローラVisualforceページのような)他のコードを使用することができます。
Account a = AccountService.createAccount('HelloWorld Company');
モデル層
各モデルレイヤのクラスは、オブジェクトのために作成されています。クラスモデル層は、自動的に追加および削除した後に動作を変更するために必要なオブジェクトとして、関連オブジェクトの一連のためのロジックをカプセル化し、等。
そして、サービス層は、異なるモデルの層のロジックは外部から呼ばれることはない(ただし、サービス層と呼ばれることができる)ということです。
Apexで、トリガーは、典型的なクラスベースのモデルの層です。
選択ロジック層
ロール選択ロジック層は、それによって他のデータベース操作の層を分離し、論理的なクエリに関連するオブジェクトをカプセル化します。
サンプルコード
アペックスは、タイプの選択ロジックを確立しました:
public with sharing class AccountSelector {
public static Account selectById(Id id) {
// 通过 Id 查询 Account 对象的逻辑
// ...
}
}
次いで、(例えば、サービス層または外部コードのような)他のコードを使用することができます。
Account a = AccountSelector.selectById('XXXXXXXXXXXXXXXXXX');
仕事の単位
作業単位は、修飾されている各論理欠失に格納されたデータのために責任があるデザインパターン、であり、データベースの変更にデータを書き込むための責任があります。
アペックスの発展のために、作業単位は、次のような特徴を使用して達成することができます。
- 一連の欠失を記録するデータを変更しました
- 記録データとの関係
- 変更データはデータベースに保存されている場合、ライトワンスおよびシステム性能を向上
- あなたは、データベースへのデータの変更を保存すると、エラーが発生したときに、自動的にセーブポイント、自動ロールバックを定義しました。これは、開発者の作業を軽減します
たとえば、.NETのEntity Frameworkの、ObjectContextはDbContextで、作業単位のパターンを反映するように設計。