2012-04-16 21 views
3

私は、サービスレイヤーにいくつかの機能を移す必要があることを知りました。この特定の場合において、それは、zend-paginatorに関するexampleに関する。サービス層はコントローラとモデル(マッパー)の間にありますか?

この例では、サービスレイヤーはコントローラとモデルの中間段階に過ぎません。これはそれが意図された役割であると思われ、certain circumstancesの下ではそれは良い意味があるようです。

しかし、それは私のためにいくつかの質問を提起します。

まず、サンプルサービスコードを実際のペナルティなしでコントローラに簡単に移動することはできません。コードレイヤーを削除してもメリットがありませんか?

コードをサービスレイヤーに移動することに目に見えるメリットがあるとすれば、残りのマッパーのやり取りはどうなりますか?コントローラは、いくつかのタスクのためのサービス層と他のもののマッパーにアクセスするか、サービス層はすべてのマッパー相互作用のプロキシになりますか?

フォームから新しい行を作成するなどのように、サービスレイヤーは値を追加しないため、サービスレイヤーレベルの文字通りパススルー機能になります。

いくつかのタスクでこれを使用すると、後で複雑になるようですが、プロキシとして使用すると意図的にコードの複製と複雑さが導入されるようです。

「ベストプラクティス」に関する明確な説明は非常に役に立ちます。

答えて

1

コードをコントローラに移動すると、コントローラが太くなります。これは、アプリケーションとUIを緊密に結合します。それは、異なる状況でその行動を実行することを困難にする。スキニーコントローラは、1つ以上のサービスを使用して応答を生成することによって、特定のコンテキストで要求を処理します。

これらのサービスは、異なるコンテキストに統合できる疎結合の方法でモデルとやり取りすることによって、アプリケーションの境界(ドメインロジック)を定義します。

たとえば、コントローラはMVCアプリケーションのサービス層とやりとりします。コンソールラッパーは、cliのサービスレイヤーと対話できます。 SOAPまたはJSON-RPCサーバーは、リフレクションを使用してサービスをWebサービスAPIとして公開することができます。これらのすべては、コードを複製せずに行うことができます。

+0

お返事ありがとうございます。あなたのポストから、おそらくサービス層に含まれるロジックの量とアプリケーションの対話要件によって、サービス層の必要性が決まります。さらに、サービス層がいったん配置されると、すべてのモデルの対話がそれを通過すると仮定する。 正しく理解していますか? – Stryks

関連する問題