David's Model は何年も前に David Nuescheler によって作成されたものですが、その考え方は今でも当てはまります。David's Model の主な考えは次のとおりです。
- データが第一、構造は二の次(おそらくですが)。
- コンテンツ階層は手動で設計し、成り行き任せにしない。
- ワークスペースは clone()、merge() および update() の場合に使用する。
- 同じ名前の兄弟に注意する。
- 参照は害が多いと考えられる。
- ファイルはあくまでもファイル。
- ID は害である。
David's Model については、Jackrabbit wiki (http://wiki.apache.org/jackrabbit/DavidsModel)に詳しい解説があります。
あらゆるデータの格納には、データベースなど別個のサードパーティデータソースを利用するのではなく、リポジトリを使用する必要があります。このことは、作成済みコンテンツ、バイナリデータ(画像など)、コード、設定などに当てはまります。このようにすると、1 つの API セットを使用してすべてのコンテンツを管理でき、レプリケーションによってこのコンテンツのプロモーションを管理できます。また、バックアップやログの単一ソースを得ることができます。
新機能をビルドするときには、常に JCR コンテンツ構造の設計から始め、次にデフォルトの Sling サーブレットを使用したコンテンツの読み込みおよび書き込みに進みます。これにより、初期設定済みのアクセス制御メカニズムで実装が正常に機能できることを確認したり、CRUD 形式の不要なサーブレットの生成を回避したりできます。
サーブレットをパスではなく resourceType に基づいて定義する必要があります。このようにすると、JCR アクセス制御を使用し、REST 原則に準拠し、要求で提供されるリソースおよびリソースリゾルバーを使用できます。また、これにより、サーバー側で URL をレンダリングするスクリプトを変更でき(クライアント側から URL を変更する必要がありません)、サーバー側の実装をクライアントに対して非表示にすることでセキュリティを強化します。