0

ドメイン オブジェクトを操作する独自のバイオインフォマティクス ソフトウェアに取り組んでいるため、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

4

1 に答える 1

0

サービスは「プロトタイプ」のみを受け入れる必要があります。文字列のプロトタイプへの解析はそれ自体の機能であり、サービスに直接属していません。プロトタイプベースのものを宣伝するために、たとえば、最初にHowToで例を示し、後で解析機能について説明します。

C#ランドには、IQueryableインターフェイスがあります。この質問への回答をご覧ください。プロトタイプはsに非常によく似ていますExpressionが、これは目前のニーズには一般的すぎる可能性があります。

また、配列を返すことは、実装を配列の使用に修正するため、最良のオプションではない場合があります。ここでもC#にありますが、結果の配列を生成/返す機能を提供し、内部の変更と最適化を可能にするIEnumerable単純なクラスが必要です。SearchResult

于 2012-06-20T04:48:39.823 に答える