まず、これがこの質問をするのに適切な場所ではないことをお詫びしますが、他にどこから情報を得ることができるかはよくわかりませんでした。
.NETオブジェクト永続化ライブラリの初期バージョンを作成しました。その機能は次のとおりです。
- POCOの永続性のための非常にシンプルなインターフェース。
- 主なもの:考えられるほぼすべてのストレージメディアのサポート。これは、ローカルファイルシステム上のプレーンテキストファイルから、SQLiteなどの組み込みシステム、標準SQLサーバー(MySQL、postgres、Oracle、SQL Serverなど)、さまざまなNoSQLデータベース(Mongo、Couch、Redisなど)まで、あらゆるものになります。ドライバーはほぼすべての目的で作成できるため、たとえば、実際のバッキングストアがWebサービスである場合にドライバーを簡単に作成できます。
私が最初にこのアイデアを思いついたとき、私はそれが完全に素晴らしいと確信していました。私はすぐに最初のプロトタイプを作成しました。現在、接続プール、スレッドセーフ、IQueryable for LINQのサポートを試みるかどうかなどの問題について議論している「難しい部分」にいます。そして、それが価値があるかどうかをより厳しく検討しています。私自身の要件を超えてこのライブラリを開発します。
使用法の基本的な例を次に示します。
var to1 = new TestObject { id = "fignewton", number = 100, FruitType = FruitType.Apple };
ObjectStore db = new SQLiteObjectStore("d:/objstore.sqlite");
db.Write(to1);
var readback = db.Read<TestObject>("fignewton");
var readmultiple = db.ReadObjects<TestObject>(collectionOfKeys);
現在機能しているクエリインターフェイスは次のようになります。
var appleQuery = new Query<TestObject>().Eq("FruitType", FruitType.Apple).Gt("number",50);
var results = db.Find<TestObject>(appleQuery);
また、SQLWHERE句のようなものを渡すことができる代替クエリインターフェイスにも取り組んでいます。そして明らかに、NETの世界では、IQueryable/式ツリーをサポートするのは素晴らしいことです。
ライブラリは、さまざまな機能を備えた多くの記憶媒体をサポートしているため、属性を使用して、システムが各ドライバーを最大限に活用できるようにします。
[TableName("AttributeTest")]
[CompositeIndex("AutoProperty","CreatedOn")]
public class ComplexTypesObject
{
[Id]
public string id;
[QueryableIndexed]
public FruitType FruitType;
public SimpleTypesObject EmbeddedObject;
public string[] Array;
public int AutoProperty { get; set; }
public DateTime CreatedOn = DateTime.Now;
}
すべての属性はオプションであり、基本的にはすべてパフォーマンスに関するものです。単純なケースでは、それらのいずれも必要ありません。
SQL環境では、システムがデフォルトでテーブルとインデックスの作成を処理しますが、システムがDDLを実行できないようにするDbaSafeオプションがあります。
たとえば、SQLエンジンからMongoDBに1行のコードでデータを移行できるのも楽しいことです。またはzipファイルに。そしてまた戻って。
OK、質問:
根本的な質問は「これは役に立ちますか?」です。時間をかけて本当に磨き、スレッドセーフまたは接続をプールし、より優れたクエリインターフェイスを作成し、どこかにアップロードする価値はありますか?
- すでにこのようなことを行っている別のライブラリ、NAMELYはありますか?複数のデータソース間で機能する単一のインターフェイスを提供します(SQLの種類が異なるだけではありません)。
- それは解決する必要のある問題を解決しているのでしょうか、それとも他の誰かがすでにそれをよりよく解決しているのでしょうか?
- 先に進むと、プロジェクトをどのように表示できるようになりますか?
明らかに、これはORMの代わりにはなりません(ORMと共存でき、従来のSQLサーバーと共存できます)。その主なユースケースは、ORMが過剰な単純な永続化、またはNoSQLタイプのシナリオであり、ドキュメントストアタイプのインターフェイスが望ましい場合だと思います。