2018 年 4 月 27 日
您正在使用 Clojure 或 ClojureScript 构建什么产品或服务?
CloudRepo 是一款完全托管的云存储库管理器。我们为使用 Leiningen、Boot 和 Maven 等工具进行依赖项管理的软件开发团队存储软件工件。
您最喜欢使用哪个 Clojure 库?
有很多库非常稳定,帮助我们改善了开发流程。我们使用 Faraday 来访问 AWS Dynamo DB,使用 clj-http 来满足所有 HTTP 客户端需求(测试等),Cheshire 则用于 JSON 解析,效果非常好。
不过,我们使用过的最具启发性和教育意义的库是 Ring。它让我们看到了如何将 HTTP 请求建模为简单的数据,并将其传递到系统中。一旦我们意识到请求可以建模为数据,我们就可以让请求在系统中流动,并在需要时进行转换。这对我们来说是一个重要的学习,帮助我们更多地了解基于数据流设计系统,我在 这篇文章 中对这个问题进行了详细的解释。
最近,使用 spec 非常棒。世代测试的想法彻底改变了我们。它还为我们提供了一种比静态类型系统更好的方法来定义函数契约和验证程序。现在,我们可以根据数据的“形状”甚至特定值来验证,这远远超出了传统类型系统的限制。
您最喜欢 Clojure 的哪个功能?
我们非常喜欢将地图传递到系统中并让它们在系统中流动的强大功能。当我们能够通过简单的 -> 函数和函数链来实现端点时,我们总是对 Clojure 如何使编程变得优雅感到惊喜。
将系统状态建模为地图也使我们受益匪浅。它让我们能够通过查看数据地图而不是大型对象层次结构来更好地理解系统。结合不变性,这使得 Clojure 使用起来非常愉快。
您的技术栈是什么?
我们完全基于 AWS 构建。我们利用 Amazon S3 来存储工件,利用 DynamoDB 来存储元数据。
为了为客户提供高可用性,我们在 Amazon Elastic Container Services 中运行的多个主机上分发了 Docker 容器,并在其中运行 CloudRepo。我们的后端服务完全使用 Clojure 编写。我们可以利用 JVM 的可靠性和 Clojure 等语言的功能,这太棒了。
Clojure 对您的业务有什么价值?
Clojure 对我们业务的价值在于,我们可以用更少的资源做更多的事情。我们团队非常小,通常能够在几个小时内添加新功能。我们能够做到这一点,是因为我们通过系统传递数据,添加新功能通常就是确定将新功能插入数据流的最佳位置。一旦确定了位置,我们就可以连接它,而不用担心由于不变性而影响代码其他区域的状态。
如果您想分享您的 Clojure 故事,请 填写此表格.