有一个含有基因表的数据库。这些基因需要根据客户的需要进行注释。因此,如果一个基因符合条件x,那么添加一个新的列y和值z到该基因。每个癌症都是不同的,所以我们为每个客户端提供了一个模板配置文件,他们可以在其中插入查询并将其提供给我们的应用程序。
问题是:
1)这些查询变得如此复杂,以至于它们现在成了自己的语言,只有开发人员才有信心与临床医生进行一些来回的更改。因此,提供客户端可以编辑的配置文件的全部好处现在似乎已经失去了。
2)由于查询过于复杂,代码和配置的区别变得模糊。例如,我们使用pandas.query(),但是很快我们发现它并不能处理我们所有的用例,我们现在开始修补客户机插入的查询,然后动态地用一些内联代码来代替它。
我想,从现在开始,情况只会变得更糟,我想知道还有什么其他的解决办法。
发布于 2019-05-13 12:56:18
作为开发人员,我们通常倾向于非常类似于代码的界面,但这并不是一个典型用户所认为的直觉。请更多地考虑引导用户创建正确配置的GUI。是的,这类GUI通常是最难创建的,但这正是我们要做的。我们希望将困难从用户转移到开发者身上。您仍然可以将GUI输出配置文件作为存储配置的一种方式,但这不应该是创建像您描述的那样复杂的东西的主要方法。
发布于 2019-05-15 05:59:34
复杂性可分为两类:本质与偶然。本质的复杂性是领域的属性,偶然的复杂性是开发人员创建并可以修复的东西。
处理配置中日益增长的基本复杂性的一种方法是开发一个领域专用语言来描述配置,就像另一个答案所建议的那样。
对于非技术用户来说,提供良好的工具支持是很重要的,在这种情况下,语言工作台帮助构建一个功能齐全的IDE,包括语法突出显示、代码完成、重构、类型检查、值跟踪/调试等。
下面是一个YouTube视频,介绍使用JetBrains MPS语言工作台为生物域开发的DSL:https://www.youtube.com/watch?v=207HPy7BHeM
生物实验室樟树实验室在其项目中使用JetBrains MPS (虽然显然不是核心领域)。
发布于 2019-05-13 12:40:17
计算机科学的一个一般原理是,你可以增加一个间接层,使事情变得更简单。也许您可以在当前配置语言的基础上添加另一个DSL,以简化客户端。在这种情况下,您必须在使用中找到模式,并以类似的方式处理它们。
https://softwareengineering.stackexchange.com/questions/391827
复制相似问题