次の機能を備えた「エンティティ マネージャ」を探しています (一覧を参照)。
非常に多くのソフトウェア プロジェクトがあり、それらの核心は巧妙なエンティティ管理に関する UI とビジネス ルールであることは奇妙に思えますが、「標準」である単一のエンティティ管理システムを見たことがありません。
ああ、いくつか見たことがありますが、以下の機能のリストに近いものはありません. 最も顕著なのは、カスケードと検証がコアから欠落していることが多く、水平方向のスケーリングとキャッシュの無効化は通常「学生への演習」として残され、グラフの性質は通常、親/子、または運が良ければ DAG に制限されます。 (有向アシルグラフ)。
私が見逃している賢いものはありますか?それとも、他のみんなと同じように、このことを自分で書く運命にあるのでしょうか (そして、時間の制約のために、おそらく最適とは言えません)?
少なくとも私の感覚では、実際にうまく機能させるためにエンティティ管理の「コア」に組み込む必要がある機能のリストを次に示します。
- グラフベース: リレーションは第 1 レベルの市民であり、2 つのノード (ラベル付きグラフ) 間の複数のリレーションは、スパニング ツリーとクロージャを計算できます。
- DB バウンド - というか、メモリ バウンドではありません。キャッシュをメモリに保持できますが、100m のエンティティと関係を簡単に格納できる必要があります。
- 水平スケーリング - 複数のアプリ サーバーから DB にアクセスする方法、ロック (楽観的または悲観的) を使用する方法、および別のアプリ サーバーからの更新でキャッシュを無効にする方法を認識していることを意味します。
- メモリまたは DB でトランザクションを収集することにより、トランザクション作業をサポートします。
- 単一のトランザクションの範囲内で、プラグ可能なビジネス ルール カスケードをサポートします (たとえば、A が変更された場合、B も変更する必要があります)。
- プラグ可能な検証をサポートします (たとえば、B が存在する場合、A を削除することはできません)。
- プラグ可能な認証をサポートします (たとえば、ユーザー U1 は A を変更できません / ユーザー U1 は A を変更できません。これは、B が変更され [カスケード] され、ユーザー U1 は B を変更できないためです)。
- 変更イベントの発行/変更ログの維持 (たとえば、変更後にワークフローを開始できるようにするため)。
- メタデータが存在する場合、コードではなく「データ」によって構成可能である必要があります。
- ダウンタイムなしのアップグレード (「クラウド対応」ですよね?)
- ピュアジャバ。