一般的な MVC 設計のアプリケーションでは、サービス層をユーザー セッションに依存させるのは悪い考えですか? データベースからいくつかのオブジェクトをフェッチするサービス メソッドがあり、誰が呼び出しを初期化したかに応じて異なる結果を返したいとします。たとえば、管理者は 10 行のオブジェクトを取得し、通常のユーザーは 7 行しか取得しない場合があります。最後の 3 つは「管理者専用」オブジェクトだったためです。これを解決するいくつかの方法は次のとおりです。
- 呼び出し元のユーザーを含める新しいメソッド パラメーターを導入します。依存関係はありませんが、多くのメソッドでユーザー パラメーターを投入する必要があるのは面倒です。
- 異なるユーザー ロールに対して異なるメソッドを作成します (複数の結果が得られます)。また、依存関係はありませんが、基本的に同じことを行う多くのメソッドがあり、コードの重複のリスクが高くなります。
- メソッドが、現在のユーザー セッションを格納する静的コンテキストの ThreadLocal 変数から読み取れるようにします。この変数は、各リクエストの前に設定されます。
最近、私は最後の方法をますます使い始めました。なぜなら、それはきれいなインターフェースを提供し、作業するのが非常に実用的だからです。Filter は、現在のスレッドに常にユーザー セットがあることを確認します。これはデザインが悪いのでしょうか?これをサービス層から Web 層への依存関係と見なす人もいると思いますが、個人的にはそれらはかなり切り離されていると思います。最大の結果は、別のクラスの状態に応じてメソッドの動作が異なることです。これは、良いことと悪いことの両方になる可能性があります。
これについてどう思いますか?それが悪い解決策だとしたら、より強力な解決策は何でしょうか?