web-dev-qa-db-ja.com

クラスコントローラー、マネージャー、またはサービスを呼び出すのはいつですか?

たぶんそれはあなたに明らかです。私はJava(半年の仕事)に慣れていないので、同僚と話し合いました。クラスの責任に従ってクラスに名前を付けるのに問題があります。持ってる。

手伝って頂けますか?

ところで:私は現在、サービスクラスの永続層を使用する必要があるプロジェクトで働いています。パッケージをモデル、サービス、および永続性に分割しました。

45
MartinL

これらの用語の背後には、特定のパターンとガイドラインがあります。通常、私はそれを基にしています。

ControllerModel-View-Controllerデザイン パターンに基づいており、クラスに明示的に使用する必要がありますこの設計パターンに基づいてコントローラー機能を実装します。例えば。 Spring MVCを使用していて、いずれかのコントローラークラスから拡張する場合。

Serviceは少し具体的ではありませんが、 Service Layer パターン 「エンタープライズアプリケーションアーキテクチャのパターン 」。基本的に、コントローラーがよりプラットフォーム固有である場合(たとえば、HTTP経由のトランスポートおよびハイパーテキストのレンダリング、通常はWebベースのコントローラーのHTML)、サービスは誰がどのように使用しているのかを知る必要はありません。あなたは、例えばWebコントローラー。

管理者まあ...ものを管理します。接続、アプリケーションコンテキスト、セッション。通常、アプリケーション全体のコンポーネントが通信できる中心的な場所として。

51
Daff

すでに与えられた良い答えに追加するために、クラスに適した名前を見つけるのに苦労していることがわかった場合、クラスに複数の責任があるかどうかを調査する必要があります。その場合は、コードを明確にリファクタリングして、責任を個別のクラスに分離する必要があります。

14
Laf

命名規則については、公式の convention をお読みください。

マネージャー-名前がEntityManagerのようなコード内の物を管理することを示唆するように、エンティティを管理します、TransactionManager-トランザクションを管理します。したがって、暗号化に使用するAlgoを管理するSecurityManagerと呼ばれるものを持つことができますe.t.c

コントローラー-再び名前は多くのことを話し、何をする必要があるか、または何をするかを制御します。例えばActionController-ユーザーアクションイベントを受信したときの処理を処理します

サービス-一般的なメモに基づいて誰かが実行するタスクであるpostalServiceのようなものを検討してください。

パッケージングコードには多くの考え方が必要です。アプリケーションのパッケージングは​​、常に対象のビジネスモデルに合わせて行う必要があります。

ビジネスモデルに加えて、機能がアプリケーションの中心にあるかどうかを検討する必要があるため、コアに移動します。たとえば、機能が他のアプリケーションと通信するためのものである場合は、統合などで移動します。

11
mprabhat

クラスマネージャーに名前を付けたことがあるかどうかはわかりませんので、省略します。

私にとってはcontrollerは、何か(信号、メッセージなど)をどこに送るかを制御または決定するものです。

サービスは、通常はシステムまたはサブシステムの境界で、いくつかの機能を提供するインターフェイス(およびそのインターフェイスの実装)です。実装の詳細を可能な限り隠します。

1
Rostislav Matl