2010-12-03 3 views
0

私は、このようなMVCソリューションを3つの「プロジェクト」で設定しています。ASP.NET MVC - 認証レイヤーはどこに行きますか?

ウェブ(MVCプロジェクト、ビュー、コントローラ、のviewmodels)

モデル(ドメインオブジェクト)

永続性(NHibernateはマッピング、SessionFactoryの)

私は、リポジトリの構築を開始する必要があります認証モデルから始める予定でした。基本的には、デフォルトのMVCテンプレートに続いて、IMembershipServiceIFormsAuthenticationServiceと関連クラス(カスタムコードを使用し、認証プロバイダに組み込まれていない)を使用します。

私の質問は...これはどこに行けばよいですか?私のリポジトリは、私のDomainオブジェクトと私のPersistence Layerの両方にアクセスする必要があります。しかし、私はどんな種類の「カップリング」も悪いデザインであることを読んでいます。だから私はモデル/持続性を参照するリポジトリ/サービスのための第4のプロジェクトを作成することを躊躇しています...しかし、私は実際にそれを論理的に行うための他の方法を見つけることはできません。

答えて

3

これは非常に主観的です。

あなたとあなたのチームにとって意味をなさないことをしてください。

私はそれらを残りのリポジトリと一緒に投げます。私はユーザーがアプリケーションの権利の中心にあることを意味しますか?ユーザーは何かを所有していますか?もしそうなら、彼は根ではありませんか?

+0

解決策の別の部分を参照する必要があることを恐れています。それは私が向きを変えたどこかで見えます、私が見ているのは、プロジェクトのどの部分にも「何らかの」カップリングを持たせるのがひどいことを話す人々です。現時点で私と私のチームにとっては意味がありません。なぜなら、あるレベルでドメインとマッピングモデルに結合することなく、実際にデータベースと通信することは不可能だからです。アプリケーションのリポジトリセクションにSessionFactoryを表示できるようにしますか?私はすべてが何かを見るのを止めなければならないのですか? – Ciel

+0

アセンブリの参照にはあまり関心がありません。事実彼らは*結合されています。一方は機能するために他方を必要とする。技術的に利用可能な範囲と範囲にあるものを誤って使用することを避けるために、一部の規律が常に必要となります。 –

+0

一般的に、依存関係が一方向に向いていれば、あなたは良い状態です。経験則では、依存関係がユーザーから永続性に戻る(たとえば、プレゼンテーションレイヤー→サービスレイヤー→永続化レイヤー)が、両方向に移動したり、レイヤーをスキップしたりすると、問題が発生する可能性があります。 – Paul

2

リポジトリはドメインの一部です。

アセンブリの参照数を減らしてプロジェクトの数を最小限にする場合は、常に緊張が存在します。つまり、機能をより細かいアセンブリに分割することによって、各アセンブリの参照の依存性を減らすことができます。しかし、プロジェクトを過度に多数のアセンブリに分割すると、管理するための労力が必要になります。

もう1つのポイントは、認証にはいくつかの側面があることです。 1つは、ユーザー、役割、権限などのモデルを管理することです。これはドメインの関心事です。もう1つは実行のコンテキスト(ASP.Netアプリケーション、WinFormsなど)とのインタフェースです。これはインフラストラクチャに関する懸案事項です。結果として、私はMVCプロジェクトやフォーム認証クッキーの設定、現在のスレッドプリンシパルの設定などの機能を実行する小さなサービスになります。

+0

優秀な説明。 – Paul

1

Separated interface patternには、モデルとリポジトリインターフェイスがGUIと実際のリポジトリの実装は別として、別個のアセンブリです。これは、後で実装を切り替えることができ、テストを簡素化できるようにするためです。

私は、リポジトリインタフェースと実際の実装をmvcプロジェクトまたはリポジトリプロジェクトに入れても問題ありません。後でIoCコンテナを使用すると、後から移動するのは簡単です。

関連する問題