在处理域对象的专有生物信息学软件上工作时,我必须增强 API,以便外部各方可以访问存储在内部数据库中的 (CRUD) 数据。
数据按类型(例如分子、寡核苷酸和酶)分组,在每个数据中,可以有可嵌套的子集(分子::蛋白质、分子::dna 等)。
由于每种数据类型都有不同的属性,我们使用格式化的查询字符串(类似于广泛使用的entrez格式)来指定搜索条件。代码示例如下:
IMoleculePersistenceService svc = PersistenceFactory::GetMoleculeService();
// IMoleculePersistenceService::search( <search-string>, <subset> );
IMolecule[] searchResult = svc.search( "Foo[Name] OR 128[Length]", "molecule::protein" );
我的问题是:
假设用户具有相应的领域知识来理解生物学相关的层次结构。让搜索函数接受对象而不是格式化字符串会更好吗?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