David's Model は何年も前に David Nuescheler によって作成されたものですが、その考え方は今でも当てはまります。Davidのモデルの主な特徴は次のとおりです。
clone()
、merge()
、update()
用です。Davidのモデルは、Jackrabbit wikiのhttps://wiki.apache.org/jackrabbit/DavidsModelにあります。
あらゆるデータの格納には、データベースなど別個のサードパーティデータソースを利用するのではなく、リポジトリを使用する必要があります。このことは、作成済みコンテンツ、バイナリデータ(画像など)、コード、設定などに当てはまります。このようにすると、1 つの API セットを使用してすべてのコンテンツを管理でき、レプリケーションによってこのコンテンツのプロモーションを管理できます。また、バックアップやログの単一ソースを得ることができます。
新機能をビルドするときには、常に JCR コンテンツ構造の設計から始め、次にデフォルトの Sling サーブレットを使用したコンテンツの読み込みおよび書き込みに進みます。これにより、お使いの実装が既製のアクセス制御メカニズムと適切に動作することを確認でき、不要なCRUDスタイルのサーブレットを生成しないようにできます。
サーブレットをパスではなく resourceType に基づいて定義する必要があります。これにより、JCRアクセス制御の使用、REST原則の遵守、リクエストで提供されるリソースとリソースリゾルバーの使用が可能になります。 また、クライアント側からURLを変更する必要なく、サーバー側でURLをレンダリングするスクリプトを変更できます。また、セキュリティを強化するために、サーバー側の実装の詳細をクライアント側から非表示にできます。
ノードタイプはインフラストラクチャレイヤー内の下位レベルで機能し、ほとんどの要件は nt:unstructured、oak:Unstructured、sling:Folder または cq:Page のノードタイプに割り当てられた sling:resourceType を使用することで満たすことができます。ノードタイプはリポジトリ内のスキーマと同じで、ノードタイプの変更は最終的には非常に高コストになる可能性があります。
命名規則に準拠することにより、コードベースの一貫性が高まるので、不具合の発生率を低下させ、システムで作業する開発者の生産性を高めることができます。開発AEMでは、Adobeが次の規則を使用します。
ノード名
プロパティ名
コンポーネント(JSP/HTML)