2017-09-24 7 views
1

コマンドパターン: -要求はオブジェクトの下にコマンドとしてラップされ、呼び出し元オブジェクトに渡されます。 Invokerオブジェクトは、このコマンドを処理できる適切なオブジェクトを探し、コマンドを実行する対応するオブジェクトにそのコマンドを渡します。このユースケースでのコマンドデザインパターンの適用?

人事担当者が従業員の作成/閲覧/更新/削除ができる従業員管理システムを考えてみましょう。私のキャリアの中で、私はいつも

Request from browser -> EmployeeController -> EmployeeService -> EmployeeDao 

EmployeeService.javaはすべてが作成/更新/ Commandパターンを読んだ後、コントローラ

から呼び出される操作を削除/読み、私が見る含まれていますのようなものを、このユースケースを設計しましたコントローラがInvokerとして動作してDeleteCommandHandler/UpdateCommandHandler/CreateCommandHandler/ViewCommandHandler/ViewCommandHandlerのような適切なCommandHandlerを呼び出すようにする別の方法

コマンドの適用パターンはここで意味がありますか?

答えて

1

コマンドデザインパターンは間接的なレイヤーを提供し、CRUDコマンドだけに限定される必要はありません。サービスレイヤがより適切かもしれないコマンドオブジェクトとしてのインボーカは、より良い使い方のためにレイヤ内を通過できます。コマンドオブジェクトは、要求を処理することができるレシーバオブジェクト(ハンドラの形式)で事前にプログラムされています。追加された利点は、コマンドがから独立して呼び出されるときに、それらが呼び出された場所からの監査(ログのようなコマンド層アクション)がと呼び出されたときの監査になります。

+0

「コマンドデザインパターンは間接的なレイヤーを提供し、CRUDコマンドだけに限定する必要はありません。より適切な使用のために、コマンドオブジェクトとしての呼び出し側がレイヤー内を通過することができるようになりました。 – emilly

+0

@ emilyあなたの設計ではすでにサービス層があります。このサービス層はDAOオブジェクトを直接呼び出しています。すべての_requests_(CRUDを含む)を適切なコマンドオブジェクトとして実装できます。これは、サービス層とそれを実行することができる実際のオブジェクト(_Receiver_と呼ばれる)の直接結合を壊すコマンド層を形成する。このようなインダイレクションの層は、大規模なアプリケーションで非常に役立ちます。コマンド層は、コマンドのロギング、操作の取り消しなどを適切に制御できます。MetaCommandは、コマンドを内部でカプセル化できます。 –

+0

私がコマンド・パターに行くと、コントローラーはeditコマンドハンドラーのような適切なコマンドハンドラーを見つけるでしょう。したがって、コントローラからサービスへの直接的な指示はありませんが、コントローラからコマンドハンドラへの直接的な指示はありません。右 ? – emilly

関連する問題