[スプリング]スプリング5プログラミング入門-15章:簡易Webアプリケーションの構成

6697 ワード

シンプルWebアプリケーションのコンポーネント


簡単なWebアプリケーションの典型的な構成は以下の通りです.
  • フロント
  • コントローラ+ビュー
  • サービス
  • DAO
  • フロントフロントフロントはWebブラウザのすべてのリクエストのウィンドウです.Spring MVCでは、DispatcherServiceletが現在のエンドサーバの役割を果たします.

    コントローラは実際のWebブラウザの要求を処理します.コントローラの主な役割は次のとおりです.
  • コントローラの動作に必要な機能
  • 応答結果の作成に必要なモデル
  • の応答結果を生成するビュー
  • を選択する.
    コントローラは、アプリケーションが提供する機能をユーザ要求に関連付けるメディアであり、提供機能の論理を直接実行しない.その処理を対応する論理を提供するサービスに委任する.
    サービスは機能の論理を体現する.サービスにデータベースバインドが必要な場合は、DAOを使用します.DAOは、データベースとWebアプリケーションの間でデータを移動するデータ・アクセス・オブジェクトの略です.アプリケーションは、DAOを使用してデータベースにデータを追加するか、データベースからデータを読み込みます.>
    リストや詳細画面などのデータをクエリーする機能のみで、追加の論理がない場合は、コントローラがDAOを直接使用することもできます.

    サービスの実装


    パスワード変更機能は、サービスで次の論理を実行します.
    パスワードを変更するメンバーのデータを
  • DBから取得します.
  • が存在しなければ、翼点が発生する.
  • 会員データのパスワードを変更し、
  • 変更履歴をDBに反映します.
  • これらの論理は1つのプロセスで終わるのではなく,いくつかの段階を経たプロセスである.中間プロシージャが失敗した場合は、前の操作をキャンセルし、すべてのプロシージャが成功したときに完了する必要があります.したがって、サービスメソッドはトランザクション範囲内で実行されます.パスワード変更機能もspringの@Transactionalを使用しています.
    @RequestMapping(method = RequestMethod.POST)
    public String submit(@ModelAttribute("command") ChangePwdCommand pwdCmd, Errors errors, HttpSession session) {
        ...
        changePasswordService.changePassword(
            authInfo.getEmail(),
            pwdCmd.getCurrentPassword(),
            pwdCmd.getNewPassword());
        ...
    }
    カスタムクラスを作成する理由は、Spring MVCが提供するフォーム値のバインドと検証、およびSpringフォームタグの連動機能を使用するためです.

    コントローラからDAOにアクセス


    サービスメソッドは論理を実行せず、DAOメソッドのみを呼び出して終了するコードです.
    public class MemberService {
        ...
        public Member getMember(Long id) {
            return memberDao.selectById(id);
        }
    }
    この場合、コントローラは、DAOに直接アクセスしても、Webアプリケーションの階層は大きなフレームワーク内で維持されると考え、サービスを使用する必要があるという圧力から脱します.
    @RequestMapping("/member/detail/{id}")
    public String detail(@PathVariable("id") Long id, Model model) {
        Member member = memberDao.selectByEmail(id);
        if (member == null) {
            ...
        }
        ...
    }
    サービス層ではなく、コントローラ上でデータアクセス層のDAOを直接使用するのが開発者一人一人の好みです.

    パッケージ構成



    Webリクエストを処理する領域には、コントローラクラスに関連するクラスが含まれます.検証コマンドオブジェクト値のValidatorは、Webリクエスト処理領域にあってもよいし、観点から、Validatorを機能提供領域に位置決めしてもよい.Web領域のパケットは、その領域に一致するパケット名(web、memberなど)を使用します.
    機能提供領域には、機能を提供するために必要なサービス、DAO、メンバーなどのモデルクラスが含まれます.機能提供領域は、サービス、dao、modelなどの詳細パッケージに分けることもできる.