私たちのアプリのいくつかは、以下の例の複数のデータベースを使用しています - それぞれが独自の個別の DBML ファイルにあります。問題は、MVC の慣習により、それらすべてがnamespace AppName.Models
クラス名の競合を引き起こすことです。
2 つのオプションのどちらがより適切な修正であり、その理由は次のとおりです。
1.) それらを別々の名前空間に入れる。stylecop/resharper を満足させるために、それらは独自のサブフォルダーに移動します。
- /モデル
-
- /ライブ
-
-
- Live.dbml
-
-
-
- LiveDataContext.cs
-
-
- /Crm
-
-
- Crm.dbml
-
-
-
- CrmDataContext.cs
-
**しかし、コードでは、それらのすべての使用は、オブジェクトを区別する必要がLive.Customer
あります。Crm.Customer
編集:これのもう1つの主な欠点は、フォルダー内のサブフォルダーを使用する専門家からのサンプルコードが他にないことModels
です。その上、Helper
ファイル コードの再利用のために同じ命名を維持するために - 1 つのデータベースのみを使用するアプリでさえ、.MVC でModels
実行している人を見たことがない.
2.) 1 つまたは両方の DBML デザイナで、すべてのオブジェクト名にプレフィックスを追加します。これが私の現在のアプローチです。Live データベースにはCustomer
とOrder
オブジェクトがあり、Crm データベースにはCrmCustomer
とがありCrmOrder
ます。それらはすべて同じ名前空間と/Models
フォルダーにとどまります。ただし、これには 2 つの主な欠点があります。
- 子オブジェクトにアクセスする際の接頭辞のかなりの冗長性:
CrmCustomer.CrmOrders.First().CrmOrderType
Marsha Marsha Marsha - 1 つのデータベースのみを使用する他のアプリでは、多くの場合、プレフィックスを省略します。そのため、コードの再利用または
Helper
ファイルの実行中に、多くの検索/置換を行う必要があります。Helper
これは、エラー/アクティビティ ログなど、すべてのアプリに追加されるファイルで特に顕著です。
ですから、他の専門家が 2 つの戦略のどちらを使用しているか、またはまったく別の方法を使用しているかについて、他の専門家の意見を聞きたいと思います。データベース間で少なくともいくつかの名前の競合が発生することは、かなり一般的な出来事のようです。ありがとう
テーブル名の例:
ライブ データベース:
- お客様
- 注文
- 住所
- 電話
- ログ
- 20 の他のテーブル
イントラネット データベース:
- お客様
- 注文
- 住所
- 電話
- ログ
- 20 の他のテーブル
CRM ツール データベース:
- お客様
- 注文
- 住所
- 電話
- ログ
- 400 その他のテーブル