我一直在學習clojure幾個星期,最近我開始閱讀一些開源代碼:clojure和clojurescript編譯器以及一些類似om,boot,figwheel等庫。clojure的長文件有什麼用?
我注意到一些Clojure的文件是很長的,他們中的一些千餘LOC。鑑於clojure的代碼非常簡潔而低級,該代碼意味着比其他語言中的文件大得多的代碼。
從OO背景的,你通常有每個文件一類和你儘量保持你的類短(SRP)我發現有點怪異。
我知道clojure代碼主要由純函數組成,它們比一些需要保持當前狀態的可變類更容易推理,我發現我可以閱讀和理解大多數一次一個的功能。但大多數功能設計得非常好,以至於它們不依賴於彼此:儘管您可以使用(filter odd?)
,但這並不意味着filter
和odd?
是相關的。但對於「每一天」的代碼(LOB應用程序,網絡應用程序等)來說,很難保持這些函數的自包含性(至少這是我的OO編程經驗)。
我也看到的,他們在同一個文件中聲明的所有組件clojurescript應用程序(OM,試劑等)的一些演示。我不知道這是因爲它只是一個演示,在實際生活中的應用,你就會有一個product.clj
和category.clj
或者這只是Clojure的方式:讓每個命名空間/模塊/界上下文一個文件。
我想,如果我打開一個文件夾,我看到product.clj
,category.clj
,order.clj
,等我可以一目瞭然什麼是關於該文件夾,不僅僅是有components.clj
或core.clj
更好的想法。
所以,我的問題是:
- 它是常見的「天天向上」的Clojure代碼有這些非常長的文件嗎?還是僅僅因爲我正在閱讀庫代碼,而「普通」代碼更「模塊化」,我的意思是:更多的文件和更少的長度。
- 這樣長的文件是否會讓人難以一目瞭然地理解應用程序的用途?像我上面的產品/分類/訂單示例,或者一些clojuresque屬性,這不是問題。
- 如果長文件是「Clojure的方式」,你如何處理衝突,重構,規劃在一個團隊......如果每個人都在接觸相同的文件?