或許是領域建模的真相 - 張逸 - 博客園
http://www.cnblogs.com/wayfarer/p/5339134.html
或許是領域建模的真相牙丽? - 簡書
http://www.reibang.com/p/f936b8978152
我們一提及領域建模壹将,就好像回到了石器時代陆淀。然而這個謎題至今還未解決贯吓,就好像穴居人的生存方式羔挡,我們只能猜測腻格、推測以及演繹诊赊,卻不能真實復現匹颤。
Martin Fowler的《分析模式》總結了諸多領域分析模式仅孩,Eric Evans開創(chuàng)了領域驅動設計的辦法,至于還要老的CRC方法印蓖,用例驅動辽慕,ICONIX方法以及稍新一些的四色建模法,都在嘗試領域模型的建構赦肃,結果仍然差強人意溅蛉。
這個問題或許是Mission Impossible公浪,因為領域邏輯其實是一個復雜系統(tǒng),系統(tǒng)中的模型如三體一般互相影響船侧,卻又隱沒在混沌中欠气,并不真實清晰地凸顯出來。
在許多項目中勺爱,我多數采用混用手法進行建模晃琳,CRC、用例驅動琐鲁、領域驅動以及四色建模卫旱,什么適合就選擇什么樣的手法∥Ф危可是到了最后顾翼,似乎還是憑借著經驗在跟著感覺走。沒有教會領域建模的方法奈泪,只有可意會不可言傳的感覺适贸。之所以還要提方法,不過是事后諸葛亮而已涝桅。
幾年前接觸到CQRS(Command Query Responsibility Separation)模式拜姿,為我隱約打開了一扇窗,只是窗外的風景有些模糊冯遂,不敢跳出去蕊肥。繼而是函數式思想每時每刻在顛覆我舊有的設計思想,一步一步地侵蝕著OO的陣地蛤肌。我沒有放棄OO這個陣地壁却,但我覺得攻守的布局可以豐富些,不拘一格才能更好地解決敵人(需求)裸准。
最近在使用React和Redux開發(fā)前端展东,所謂Pure Component以及Redux的reducer思想好像一陣大風,刮去了窗外朦朧的霧綃炒俱,風景變得逐漸清晰起來盐肃。領域世界的建筑墻上,其實刻滿了“狀態(tài)”兩個字权悟!
岔開一筆談談另外的印象砸王。我在了解Datomic數據庫的架構設計思想時,被這么句話驚呆了:
Datomic將數據庫視為信息系統(tǒng)僵芹,而信息是一組事實(facts),事實是指一些已經發(fā)生的事情小槐。鑒于任何人都無法改變過去拇派,這也意味著數據庫將累積這些事實荷辕,而非原地進行更新。雖然過去可以遺忘件豌,但卻是不能改變的疮方。這個不變性(immutability)帶來了很多重要的架構優(yōu)勢和機會。
醍醐灌頂啊茧彤,這不是設計骡显,而是哲學!
讓我們再想想UML里面的狀態(tài)圖以及工作流中著名的“狀態(tài)機(State Machine)”曾掂”拱或許我們在建模中很少使用狀態(tài)圖,然而讓我們開開腦洞珠洗,你是否覺得:任何業(yè)務邏輯其實都可以轉換成狀態(tài)的遷移溜歪?
再看看四色建模中的“時標性對象(moment-interval)”,根據徐昊同學對四色建模的解構许蓖,時標性對象是建模的起點蝴猪,這類對象的共同特質在于它在時間線中留下了不可磨滅且不可更改的足跡。根據Datomic哲學思想膊爪,顯然自阱,曾經存在的這些足跡或許可以湮滅,但存在的事實卻不可湮滅米酬。于是沛豌,我們可以對這些足跡進行“追溯”,這就是所謂的“Event Sourcing”了淮逻。
是什么導致事件(Event)產生的琼懊?回到CQRS模式,就是Command爬早;而在用例驅動的語境中哼丈,就是用例(Use Case);跳到函數式思想筛严,則可以視為函數醉旦。當然,你也可以認為它是對象的行為桨啃,但如果我們將Command以及Event都視為不變的對象呢车胡?在Scala中,它們都是Case Class照瘾。
然則匈棘,這些概念的本質可否認為就是“狀態(tài)”世界的各種表征呢?
觸摸到“真相”了嗎析命?
然而The Matrix中的墨菲斯卻說:
真相是你是一個奴隸主卫,尼奧逃默。你,和其他所有人一樣簇搅,生來受奴役……你給關在一所監(jiān)獄里完域,這監(jiān)獄你無法聞及,無法品嘗瘩将,無法觸摸吟税。這是你頭腦的監(jiān)獄。
會否我們對領域世界的思考姿现,其實就是頭腦的監(jiān)獄肠仪?
柏拉圖提出過一個著名的洞穴隱喻。他將不懂哲學的人比喻為被關在洞穴中的囚犯建钥,這些囚犯因為被鎖著藤韵,所以只能看著眼前的墻壁,不能轉頭熊经。他們的背后生著一堆火泽艘,他們只能看到墻上自己和其他東西的影子。他們無法回頭镐依,不知道有火匹涮,便以為墻上的影子是實物。某一天槐壳,一位囚犯逃離了洞穴然低,并發(fā)現了真相,發(fā)現自己以前被影子騙了务唐。如果是哲學家雳攘,他定會回到洞中將真相告訴大家。但是在別人眼中枫笛,他肯定是傻子吨灭。
故而,我無法解答這是否“真相”刑巧,或許我以為找到了喧兄,其實不過是火堆將領域建模的方法投影到墻上,而我湊巧是那個被鎖著的囚犯啊楚。
行文至此吠冤,其實我僅僅提出了問題。如果你覺得我的思緒一片混亂恭理,我會欣然拯辙,因為你讀懂了,我正是在清晰地描述一路走來混亂的思維過程颜价。我打算信步而行涯保,搖頭晃腦只是為了觀賞兩邊的風景《希現在是春天,路畔的花園粉色桃花白色梨花開了遭赂,或許還有櫻花,因為零落的一片一片花瓣在水里有些哀傷横辆。風景太好撇他,我不忍走到終點,改天繼續(xù)說說我的思考片段罷狈蚤。