Areas andDependencyInjectionを使用してモジュール化されたASP.NETMVCアプリケーションを構築しようとしています。このアプリケーションは現在、次のプロジェクトで構成されています。
- Framework.Contracts(認証サービス、承認、ロギングのインターフェース)
- フレームワーク(認証サービスの実装、承認、...)
- Framework.Web(MVC Webアプリケーション)
各プラグインは、MVCエリアプロジェクト、契約、およびサービスの実装で構成されています。
- EmployeesPlugin.Contracts(IEmployeesServiceのインターフェイス)
- EmployeesPlugin(IEmployeesServiceの実装)
- EmployeesPlugin.MVC
Entity Framework DatabaseFirstまたはModelFirstを使用したい(既存のデータベースに接続する必要があるため)。私の問題は、エンティティを大まかに結合する方法がわからないことです。それらを単一の共有DatabaseLayerプロジェクトに入れたくありません。むしろ、Frameworkプロジェクトの中央エンティティ(User、Settings、LogEntriesなど)と各プラグインの追加エンティティ(Employee、Companyなど)を定義したいと思います。
ORMアーキテクチャ:1つまたは複数のモデル(エンティティフレームワーク)を読んだ後、複数のモデル(つまり、複数のデータコンテキスト)を作成することを考えました。実際、私は冗長なコードを持つという考えは好きではありません。
各エンティティのプロパティを公開するインターフェイスを作成することを考えました。これらのインターフェースは、プラグインごとにプロジェクトに配置されます。IEmployee
露出FirstName
とのようにLastName
。次にIEmployeeRepository
、従業員を返し、作成、編集、削除するための作成を開始しました。IEmployee
ただし、具体的なクラスがなく、公開するだけでは、従業員の作成は機能しません。
もう1つの問題は、Employee
エンティティに他のプロジェクト/プラグインのエンティティへの参照が含まれていることです。従業員がいくつかのプロジェクトを主催しているとしましょう。したがって、プロジェクトへの参照なしで汎用IEmployee
インターフェースを作成し、プロジェクトへのIEmployeeProjects
参照を含むインターフェースを作成することを考えました。そうすれば、両方のadd`IEmployeeProjectsEmployee
を実装する中央データベースレイヤープロジェクトにクラスを作成できます。IEmployee
public class Employee : IEmployee, IEmployeeProjects
{
// From IEmployee interface
public string FirstName { get; set; }
public string LastName { get; set; }
// From IEmployeeProject interface
public virtual ICollection<Project> Projects { get; set; }
}
問題は、EntityFrameworkを使用して物事をまとめる方法がわからないことです。