原创 分層架構上的探索實踐

簡介 因爲身處在應對ToB需求的SAAS行業,複雜的需求在代碼上造成的混亂始終是我們的一大困擾,所以我們在一些項目中嘗採用整潔架構的分層模式對部分代碼做了一些改善和實踐。 在這篇文章中我來分享一下我在分層架構上的思考,一些實踐方法。 爲什麼

原创 Junit5快速上手指南

Junit5是Junit一個非常大的改進版本,根據Junit5官方文檔上的描述: JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform:提供了在

原创 領域驅動設計下的Package的劃分

DDD爲我們在梳理業務的時候,提供了很多不錯的分析手段,但在代碼組織上,始終都比較模糊,即使是在三層架構中,我們在組織代碼時,也常常會陷入混亂的思緒,這裏我分享一下我對後端Java項目的代碼package分層的認知(這篇文章最後有我所分享的

原创 透過 Cucumber 學習 BDD

在需求的開發過程中,最令人困惑的地方就在於需求模糊。需求是解決業務的問題,那麼驗收的方式應該是由業務方提出,但是往往業務方(可能是產品經理,也可能是直接是客戶)只能給出比較模糊的一個驗收標準,而程序卻是需要非常明確的輸入輸出的條件的。 這中

原创 H2數據庫的使用指南

平時做項目的時候不免要與數據庫打交道,而連接數據庫是一個非常麻煩的操作: 如果是新開的時候,還需要反覆確認數據庫要建立在哪裏。 要確保自己的機器與數據庫服務器之間的網絡可靠性 因爲數據庫可能是共享的,不能因爲自己對結構的調整,就影響了其他

原创 領域驅動設計 - Package的劃分

DDD爲我們在梳理業務的時候,提供了很多不錯的分析手段,但在代碼組織上,始終都比較模糊,即使是在三層架構中,我們在組織代碼時,也常常會陷入混亂的思緒,這裏我分享一下我對後端Java項目的代碼package分層的認知(這篇文章最後有我所分享的

原创 讀書筆記 --《ThinkPad之道》

上週末在一個數碼店裏看到了一本書《ThinkPad之道》,週末看完感覺還挺有意思的。在此之前我對ThinkPad的印象一直是停留在IBM和聯想兩家公司之中,從來沒想過ThinkPad居然是一款日本產品,仔細想想,這款電腦確實是有一種日本人務

原创 Mock or Stubs

晚上團隊對於單元測試編寫發生了不小的爭論,在此之前我對單元測試的幾種模式並不是特別清楚,晚上閱讀了幾篇文章。學習到了一些關於單元測試的概念。 討論的起點源自一位同事分享的這篇大牛Uncle Bob的文章《The Little Mocker》

原创 Kotlin分享小記

經過幾周的Kotlin實踐,我整理出了一些Kotlin的語法和特性在團隊內部來分享,晚上把PPT的內容整理了一下,放到這裏。 我們大家都知道Java在誕生之初,提出了著名的一句話: Write once, run anywhere。 爲

原创 Orika的使用姿勢

在項目中經常會有對象拷貝屬性的需求,類之間屬性的拷貝,看似是一個簡單的操作,其實通常也是工程裏最花費時間的事情,畢竟這個年代不能老是不停地寫setter和getter方法吧。 orika 給自己的定義是 simpler, lighter

原创 應對複雜軟件的思考

由於自己身處SAAS行業,在經歷了幾輪複雜需求的蹂躪之後,我一直試圖尋找一種解法,可以儘量cover住複雜多變的需求。在過去的一年中,通過反覆閱讀和實踐,似乎讓我對此有了一些清晰的思路,所以我想寫一點東西總結一下自己的這一年裏的思考。 在我

原创 基於RabbitMQ的延遲隊列

什麼是延遲隊列 延遲隊列,即消息發送之後,在一段時間之後延遲被消費端消費的消息隊列。比如我們發送一條消息,希望在半個小時之後纔可以被消費端消費到的這種場景中就可以用到延遲隊列了。 利用rabbitmq實現延遲隊列 rabbitmq的3.6.

原创 How tomcat started

作爲我們最常用的Java服務器軟件之一,tomcat已經經過了十多年的迭代,成爲我們服務器上非常重要的一部分。那麼tomcat是如何啓動的呢? 想要了解tomcat是如何啓動,那麼就需要先明白tomcat的設計。 理解tomcat的設計

原创 Explores The Ideas Behind Spring Transaction

根據之前一篇文章的例子,我發現Spring Boot是自動完成事務的配置的,所以週末我特意翻了一段源碼,探究了一把Spring Boot是如何完成這個自動配置的過程的。 首先在Spring Boot的autoconfigure.jar依賴中

原创 面向"軌道"編程

這兩天看了一份關於Monad的PPT,將使用Monad比喻成了面向軌道編程,覺得寫的挺好的,週末特意寫篇文章記錄一下。首先我們看一段代碼,這段代碼模擬了一個處理request的業務邏輯: // 模擬處理業務 fun executeReque