データアクセスオブジェクトの設計

データアクセスオブジェクトの設計を行います。これはつまり、データアクセスインターフェースを作成するということです。

BlogDao

ブログ Blog に対応するデータアクセスインターフェース BlogDao は、DaoRegisterableSimpleFindableUpdatableSimpleDeletable といった基本インターフェースを実装し、次のように定義しました。

public interface BlogDao extends Registerable<Blog>, SimpleFindable<Blog>,
        Updatable<Blog>, SimpleDeletable, Dao {

    /**
     * コードを指定してブログを取得します。
     *
     * @param code コード
     * @return ブログ、見つからなければ <code>null</code>
     */
    Blog findByCode(String code);

    /**
     * 指定した所有者のブログリストを取得します。
     *
     * @param ownerId 所有者のユーザ ID
     * @return ブログリスト
     */
    List<Blog> findByOwnerId(int ownerId);
}

ブログ記事 BlogEntry に対応するデータアクセスインターフェースは設けませんでした。ブログ記事の実態は Message 型のプロパティ「記事」であり、Message の機能を利用すれば十分にデータアクセス実装を実現で きるからです。ブログとブログ記事、ブログ記事とコメントの関連を永続化する必要はありますので、それらに対応するメ ソッドを BlogDao に 加えることにしました。 BlogDao の 完全なコードは BlogDao のソースコード を参照ください。

public interface BlogDao ... {

    /**
     * 指定したブログに指定した記事を登録します。
     *
     * @param blogId ブログ ID
     * @param entryId ブログ記事 ID (メッセージ ID)
     */
    void registerBlogEntry(int blogId, int entryId);

    /**
     * 指定した記事にコメントを登録します。
     *
     * @param entryId ブログ記事 ID (メッセージ ID)
     * @param commentId コメント ID
     */
    void registerComment(int entryId, int commentId);

    // findByCode

    // findByOwnerId

    /**
     * @require ブログが記事を一つも持っていない
     * @ensure ブログに関連するオブジェクトも削除される
     */
    @Override
    void delete(int blogId);

    /**
     * ブログが持つブログ記事の数を取得します。
     *
     * @param blogId ブログ ID
     * @return ブログ記事数
     */
    int countBlogEntry(int blogId);

    /**
     * 指定した範囲のブログ記事を取得します。記事番号は0から始まる整数で、ID の降順になります。
     *
     * @param blogId ブログ ID
     * @param no 開始点となる記事番号
     * @param num 件数
     * @return ブログ記事リスト
     */
    List<BlogEntry> findBlogEntries(int blogId, int no, int num);

    /**
     * 指定したブログ記事のコメントを取得します。
     *
     * @param entryId ブログ記事 ID (メッセージ ID)
     * @return コメントリスト
     */
    List<Comment> findComments(int entryId);

    /**
     * 指定したブログ記事を削除します。ブログ記事に付属するコメントも削除されます。
     *
     * @param entryId ブログ記事 ID
     */
    void deleteBlogEntry(int entryId);
}