3

PHP でかなり典型的な MVC アプリケーションを使用しています。多くの場合、セッションからデータを取得する必要がありますが、これをコントローラーで行うべきか、サービスで行うべきかはわかりません。

たとえば、リクエストがヒットした場合domain.com/user/edit、コントローラーはセッションから現在のユーザーを取得してサービスに渡すか、サービスがセッション自体にアクセスできます。

サービスでそれを行うと、サービス層とセッション オブジェクトの間に依存関係が作成されます。コントローラーで行うと、コントローラーが少し太くなります。

ほんの些細な点であることはわかっていますが、セッションには多くの (小さな) 変数が保存されており、リクエストのパラメーター処理自体は非常に複雑です。

ありがとう!

4

2 に答える 2

4

短い答え:どちらでもない。

今、少し孤独な説明...

アーキテクチャの観点からは、セッションはストレージの形式です。PHP では、実際にどのタイプのストレージであるかを操作するのは非常に簡単です。

MVC のサービスは、アプリケーション ロジックを処理するモデル レイヤーの一部です。つまり、ドメイン オブジェクトとストレージの抽象化 (通常はデータ マッパーとして直接的または間接的に実装される) の間の相互作用を扱います。

したがって、$_SESSIONアクセス (初期化も) をある種の として抽象化する必要がありますSessionMapper。これは、ドメイン オブジェクト全体のストレージ、またはそれらのドメイン オブジェクトからの特定のパラメーターのストレージのみを処理できます。

また、セッションは (通常) リクエストの実行内で特異な構造であるためFactory、データ マッパーを生成する が、この のインスタンスを 1 つだけ作成するようにすることで、それを強制できますSessionMapper

サービスはこの (ファクトリ経由で共有される) セッション マッパーのみを使用し、コントローラーはそれについて何も知りません。

于 2013-02-19T18:25:54.423 に答える
-3

$_SESSIONグローバル変数です。グローバルにアクセスできるものを渡す必要があるのはなぜですか?

セッション データを検証する必要があり、そのデータを何らかの方法で準備する必要がない限り、そのような変数をコントローラー クラスに渡す必要はありません。

于 2013-02-19T05:07:49.193 に答える