原创 ASP.NET Core 1.0中的管道-中間件模式

ASP.NET Core 1.0借鑑了Katana項目的管道設計(Pipeline)。日誌記錄、用戶認證、MVC等模塊都以中間件(Middleware)的方式註冊在管道中。顯而易見這樣的設計非常松耦合並且非常靈活,你可以自己定義任意功能的M

原创 DRY(Don't Repeat Yourself )原則

凡是寫過一些代碼的程序猿都能夠意識到應該避免重複的代碼和邏輯。我們通過提取方法,提取抽象類等等措施來達到這一目的。我們總能時不時的聽到類似這樣的話:”把這些公用的類放到shared項目去,別的項目還要使用。。。“,什麼算是公用(重複)的代碼

原创 理解函數式編程中的函數組合--Monoids(二)

使用函數式語言來建立領域模型--類型組合 理解函數式編程語言中的組合--前言(一) 理解函數式編程中的函數組合--Monoids(二) 繼上篇文章引出《範疇論》之後,我準備通過幾篇文章,來介紹函數式編程語言中的若干"行話",例如Functo

原创 使用函數式語言實踐DDD

長期以來我都在實踐OOP,進而通過OOP來實現DDD,特別是如何通過面向對象的技巧來建立一個領域模型。OO的一些特性在建立領域模型時顯得恰如其分,能否掌握OO的技巧,對創建領域模型有着至關重要的作用。 這篇文章爲大家介紹一種常見的函數式架構

原创 理解函數式編程語言中的組合--前言(一)

理解函數式編程語言中的組合--前言(一) 函數式編程思想可以用一句話總結,即:可組合的類型+可組合的函數,我在《使用函數式語言做領域建模》一文描述瞭如何使用可組合的類型進行領域建模。這篇文章就是用來說明後半部分,即--理解可組合的函數。我假

原创 使用函數式語言來建立領域模型

使用函數式語言來建立領域模型 領域模型=代碼=文檔 如果說敏捷軟件開發主張面對面溝通,通過快速迭代的手段,讓有價值的軟件儘早面向市場,從而適應快速變化的需求。 那麼DDD則爲敏捷開發過程中的溝通形式作出了進一步的補充,DDD讓領域模型和代

原创 DIP原則、IoC以及DI

一、DIP原則 高層模塊不應該依賴於底層模塊,二者都應該依賴於抽象。 抽象不應該依賴於細節,細節應該依賴於抽象。 該原則理解起來稍微有點抽象,我們可以將該原則通俗的理解爲:"依賴於抽象”。 該規則告訴我們,程序中所有的依賴關係都應該

原创 編寫讓別人能夠讀懂的代碼

隨着軟件行業的不斷髮展,歷史遺留的程序越來越多,代碼的維護成本越來越大,甚至大於開發成本。而新功能的開發又常常依賴於舊代碼,閱讀舊代碼所花費的時間幾乎要大於寫新功能的時間。 我前幾天看了一本書,書中有這麼一句話: “複雜的代碼往往都是新手所

原创 基於消息傳遞的軟件架構模型演變

一個優秀的架構師總是能對各種解決方案的優點和對應成本之間取得良好的平衡,而這種能力背後是架構師豐富的經驗和廣闊的知識體系。基於消息的軟件建構模型則是架構師必備的知識點,本文將詳細描述該模型的演變過程。 還記得第一次跟師傅打交道,他問我“Hi

原创 寫給.NET開發者的數據庫Migration方案

微軟給我們提供了一種非常好用的數據庫遷移方案,但是我發現周圍的同學用的並不多,所以我還是想把這個方案整理一下。.NET選手看過來,特別是還在通過手工執行腳本來遷移數據庫的同學們,當然你也可以選擇EF的Migration方案和FluentMi

原创 如何優雅的使用RabbitMQ

RabbitMQ無疑是目前最流行的消息隊列之一,對各種語言環境的支持也很豐富,作爲一個.NET developer有必要學習和了解這一工具。消息隊列的使用場景大概有3種: 1、系統集成,分佈式系統的設計。各種子系統通過消息來對接,這種解決方

原创 愛上PowerShell

Shell帶來的好處是毋庸置疑的,當然也需要大量的時間去練習。PowerShell作爲後起之秀,同時試圖打造一款更加人性化,更加易用的Shell。隨着PowerShell開源跨平臺的戰略以及在Windows下的的崛起,PowerShell有

原创 使用Masstransit開發基於消息傳遞的分佈式應用

Masstransit作爲.Net平臺下的一款優秀的開源產品卻沒有得到應有的關注,這段時間有機會閱讀了Masstransit的源碼,我覺得我有必要普及一下這個框架的使用。 值得一提的是Masstransit的源碼寫的非常優秀,值得每個想提高

原创 Unit Of Work的設計

在DDD開發過程中,一個良好的Uow設計必不可少,我心目中的Uow設計應該具備以下幾點: 1、有着良好的抽象,有着恰如其分的命名; 2、能夠應付不同的組件,比如你的系統中可能會存在EfUnitOfWork、RedisUnitOfWork;

原创 領域驅動設計之單元測試最佳實踐(二)

領域驅動設計之單元測試最佳實踐(一)   介紹完了DDD案例,我們終於可以進入主題了,本方案的測試代碼基於Xunit編寫,斷言組件採用了FluentAssertions,類似的組件還有Shouldly。另外本案例使用了Code Contra