私はDDD(ドメイン駆動型設計)とリポジトリパターン(C#で)を学んでいます。リポジトリパターンを使用してエンティティを永続化し、どのデータベースが実際に使用されているか(Oracle、MySQL、MongoDB、RavenDBなど)を気にする必要はありません。私は、しかし、どのようにデータベース固有のIDを処理するか分からない:ほとんどの(すべて?)データベースが使用しています。たとえば、RavenDBでは、格納する必要がある各エンティティにstring型のidプロパティが必要です。その他にはint型のidプロパティが必要な場合があります。これは異なるデータベースで別々に処理されるため、データベースIDをエンティティクラスの一部にすることはできません。しかし、少なくとも実際の実体を保管するときは、ある時点で存在しなければならないでしょう。私の質問は、これに関するベストプラクティスは何ですか?データベース固有のID:sをリポジトリパターンで抽象化していますか?
私が現在取り組んでいる考えは、サポートしたいデータベースごとに、ビジネスオブジェクトタイプごとにデータベース固有の「値オブジェクト」を実装することです。これらの値オブジェクトはデータベース固有のidプロパティを持ち、読み取りと書き込みのときに2つの値をマップします。これはいい考えのようですか?
本当に必要ですか?あなたが遭遇するメンテナンス地獄のために、私にとっては良い考えではないようです。 – xelibrion
私はxelibrionに同意します。 – NotMe
私は同じ問題に直面しています。残念ながら、ここに挙げた解決策のどれもが私を「完璧な解決策」としています(もしあれば...)。また、データ抽象化レイヤー内の特定の実装タイプにキャストすることも考えました。つまり、 'DTO'と' DAO'はすべてのDB型に共通のインターフェースですが、特定の 'DAO'実装はそのメソッド内の' DTO'を同じ特定の実装型にキャストします一度に1つのDBタイプしか使用されないと仮定します)。これにより、特定のIDを使用することができます。それは汚れているようですが、私が今までに思いついたのは最高です。 – eitanfar