2017年4月11日
这次访谈是与Dmitri Sotnikov关于他在多伦多大学健康网络(UHN)使用Clojure和ClojureScript的讨论。
您使用Clojure和ClojureScript多久了?
我的团队大约六年前开始使用Clojure,我们去年用最新的项目将ClojureScript集成到我们的堆栈中。
使用Clojure或ClojureScript的团队规模有多大?
我们有一个大约30名开发人员的团队,其中一些人使用Clojure,而另一些人使用其他语言,如Java和C#。随着Clojure带来的益处越来越明显,使用Clojure的人数一直在稳步增加。我的直接团队由八名专门使用Clojure的开发人员组成。
您正在构建哪些产品或服务?
多伦多大学健康网络(UHN)的临床医生在一个复杂的医疗环境中运作,患者护理的许多方面必须在多个学科之间协调。我们的团队构建的产品可以帮助临床医生简化工作流程。
例如,在肥胖诊所,肥胖患者需要进行减肥手术评估,我们就遇到了这样的工作流程。让我们看看我们遇到的问题以及如何解决它。
评估由来自五个学科的专业人员进行。评估从护士咨询开始,然后是社会工作者会诊,接着是营养师,然后是心理团队。最后,患者被安排接受外科医师面试。外科医师必须以简化的形式获取其他学科收集的信息。
评估必须按特定顺序完成,每次评估都依赖于先前评估的结果。
任务的复杂性还体现在,所有评估都使用一组公共数据。每个学科都需要查看数据的子集,并且在引用数据元素时使用不同的术语。
当数据片段被修改时,它可能会触发数据模型的更新,包括那些不在用户正在操作的视图中的更新。由于多个用户可能同时操作评估的不同部分,我们必须格外小心以确保应用程序内的數據完整性。
该项目旨在为用户提供一种新的工作流程,这意味着我们随着用户反馈的不断收到而不断调整需求。
项目团队选择使用敏捷开发方法,以提高灵活性。工作流程被分解为每个学科的模块。我们会在完成每个模块后部署它,并将用户反馈集成到系统设计中,以便在开发更多模块时进行调整。
团队创建了一个Clojure DSL,用于编写应用程序的屏幕和业务逻辑。这些定义存储在数据库中,并用于在运行时生成视图。
这种模型使我们能够修改评估的任何方面,而无需重新部署应用程序的客户端或服务器部分。
为什么使用Clojure或ClojureScript对您的业务有价值?
Clojure使我们能够交付一款创新的产品,为用户提供最佳工作流程。我们的应用程序最终获得了2016年ITAC Ingenious奖。
通过使用该应用程序,诊所将患者的等待时间从128天大幅缩短至63天。同时,临床医生使用的口述时间减少了80%,迄今为止总计节省了240,000美元。
使用Clojure和ClojureScript的哪些方面给您带来了最大的价值?
我们非常喜欢使用JVM,并希望继续在我们的项目中利用这个平台。但是,我们也认识到需要一种语言来促进快速开发和原型设计,同时允许我们构建健壮且可维护的应用程序。
我们之前使用Java项目的经验表明,它不适合这些要求。同时,Clojure脱颖而出,成为多种原因下强劲的技术选择。
该语言使我们能够在项目中无缝使用现有的Java库和工具。这使得我们可以从我们的遗留堆栈平滑过渡到基于Clojure的现代堆栈。
Clojure允许我们以交互式方式开发系统,并快速响应项目不断变化的需求。团队能够快速构建原型解决方案,而不会牺牲代码质量。该语言的动态特性使得开发过程比我们使用Java时更经济、更快。
REPL驱动的开发使我们能够以交互式方式探索问题空间,并通过实验找到最佳解决方案。我们发现,REPL工作流程比单元测试具有更好的反馈循环。
基于Clojure的解决方案的代码量是我们之前用Java构建的类似规模的项目的一小部分。不仅如此,Clojure还使将代码意图与实现细节分离变得更加容易。将正在执行的操作与执行方式分离的能力,使代码更易于维护。
Clojure专注于不变性,促进了应用程序各部分之间的自然解耦。在没有共享全局状态的情况下,可以独立地处理应用程序的各个部分。生成的代码需要更少的测试,因为函数是纯函数,不依赖于整个应用程序状态。
由于Clojure是一种小巧且专注的语言,因此很容易培训新开发人员用它提高生产力。我们的合作伙伴CyLogix能够在短时间内培训他们的承包商使用Clojure。
宏使我们能够创建领域特定的抽象。这使我们能够使用该领域的语义来表达领域特定的逻辑。
最后,Clojure证明是一个稳定可靠的平台。我们能够在整个开发周期中将项目升级到语言的新版本,而无需任何更改。
您的技术栈是什么?
我们使用Luminus堆栈作为我们项目的基准。我想专门提及一些库,例如
如果您想分享您的Clojure故事,请填写此表格.