web-dev-qa-db-ja.com

ASP.NET Coreのデータベースを他のプロジェクトと共有するためのベストプラクティスは何ですか?

従業員データベースを共有する必要がある複数のASP.NET Core Webアプリケーションがあります。リポジトリとモデルを一度作成して、複数のプロジェクトで使用できるようにしたいと考えています。

これのベストプラクティスは何ですか?ASP.NET Coreでこれをどのように達成できますか?

VS2017、SQL Server、およびIIS現在使用しています。

4
g00n3r

私は実際にそれをしないようにアドバイスします。複数のアプリケーション間でデータベース-あらゆる種類のデータベース-を共有することは、ほとんどの場合中心的な結合であり、あらゆる種類のスキーマの変更が必要なときに、非常に困難な状況に直面する可能性があります。これには実際にはアンチパターンがあります-統合データベース( https://martinfowler.com/bliki/IntegrationDatabase.html )。

データアクセス層を共有することは、パッケージマネージャーまたはソース管理共有フォルダーのどちらを使用する場合でも、アプリケーション間で可能ですが、私の経験では、これによりシステムの柔軟性と保守性が100倍悪化します。システム間の結合により、データベース更新のタイミングが大幅に難しくなる場合があります。

代わりに、データベーススキーマを担当するシステムの1つにすることをお勧めします。通常、ドメインがより自然にデータをカバーするアプリケーションがあります。次に、WCF、HTTP、メッセージバスなど、パブリックAPIを介してデータへのアクセスを公開します。これにより、変化からの絶縁層が得られます。データベースに変更の理由がある場合、責任のあるアプリケーションのみが同時に更新する必要があります。他のアプリケーションに関する限り、APIは同じままなので、これが発生しても何も変わりません。

3
Mr Cochese

私が過去にやったことは、複数のソリューションを共有するgitリポジトリをセットアップすることです。どちらのソリューションもリポジトリプロジェクトとドメインプロジェクトを共有します

フォルダー構造は次のようになります。

MyProject
├── Solutions
│   ├── MyProject.SolutionOne.sln
│   ├── MyProject.SolutionTwo.sln
|   |
├── Projects
|   |
│   ├── MyProject.SolutionOne.Web
│   │   ├── MyProject.SolutionOne.Web.csproj
|   |   
│   ├── MyProject.SolutionTwo.Web
│   │   ├── MyProject.SolutionTwo.Web.csproj
|   |
│   ├── MyProject.Repository
│   │   ├── MyProject.Repository.csproj
|   |
│   ├── MyProject.Domain
│   │   ├── MyProject.Domain.csproj
2
Stout01