2

私は現在、asp.net MVC 2 アプリケーションのアイデアのために Db4o をテストしていますが、続行する最善の方法についてよくわからないことがいくつかあります。

アプリケーションでエンティティを参照するために Id ではなく推測可能なルートを使用したいのですが、更新シナリオには何らかの Id が必要だと思います。

たとえば、私は欲しい

/country/1 の代わりに /country/usa

ただし、キー名を変更したい場合があります(おそらく国ではなく他のエンティティで)ので、フィールドを更新する前にオブジェクトを取得するための参照として使用する ID が必要だと考えています。他のコメントから、UUID を使用するには少し時間がかかるようで、問題を明確に分離するためにとにかく自分の ID を使用することを好むようです。

KandaAlpha プロジェクトの両方を見て、私はデザインのいくつかの側面にあまり熱心ではなく、[domainsignature] や EntityWithTypedId、IEntityDuplicateChecker、IHasAssignedId、BaseObject、および IValidatable などを使用する S#arp アーキテクチャのラインに沿ったものを好みます。それらのエンティティは、挿入/更新動作を制御します。これは、よりクリーンで拡張性が高く、検証をカバーし、コアおよびベース リポジトリ クラス内にうまくカプセル化されています。

では、S#arp アーキテクチャを Db4o に移植することは理にかなっているでしょうか。

また、Db4o でインデックス (上記のユニークなものを含む) を管理するためのベスト プラクティスはありますか? たとえば、モデル メタデータ ベースで、ブートストラップで DI を使用してロードする必要がありますか、それとも Automapper.CreateMap のようにロードする必要がありますか?

私が知っているその少しとりとめのない質問ですが、考え、アイデア、または提案された読み物は大歓迎です。

ありがとうマック

4

1 に答える 1

5

この質問にはさまざまな側面が含まれています。はじめましょう。

通常、db4o はobject-identityを使用してさまざまなオブジェクトを区別します。したがって、通常は ID を使用しません。ただし、Web アプリケーションでは、リクエスト間のオブジェクト ID が失われるため、ID を使用する方法はありません。

そのために、db4o の内部オブジェクト ID を使用できます。ただし、データベースを最適化すると、この ID が変更される場合があります。リンクなどを有効にするために永続的なIDが必要だと思います。したがって、これらのIDはオプションではありません。Guid またはdb4o-UUIDを ID として使用できます。ただ、どちらもかなり長いです。

最善の解決策は、オブジェクトの ID を表すフィールドを追加することだと思います。次に、そのフィールドにインデックスを付けて、おそらく一意の制約を追加します。これにより、さまざまな種類の ID を使用することもできます。たとえば、これにより「/country/usa」が有効になります。これは、ISO コードを ID として使用するためです。単純な数値の自動 ID の場合は、巧妙な id-generator を使用できます。

あなたが言及した2つのフレームワーク(KandaAlpha、S#arp)を知りません。物事はまだ理にかなっているように聞こえます。特定の動作を追加するインターフェイスまたは属性を実装します。たとえば、どのフィールドがオブジェクトの ID であるかをシステムに伝える属性です。この属性は、このフィールドがインデックス化されていること、システムがクエリの方法を知っていることなどを保証します。

私のアプリケーションでは、索引付けされたものは属性を介して追加されます。使用できる db4o-IndexedAttribute があります。または、独自のものを追加することもできます。一般に、明示的に構成するか、メタデータで同じことを行うかの両方の方法で問題ないと思います。

于 2010-03-30T12:27:41.677 に答える