0

Entityを使用してMVC3でサイトを作成しています(Postgresにリンクされていますが、その部分が関連しているかどうかはわかりません.

ユーザーはいくつかの「リーグ」の一部であり、それらのリーグの 1 つに対して「イベント」を作成します。

そのリーグにアクセスできる他のユーザーがいて、彼らがイベントのリストを表示するときに、アクセスできる「リーグ」の一部である「イベント」のみを表示するリストが必要です。

現在、これを実現する方法は数多くありますが、最もエレガントで広く受け入れられている「正しい方法」を探しています。

現在、ユーザー -> リーグの関係は残りのデータと同じ場所に保持されているため、問題なくリーグでフィルタリングできます。私の問題は、HttpContext にアクセスしてリポジトリ レイヤー内の userId を取得し、フィルタリングを実行する必要があるかどうかわからないことです。

上記を行わない場合は、RoleMembership 機能を使用してリーグ、ロールを作成することを検討していましたが、それを行うための機能が組み込まれています。

問題は、MVC3/Entity でユーザー アクセスによって結果データをフィルター処理するためのベスト プラクティスは何ですか?

ブログ/チュートリアルのリンクが優先されますが、完全な回答も受け入れられる場合があります...

4

1 に答える 1

1

リポジトリが HttpContext オブジェクトを呼び出す必要があるとは絶対に思いません。このアプリケーションでは、依存性注入パターンに従うことをお勧めします。このシナリオでは、3 つのインターフェースがあります。1 つはデータ アクセス インターフェース (リポジトリ) です。もう 1 つは、フィルター処理されたデータをビュー (ビュー モデル) に提供するプロバイダーです。3 つ目は、ロール情報のプロバイダー (ロール プロバイダー) です。

したがって、リポジトリはスタンドアロンです。ロール プロバイダーには、HttpContext に対する依存関係があります (質問から収集します)。ビュー モデルは、リポジトリとロール プロバイダーの両方に依存しています。テストを容易にするために、使用を計画しているすべての HttpContext メソッドの依存関係ラッピングを作成することを強調します。

MSDN には、依存性注入と MVC に関するかなり広範なチュートリアルがあります: http://msdn.microsoft.com/en-us/gg618491

説明する:

public interface ILeagueRepository 
{
    IEnumerable<League> All;
}

public interface ILeaguesProvider
{
    IEnumerable<League> GetUserLeagues(string Username);
}

public class LeaguesProvider : ILeaguesProvider
{
    public LeaguesProvider(ILeagueRepository repository)
    {
         // ...
    }
    public IEnumerable<League> GetUserLeages(string Username)
    {
        return _repository.All.Where(league=>league.User == Username);
    }
}

public ActionResult LeaguesController
{
    public LeaguesController(ILeaguesProvider providerDependency, IRoleProvider roleDependency)
    {
        IEnumerable<League> leagues = providerDependency.GetUserLeagues(roleDependency.GetCurrentUser());
    }
}
于 2012-04-15T18:55:59.170 に答える