2012-01-27 20 views
0

私のプロジェクトでは、Addressesテーブルに3つの外部キーを持つCustomersテーブルがあります。 1つはMainAddress、1つはBillingAddress、もう1つはShippingAddressです。リポジトリまたはビジネスレイヤですべてのテーブルを更新する必要がありますか?

私は、CustomerRepositoryとAddressRepositoryで作業単位とリポジトリパターンを使用しています。

場合によっては、自分自身でアドレスを処理する必要がありますが、ほとんどの場合、Customersドメインオブジェクトの一部になります。

私の質問は、ベストプラクティスの設計に関する質問です。ビジネスロジック層は、CustomerRepositoryとAddressRepositoryの両方を呼び出して追加/更新する必要がありますか、またはCustomerRepositoryがアドレスを追加/更新できるだけのスマートでBLLが "AddCustomer"または "EditCustomer"とすべてのアドレステーブル自動的に追加/更新されますか?

答えて

1

私は、CustomerRepositoryでもアドレスの更新を処理させることができます。私はあなたが顧客のオブジェクトが 「関係を持っている」(すなわち、顧客が住所を持っている)を使用している一般的な住所の集まりを持っているオブジェクトモデルを使用していると仮定します。リポジトリのフードの下でORMを使用している場合は、このオブジェクトとその関係の更新を処理します。このリレーションシップの個々のオブジェクトや、このリレーションシップの更新を処理する必要があるビジネスロジックを各リポジトリに処理させることは効果がありません。 AddressRepositoryはアドレスで直接作業する場合にのみ使用します。これは、単純な「関係がある」というこの例の私のアドバイスです。ビジネスロジックがリポジトリではなくあなたのためにこれを処理するようにしたい場合、より複雑な関係を持つ時があります。たとえば、オブジェクトが異なるデータストアに分散されている場合があります。

+0

はい、ORMとしてエンティティフレームワークを使用しています。助けてくれてありがとう! – Scottie

関連する問題