Architecture 像鲍勃叔叔那样的Clojure建筑

Architecture 像鲍勃叔叔那样的Clojure建筑,architecture,clojure,Architecture,Clojure,我正试图实现Clojure架构,就像Bob叔叔在那里做的那样,就像他在第07集《架构、用例和高级设计》中用干净的代码描述的那样 一个核心圈子里的任何人都不可能知道这个圈子里的任何东西 外圈 我想用所有的商业规则和测试来编写应用程序的核心代码。该核心必须定义对数据库中“对象”的操作,如用户、支付、广告等。但如何实现这一点必须在更高的应用程序级别上进行 所以问题是:你能给我举一个在github上的好的架构应用程序的例子吗,比如在带圆圈的图像上?我正在学习Clojure,我想看看它在技术上是如何实

我正试图实现Clojure架构,就像Bob叔叔在那里做的那样,就像他在第07集《架构、用例和高级设计》中用干净的代码描述的那样

一个核心圈子里的任何人都不可能知道这个圈子里的任何东西 外圈

我想用所有的商业规则和测试来编写应用程序的核心代码。该核心必须定义对数据库中“对象”的操作,如用户、支付、广告等。但如何实现这一点必须在更高的应用程序级别上进行

所以问题是:你能给我举一个在github上的好的架构应用程序的例子吗,比如在带圆圈的图像上?我正在学习Clojure,我想看看它在技术上是如何实现的。我试图自己做,但结果不好。简单的代码示例将对我帮助很大我想知道如何在Clojure中一步一步地像在图像上一样创建层。


我将很高兴获得有关如何在Clojure中以高质量实现这一点的任何信息。可以是代码、视频或文章。可以是免费的,也可以购买。

Bob叔叔的干净体系结构的关键元素是依赖倒置。Clojure有多种实现方法:使用高阶函数和协议可能是最相关的两种方法(无耻的插件)。例如,您可以为您的数据定义一个持久性协议,它完全不知道具体的实现:

 (defprotocol MyDataDao
    (load-data [])
    (save-data []))
然后,您可以实现上述协议,该协议可以使用数据库或普通文件系统(注意:
reify
的使用只是一个选项):

与手工制作的
make mydata db dao
不同,您可能想看看Stuart Sierra的优秀设计

但是,您还需要实现不同的圆:这基本上是一个使用名称空间并确保将协议定义放入正确的内部圆/层,并将实现放入正确的外部层的问题

假设您的网关代码通常位于名称空间
app.gateway.*
。然后协议
MydataDao
可能会在名称空间
app.gateway.dao
中结束。不过,实现将属于一个不同的外部循环。假设您的所有db代码都在名称空间
app.db.*
,那么您可以将
make mydata db dao
放入
app.db.dao


不幸的是,我不知道Clojure中有哪一个现有的代码库能够彻底实现这一点。实际上,我很想看到一个用任何语言实现的真实例子,并更多地了解使用它的好处、缺点或困难。

Bob叔叔的干净体系结构的关键元素是依赖倒置。Clojure有多种实现方法:使用高阶函数和协议可能是最相关的两种(无耻的插件:)。但是,您还需要实现不同的圆:这基本上是一个使用名称空间并确保将协议定义放入正确的内部圆/层,并将实现放入正确的外部层的问题。谢谢。这篇文章正是关于我试图解决的问题,而这家伙离我还有几步之遥:)@schaueho你的评论和链接到这篇精心制作的、有价值的文章的链接比一般的答案要多,你可以把它转换成一个答案。我想卡布拉可能会接受it@JamesSharp:谢谢你的鼓励性评论,我就这么做了。
 (defn make-mydata-db-dao []
    [... db-setup-code ... ]
    (reify MyDataDao
         (load-data []
            [... data-query-code ...])
         (save-data []
            [... data-save-code ...])))