在近期的一次演講中,lev gorodinski提出了一種觀點,他認為對於領域驅動設計(ddd)來說,如果使用f#這種函式式程式語言來代替c#這種物件導向程式設計語言進行開發的話,能夠帶來兩個額外的好處,這種方式不僅專注於行為,而且能夠更多地使用宣告方式來表現**。講座中使用的示例用到了包括事件溯源(event sourcing)和命令查詢責任分離(cqrs)方面的技術。
\ lev在過去的一年中在f#上投入了大量的精力,而在近8個月以來則完全專注於f#。在講座中,lev所介紹的示例是基於greg young最早提出cqrs時所編寫的例子,這個修改後的示例展現了f#的實現方式與c#版本的不同,既體現出其優勢也展現出難點所在。而如果轉而使用傳統的物件導向方式實現該示例的話會有一些問題,例如**會顯示非常冗長,並且領域實體會對事件溯源的實現方式產生依賴。
\ 而使用f#的方式,使用更少的**反而能改進實現。去掉了許多樣板**之後,使整個**實現不會顯得那麼冗長,而且能夠更加顯式地處理任務。f#**更能夠體現方法的實質,而且也沒有隱藏的***。對lev來說,使用f#進行ddd開發的方式能夠帶來一些額外的好處,因為他能夠專注於**的行為,而不是將精力耗費在實現所必須的一些基礎結構**上,這同時也意味著拋棄了增刪查改(crud)這種思考方式。f#方式使得**表現得更為宣告式,與其說是編寫**實現方法,不如說是定義了方法的規格,而由f#**實現了這個規格。
\ lev也提到,這些額外的好處本質上是**於ddd的天然優勢,在eric evans和vaughn vernon的兩本關於ddd的書中分別都有列舉。在lev嘗試f#實現的過程中,他所遇到的一大挑戰是對這種新編正規化的應用。在開始階段,他總是忍不住用c#的風格去實現f#**。直到一段時間之後才克服了這種問題,並真正轉換到函式式程式設計的風格。並且f#本身既支援函式式程式設計也支援物件導向程式設計,這使lev有時也難以決斷到底應該使用哪種風格。
\檢視英文原文:ddd and cqrs using the functional language f#
函式式程式語言F
文 高昂 作為微軟支援的第乙個函式式語言,f 在專案中被越來越多的開發者選用,8月的tiobe排行榜,f 挺進前二十。源於微軟研究院的f 語言因其優良的設計和強大的並行程式設計能力,正得到越來越多.net開發者的選用。在8月的tiobe語言流行度排行榜中,f 語言首次進入了前二十位。f 是微軟.ne...
使用函式式語言實踐DDD
長期以來我都在實踐oop,進而通過oop來實現ddd,特別是如何通過物件導向的技巧來建立乙個領域模型。oo的一些特性在建立領域模型時顯得恰如其分,能否掌握oo的技巧,對建立領域模型有著至關重要的作用。這篇文章為大家介紹一種常見的函式式架構,特別是如何通過函式式語言來實現ddd,進而利用函式式組合的特...
F 函式式程式語言 學習過程
首先,我要宣告 為什麼要學習f 我們在物件導向的程式設計過程中看到,物件技術是多麼的優越 接近生活。但是,軟體程式設計,畢竟不是生活 如何能夠最大幅度的提高軟體開發的效率,才是真正我們要考慮的。一 我看中了它的非同步程式設計能力。一切都是函式,變數也是 所以,多執行緒執行下不需要擔心 死鎖和臨界區 ...