リモートオブジェクト使用のベストプラクティス
項目レベルセキュリティ
リモートオブジェクトには組織の項目レベルセキュリティ設定が反映されます。リモートオブジェクトを使用するページを作成する場合はこの点を考慮します。ページを表示しているユーザにアクセス権限がない項目は空白で表示されます。項目データを変更するアクション (create()、update()、および upsert()) は、アクセスできない項目が要求に含まれていればエラーで失敗します。
トランザクション境界
リモートオブジェクトでは、コードでトランザクション境界の制御が行われません。各リモートオブジェクト操作 (create()、update() など) は、別個のトランザクションです。操作がそれぞれ成功したり失敗したりすると、ビジネスプロセスの一部として複数の関連するオブジェクトを作成または変更する必要がある場合に問題になる可能性があります。たとえば、請求書レコードと関連する品目レコードを作成した場合、各レコードは別個のトランザクションに保存されます。リモートオブジェクト操作の一部は失敗し、一部は成功すると、データが整合性のない状態のままになることがあります。この問題は、サービスの信頼性には関係しません。この例では、一部の品目が入力規則に適合せずに失敗すると、レコードは作成されず、請求書は不完全なままになります。コードでクリーンアップして再試行しなければなりません。
一方で、JavaScript Remoting のトランザクション境界は Apex @RemoteAction メソッドにあります。1 つのメソッド内で簡単に請求書レコードと関連する品目レコードを作成できます。自動的な Apex トランザクションにより、すべてのレコードはまとめて作成されるか、一切作成されません。
ビジネスロジックの適切な配置とテスト
アプリケーションのビジネスロジック (特に複雑なロジックの場合) を配置する場所は、十分に考慮する必要があります。個々のオブジェクトの作成、編集、削除ができる簡単なページを作成する場合、「リモートオブジェクトと jQuery Mobile の併用例」のように、ビジネスロジックは最小限ですみます。ビジネスロジックをリモートオブジェクトと JavaScript でクライアント側に配置するだけで十分な場合があります。ただし、ビジネスルールやビジネスプロセスがより複雑な場合、そのロジックをクライアントレイヤから外してサーバ側に構築する方がより効果的になる可能性があります。
- セキュリティと一貫性: トランザクションの途中でユーザのネットワーク接続が失われたり、ユーザがページの JavaScript 実行方法を Firebug などのツールで変更したりすることがある点を念頭に置きます。リモートオブジェクトでは、入力規則、トリガ、共有ルール、項目レベルセキュリティ、およびその他のデータアクセス制限が適用されますが、ビジネスルールを Salesforce ではなく JavaScript 内に配置すると、それらが中断、変更、または迂回される可能性があります。
- テスト容易性: サーバ側のビジネスロジックは、Salesforce でテスト用に用意されているさまざまなツールを使用できます。このため、複雑な動作は Apex に配置し、Apex テストフレームワークを使用してビジネスロジックが意図したとおりに機能するか検証することをお勧めします。
- パフォーマンス: トランザクション処理の一部として多くのレコードを参照する必要があり、ブラウザにはレコードを表示しない場合は、クライアントにそのデータを送信するのは避け、代わりにデータをサーバで「ローカル」に処理することをお勧めします。ページが機能するためにどのデータが必要かを考え、ネットワークを介して不必要にデータをコピーしないようにします。
複雑さへの対応
アプリケーションでは、複雑さを注意深く管理する必要があります。単純な取引先責任者管理ページや店舗検索ページでは、複雑さの管理はそれほど必要ではありませんが、多くのビジネスプロセスでは必要です。リモートオブジェクトと良好に連携できる jQuery や AngularJS などの JavaScript フレームワークは、アプリケーションのユーザインターフェースの複雑さに対応するのに役立ちます。アプリケーションの懸念事項を複数のレイヤに分割し、できるだけ分離した状態を保つことを常に考慮します。これは「懸念事項の分離」と呼ばれ、従来からあるソフトウェアパターンであり、ベストプラクティスです。
データの整合性規則をトリガと入力規則に組み込むことを検討します。また、ビジネスプロセスルールを Apex コードにカプセル化することを検討します。@RemoteAction メソッドからアクセスできるようにし、JavaScript Remoting や SOAP または REST サービスと併用して場所を問わずに使用できるようにします。
リモートオブジェクトの代替方法
- 標準の Visualforce を使用すると、幅広いアプリケーション機能を実装できます。Visualforce では、標準のコントローラ使用時に多くの自動機能が用意されており、独自の Apex コードによる完全なカスタム機能もサポートしています。
- JavaScript Remoting もサードパーティの JavaScript フレームワークと良好に連携できるため、Apex でカスタムビジネスロジックにアクセスできます。
- Salesforce1 では、モバイルアプリケーションをすばやく作成できます。コードではなく宣言型ツールを使用して作成できる場合もあります。
ページやアプリケーションで必要な操作を十分に考慮し、各ジョブに最適なツールを選択してください。最適なツールがリモートオブジェクトの場合も、他のツールである場合もあります。