現在、私は.NETアプリケーション用のDALを設計しようとしているという問題に直面しています。このアプリケーションは、後で何らかのNoSQLデータベースを使用します。
私が今までに評価したNoSQLデータベースは、主キーとして使用するタイプが異なる場合があります。たとえば、MongoDBはプロプライエタリObjectID
を使用しますが、RavenDBは共通のを使用しstring
ます。だから私の質問は、さまざまなタイプのドメインモデルIDを処理できるようなDALをどのように設計するかということです。
私の最初のアプローチは、ジェネリックドメインモデルを作成することでした。これは次のようになりました。
// Domain Model
public class Filter<TId> {
public TId Id { get; set; }
// ...
}
// DAO-interface
public interface IFilterDao<TId> {
bool Persist(Filter<TId>);
// ...
}
// This is where the problems begin
public static class DAOFactory {
public static IFilterDAO<T> GetFilterDAO<T>() {
// Implementation of IFilterDAO<T> can't be instantiated because types must be known at compile time
}
}
T
DAO-Factoryメソッドのコメントは、すでに問題を説明しています。対応するコードがコンパイル時に生成されるため、実行時に定義できません。
私の2番目と3番目のアプローチは、をまたはのId
いずれかに定義することobject
でしたdynamic
。RavenDBはobject
文字列が必要なため、を使用できませんでした。を使用dynamic
すると、ラムダをRavenDB APIに渡すことができませんでした(コンパイラエラー「式ツリーに動的操作が含まれていない可能性があります」が発生しました)。また、ラムダを使用する代わりに式ツリーを構築することは、時間がかかるため、実際には最後の方法です。
だから私は完全に立ち往生していて、誰かが私を助けてくれることを願っています。前もって感謝します。
更新:私はついにRavenDBをobject
使用できるようになりましたが、を使用するのは満足のいくソリューションではありませんobject
。