我认为这个问题没有唯一的正确答案...但是我想建议你考虑以下内容...你决定采用关系数据库(我认为这完全没问题!)...所以有人可能会说...首先,你的问题与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 模板来设置 postgres 项目。这个设置包括 hugsql(拥抱 SQL 的 Clojure 库)。然后你可以进行你的 DDL/模式操作,你的 postgres 查询,存储过程等等。这一切都完全独立于任何应用编程语言。你只需使用你的 postgres 工具和知识。多么伟大啊!另外,比如说我想从 clojure 切换到 java / node 什么的,我的整个数据库/持久层东西几乎可以保持不变,因为使用 hugsql 你实际上只是在做 SQL。再加上非常少的元配置信息,你会在注释里写这些信息,通过这些注释,你可以得到使用查询的 clojure 函数,你可以以 map 的形式向这些预处理语句传递参数,并得到一个记录的 map 输出,或 n 个记录的 map 序列,没有记录时返回 nil。我想是这样的。
进行转换等操作时,你就有所有的基本但强大的 clojure 函数,使得处理 map 和 seqs 变得轻而易举。还有一个小小的类型转换问题,当你从 postgres 转到 java,从 java 到 js 时,但如果你使用 luminus,你会得到那些现成的辅助工具。比如在我的 flashcard 应用中,有很多时间戳(...你何时答对卡片的答案,何时留下评论等等)而日期类型总是很难处理(java.sql, java.util, joda 等)。但在做这个应用时,我根本不需要担心这些问题。luminus 会为你处理这些。另外,你可以用到优秀的 clojure.java-time(https://github.com/dm3/clojure.java-time / https://github.com/andrewmcveigh/cljs-time)。你可以编写与时间相关的代码,它对中间件和前端都适用(...仅有一些小的例外)。(...luminus 也提供了所需要的 transit-adapter?不知道它实际上是否叫这个名字...)的邮件也!
无论如何,我选择了基于 KISS 原则的战略,对此我非常满意。随便你怎么想,:-)