私はASP.NET MVCを初めて使用し、個人ユーザー認証を使用するMVC 5アプリケーションを開発しています。 Modelレイヤー、DALレイヤー、Reposなどのアプリケーションを分離するときにレイヤードパターンを実行してきましたが、今はMVC 5で、ユーザーとロールの管理と認証を使用できるようにしたいと考えています。 、そしてそれでも私のアプリケーションにその階層化構造が残っています。今のところ、IdentityはMVCプロジェクト自体と、そこにユーザーモデルとロールモデルがあり、コンテキストも含まれているようです。
私のアプリケーションで今やったことは、DAL、UnitOfWork、Repos、その他のモデルなど、分離するはずのすべてのレイヤーをMVCプロジェクトに(別々のフォルダーに)持っていることです。今。そして、それが正しい方法ではないことを知っています。
それで、誰かがこれについてのいくつかの良い例や記事を私に指摘したり、それが可能かどうか、そしてどのようにして可能かを直接説明できますか?グーグルはこれについて私に友好的ではありませんでした。ありがとう!
これが私が試してみたいことの簡単なドラフトです...私はこれらのレイヤーを作成します:
Contoso.Core:
このレイヤーは、データベースのTABLESを表すすべてのエンティティ/クラスを保持します。
したがって、たとえば、私は次のようになります:
これらのエンティティ/クラスをドメインオブジェクトと呼ぶ人もいれば、POCOクラスと呼ぶ人もいます。
または、これらのエンティティ/クラスは他のレイヤー間で使用される場合とされない場合があるため、コアレイヤーで定義されます。
Contoso.Data:
このレイヤーは、ContosoDbContext.cs
クラスを定義する場所です。 DbSet<>
をすべて定義したのは、そのファイル内です。したがって、たとえば、ContosoDbContext.cs
内に次のように記述します。
言うまでもなく、Contoso.DataレイヤーはContoso.Core
レイヤーに依存関係があります。さらに、ジェネリックリポジトリと「データアクセス」に関連するものをすべて持つのは、そのContoso.Data
レイヤー内です。
Contoso.Service:
このレイヤーは、すべてのビジネスルールを配置する場所です。たとえば、Login()
メソッドを持つUserService.cs
クラスがあるとします。 Login()メソッドはユーザー名/パスワードを受け取り、リポジトリを呼び出してユーザーを検索します。
サービスレイヤーにはリポジトリが必要なので、Contoso.Data
レイヤーに依存関係があります。また、ユーザークラス(Contoso.Core
レイヤー内にたまたま存在する)で遊んでいるため、Contoso.Core
レイヤーにも依存関係があります。 。
Contoso.Web.Framework:
このレイヤーは、Contoso.Core
、Contoso.Data
、Contoso.Service
に依存します。このContoso.Web.Framework
レイヤーを使用して、依存性注入を構成します。
Contoso.Web:
最後のレイヤーであるMVC 5.0アプリケーションは、Contoso.Web.Framework
およびContoso.Service
レイヤーのContoso.Core
ANDに依存します。
コントローラーは、Contoso.Service
レイヤーで定義されたクラス内に存在するメソッド(たとえば、Login()メソッド)を呼び出します。
Login()メソッドは、たとえば、ユーザークラス(nullまたはデータが設定されている)を返す場合と返さない場合があります。また、ユーザークラスを返すため、コントローラーの内部にいるため、Contoso.Web
レイヤーには、Contoso.Service
およびContoso.Core
への依存関係が必要です。
もちろん、ここではすべて、またはすべてのレイヤーについて詳しく説明していませんが、これは、使用するアーキテクチャのタイプの例を示すためのものです。
これまでのところ、質問には答えていませんが、MVC 5.0とその新しいIdentityメカニズムについてはほとんど知りませんが、Contoso.Core
レイヤーには、Microsoft.AspNet.Identity.EntityFramework
に加えてMicrosoft.AspNet.Identity.Core
への依存関係が必要になると思います。
同様に、私のContosoDbContext.cs
クラスは、Microsoft.AspNet.Identity.EntityFramework.dll
に属しているIdentityDbContext
インターフェイスを実装する必要があります。
これは、私のContoso.Data
レイヤーがMicrosoft.AspNet.Identity.EntityFramework
に依存し、おそらくMicrosoft.AspNet.Identity.Core
にも依存していることを意味します...
あなたが言うように、新しいMVC 5.0プロジェクトを作成すると、これらすべてが存在し、単一のアプリケーション内で定義されます。何もレイヤーに分離されていません。したがって、上記のアーキテクチャでは、ContosoDbcontext.cs
クラスはContoso.Data
レイヤー内にあり、ASP.NET MVCアプリケーション内には直接ありません。
私は新しいASP.NET Identityを試したことも、物事を切り離そうとしたこともないので、質問に正直に答える方法がわかりません。私はあなたが物事を動かして動かさなければならないだろうと思います。
もしそうなら、いつそれが起こったのか、そしてあなたが遭遇した事柄/問題は何かを私たちに教えてください。
その間、私はこれがあなたにいくつかの光を当てるのに役立つことを願っています(またはそうではありません)。
ビンス