ドメイン オブジェクトを操作する独自のバイオインフォマティクス ソフトウェアに取り組んでいるため、API を拡張して、外部の関係者が内部 DB に格納されたデータにアクセス (CRUD) できるようにする必要があります。
データはタイプ (分子、オリゴ、酵素など) ごとにグループ化され、それぞれの中にネスト可能なサブセット (分子::タンパク質、分子::dna など) が存在する可能性があります。
各データ型には異なる属性があるため、フォーマットされたクエリ文字列 (広く使用されているentrezフォーマットに似ています) を使用して検索条件を指定しています。コードの例は次のようになります。
IMoleculePersistenceService svc = PersistenceFactory::GetMoleculeService();
// IMoleculePersistenceService::search( <search-string>, <subset> );
IMolecule[] searchResult = svc.search( "Foo[Name] OR 128[Length]", "molecule::protein" );
私の質問は:
ユーザーが生物学関連の階層を理解するための対応するドメインの知識を持っていると仮定します。検索機能が、formatted-string の代わりに object を受け入れるようにしたほうがよいでしょうか?prototype
IMoleculePersistenceService svc = PersistenceFactory::GetMoleculeService();
IMoleculeTemplate searchPrototype = svc.GetSearchPrototype();
searchPrototype.SetName( "Foo" );
searchPrototype.SetLength( 128 );
IMolecule[] searchResult = svc.search( searchPrototype, "molecule::protein" );
IMolecule[] searchResult2 = svc.search( svc.GetSearchPrototype( <parameters> ), "molecule::protein" );
長所:
-視覚化/理解が容易 - (フォーマットされた)文字列に自動的にシリアル化できる
場合、クエリ文字列と互換性があります。短所:
-条件の組み合わせが固定されているため (AND、OR のいずれか)、柔軟性がありません。prototype