0

いいタイトルが思いつきませんでした。

データベースに特別な種類のデータ(質問には関係ありませんが、化学構造です)を保存および検索するためのライブラリ/ツールキットを作成しています。検索機能は、化合物が 1 つ以上の化学物質で構成される化合物のリストを返します。

そのツールキットを使用する開発者は、それを使用して、化合物を保存する複数のアプリケーションを作成できます。アイデアは、すべてのアプリケーションに対して 1 つのストアのみが存在する必要があるということです。例として、各コンテナに化合物が含まれる在庫システムを作成したとします。彼はまた、生物学的検査結果を保管するためのアプリケーションも作成します。これで、Compound を含む 2 つのクラス (Container、BiologicalTestResult) ができましたが、API には認識されません。私が欲しいのは、化合物を保存するときに、API がそれが発生するアプリケーションを保存できるようにすることです。そのため、アプリケーション A で検索すると、実際にアプリケーション A にある化合物のみが返されます。

また、API を検索するときは、そのアプリケーションに固有のデータでフィルタリングできる必要があります。testResult = "Failed" または、remainingAmount > 100。

それを達成するための良い方法は何ですか?最も簡単な解決策は、文字列連結によって SQL ステートメントを作成することだと思います (関連する欠点があります)。これにより、ツールキットが属するアプリケーションを保存する必要がなくなります。例:

search(String searchTerm, String selectFields, String joinTable, Filter filter);

ここで、「selectFields」は「joinTable」から返されるフィールド、「joinTable」は複合テーブルへの外部キーを含むアプリケーション テーブル、filter は「where 句」を含むカスタム クラスです。たとえば、フィールド名を条件にマッピングします。 (>,<, like, = ...) と値。

これは合理的ですか?より良いアイデア?

4

1 に答える 1

0

答えは、適切なドメインモデルを用意することです。そうすれば、QueryDSLを使用できます。

于 2013-03-14T16:32:19.177 に答える