先說說這個框架的誕生由來不吧。
DDD,本人和這個開發思想淵源審慎。大約在三年之前,接觸過一本書叫作《企業應用架構模式》。書中提到了領域驅動設計,可是,並未系統的講解這個設計是什麼樣的,而是介紹了,把業務領域這一層獨立出來是多麼重要。而值得慶幸的是,在我接下來不久的一家公司,我就有機會把個人這些思想應用進去。可是,說實話,如今回想起來,當時的層次是在是過低了。並且,因爲並未系統的學習過這種思想,因此,設計基本都是我本身想出來的,遵循了一些我認定的原則。最後,在我工做了一年後,發現,埋下了不小的坑。而也是在那段歲月裏,第一次嘗試搭建框架,嘗試使用各類內容對其作支持。當時以爲頗有成就感。不過,這件事,截止到了我從那裏離職後,展轉去到了另一家公司。遇到了我如今的團隊老大。
因爲面試的時候被問到了領域驅動設計,我感到很好奇,由於歷來沒有公司問過我,甚至沒有同事跟我提過這件事。因此,我來到了這家公司。而進公司沒幾天,老大就跟我講了領域驅動設計的相關內容,因爲只是簡單的講解,我沒法融會貫通,因此,本身買了本二手的《領域驅動設計》就這麼啃起來了。初讀的時候其實很喜歡,外國的大牛寫的書老是讓人很喜歡讀下去。啃的時候還有另外一件事幫助我理解其細節——公司現有的框架。公司現有的框架是老大寫的,那時候咱們還在作.net。因此,那套驅動是.net的。並且,至關簡陋。不過呢,DDD的接口卻是已經基本健全。不過,在我研習《領域驅動設計》的時候,反饋當前框架的時候發現了很多須要改進的地方。因而,我在後面的開發過程當中重寫了一個框架,用在了公司後續的開發中。可是,也只是完成了基本的DDD須要的部分。後來,咱們試圖探索能夠將框架用於分佈式,具有可伸縮性,卻發現,在.net下能用的框架太少了。須要的框架大多都是些商業項目才能支撐的,並且還有收費。唉,一點開源精神都沒有的世界,好失望呀。雖然說,微軟已經在着手開源了,可是,姑且不說能開到什麼程度,單是成型須要的時間就是個未知數,因而,咱們所有團隊轉戰java,如今已經距離作出決定四五個月了吧。因爲鄙人java基礎比較薄弱,雖然已經惡補,可是,當前的框架仍是由咱們團隊中另外一位同事寫的。說實話,有一些不順手的地方。可是,基本都是參照我以前寫的框架就,加入了總線及消息隊列。因此,用起來還算能夠。此次就是要重寫一套我滿意的框架。
接下來,說說目標吧。
首先,這個框架須要支撐領域驅動設計,而這個支撐,是一系列的接口。在《實現領域驅動設計》一書中有說到一種六邊形架構。我想,那應該是一種很天然的事情。領域驅動專一於領域開發,可是,使領域開發中的各類功能被實現,是須要對應的功能支持的。這裏,會很天然的,也是至關純粹的使用接口實現的方式,將具體的接口的實現隔離開來,從而使領域純粹爲了支撐應用的功能而存在,而,用到的接口,則由各個功能模塊來實現。這樣的話,實現也將變得靈活,由於能夠直接把另外一種實現配置進來,而,領域對此,一無所知。
而,爲了支撐這些,咱們須要引入的第一個必不可少的功能模塊就是倉儲的持久化。
倉儲會以一系列的接口的形式出如今領域之中,而其實現,應該是能夠被替換的,甚至,應該是容許同時有多個倉儲實現被使用的。關於同時多個這個問題,我在開發的過程當中是有遇到的。在領域驅動的範圍內,構成領域的構造塊,咱們規定了這些,實體,值對象(實體和值對象一塊兒組成聚合,而根節快點爲聚合根),領域服務,倉儲,查詢服務,領域事件,在領域服務的外層,有一個東西叫作應用服務。記得我曾經還引入了一個叫作命令的東西,讓領域服務可應用服務通訊,可是,在咱們正在使用的框架中,是沒有的,由於,那個編碼量比較大,可是,應該會有更好的分佈式體驗吧。。。。說的有點遠了,記得我在開發領域時,遇到一個須要被緩存存儲的結構,我一會兒不知道它該算什麼了,若是它是聚合或者聚合的一部分,那麼,它應該可以被倉儲持久呀,可是,事實上來講,確實不能。後來,我把它弄成了實體,放到緩存中存儲了。其實,這也通順,可是,又引起了我另外一個思考,存儲它的緩存,算不算倉儲呢?後面再糾結這個吧。
那說下如今又哪些東西被規劃到了這個框架裏面了吧。
首先,DDD這一套基本的東西是有的。而後,其背後的支持呢,首先,倉儲,我打算遵循jpa來對倉儲進行實現和配置,java裏面,接入hibernate就能夠很簡單得實現了。而後是,領域事件。根據咱們目前的經驗來講,領域事件在一個子系統裏是須要同步和異步兩種的。可是,我總以爲,這樣是不美觀的,只能先這麼作,反正都能支持的。而,咱們把領域事件定已到了子系統內部,這件事我也比較糾結,這樣,對嗎,或者說,這樣,好嗎?
接下來,須要點支持分佈式的東西,這裏引入的是消息隊列和rpc。我也不知道rpc是否能夠取代消息隊列,估計是不能夠,咱們如今的框架是使用的這兩種東西進行的同步和異步通訊。
而其還能夠分別進行集羣和負載均衡,基本知足了這個框架的需求啦。
大概就是這樣了。