上操纵域对象专有的生物信息学软件的工作,我必须加强API,使外部各方可以访问存储在内部DB(CRUD)数据。建议数据库查询API
的数据由类型(如分子,寡核苷酸和酶)分组并在每个中,可以有子集(分子::蛋白质,分子:: 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");
优点:
-easier可视化/明白
兼容与查询字符串如果prototype
可以自动序列化为(格式化)的字符串。
缺点:
- 由于标准组合是固定的(AND,OR),所以不灵活。