我认为这个问题没有唯一的正确答案....但是我想建议您考虑以下内容....您决定使用关系型数据库(我认为这完全没问题!)....所以有人可能会说....首先,您的问题与ER建模等有关,而不是真正关于Clojure....:-)....
...我的意思是什么?...嗯...您已经提到了ORM...当您使用Java时,关系世界和面向对象世界之间的“阻抗/范式不匹配”,很多时候会导致大量杂乱/头痛等问题....等等。
好吧...但是(我认为)您将付出巨大的代价,即使用ORM...例如,如果您不小心处理,hibernate等等可能会提出最疯狂的事情/查询...例如,当天真地获取某种树结构时,生成的SQL可能非常愚蠢...显然,hibernate非常强大....您可以集成非常复杂的缓存等等....然而,要做好hibernate并不容易/直截了当......我认为
所以...即使在进行Java开发时,我也建议首先考虑使用Spring JDBC数据访问...因为...正如我说的那样,JPA确实增加了一些复杂性....(..所以问问自己你是否真的需要JPA...
...不管怎样...我想说的是这样的....关系型数据库很棒...SQL很棒...PostgreSQL也很棒!!!...许多程序语言的问题就在于与关系型技术交互时往往非常痛苦...因此,您开始构建各种工具,如ORM等,以使您的生活更易于忍受....( ...因此我们在谈论的是一种治疗方法,而不是一种治疗方法....)
...现在我想论证的是,在Clojure中,整个不匹配问题要小得多,因为Clojure不是围绕 Person 等类构建的,而是您有一些强大的集合,您就绪了 :-)....
...让我们更具体一些....我已经使用Clojure(script)构建了这个闪速卡SAP....
...现在...有很多我不太高兴的事情.....例如,我真的很想从bootstrap切换到bulma等等......这是我第一次做的一个非平凡大小的Clojure项目....显然,我犯了很多错误....我会尽快尝试重构/改进事情....然而,主要观点是我最不担心的是PostgreSQL/关系型数据库部分....
....我使用了luminus模板来设置PostgreSQL项目...该设置包括hugsql(拥抱SQL的Clojure库)....然后您可以进行DDL/模式操作...您的PostgreSQL查询....存储过程等等....以一种完全独立于任何应用程序编程语言的方式....只需使用您的PostgreSQL工具/知识....这有多么棒!.....另外,比如说我想从Clojure切换到Java/Node等等....那么我的整个数据库/持久层东西可以基本上保持不变....因为使用hugsql您实际上只是在做SQL....以及非常少的元配置内容,您将其放入注释中......从这些注释中,您将获得可以在Clojure中使用的函数来运行查询.....您可以将参数以map的形式传递给那些预处理语句....并得到您预期的输出,为一个记录或一系列的记录(map序列)或没有记录时为nil....我认为
在对数据进行转换等操作时,您具有所有那些基本但功能强大的Clojure函数,使得对map和seq的处理变得轻松简单。此外,在从PostgreSQL到Java,从Java到JS进行类型转换时,总会遇到一些小麻烦,但如果使用Luminus,您将直接获得那些帮助工具。例如,在我的闪卡应用中,我有很多时间戳(例如,您是什么时候回答卡片的正确答案的,您何时留下评论等),而日期类型一直很棘手(比如java.sql,java.util,joda等),但在开发这个应用时,我根本不必担心这些。Luminus会在幕后为您完成所有这些。此外,你还能够使用出色的clj(script)时间库(https://github.com/dm3/clojure.java-time / https://github.com/andrewmcveigh/cljs-time),编写与时间相关的代码,它不仅可以在中间件上运行,还可以在前端运行(...但有少数例外)。(...Luminus还提供了所需的transit-adapter?(不确定其是否确实如此)...工具也很棒!)
...无论如何,我采用了简约至上原则的策略,并且我对它非常满意。你对此有什么看法都可以。(:-)