設(shè)計(jì)的變與不變

古希臘哲學(xué)家巴門尼德認(rèn)為:“人的思想和言語都有一個(gè)載體慢显,如果你在這一時(shí)間和另外一個(gè)時(shí)間想到或者談到同樣一件東西冬耿,那就說明這件東西在這段時(shí)間內(nèi)沒有變化煤篙,如有變化的話舷嗡,你說的就不是同一件東西±蚋疲”

巴門尼德

這讓我想起對象的實(shí)例纱注。在面向?qū)ο笤O(shè)計(jì)中,默認(rèn)情況下并沒有約束類的實(shí)例是否為可變胆胰,這意味著我們可以通過某種方式改變實(shí)例的狀態(tài)狞贱。這體現(xiàn)了實(shí)例的可變特征。然而蜀涨,若是站在內(nèi)存的角度觀察實(shí)例瞎嬉,則又不然蝎毡。無論它在內(nèi)存中存儲(chǔ)的狀態(tài)如何變化,該實(shí)例的對象標(biāo)識(shí)依舊是保持不變的氧枣。顯然沐兵,變與不變是相對的。

切換到DDD的命題中便监,所謂“實(shí)體”就是那種具有唯一的可識(shí)別可跟蹤ID的對象扎谎。這個(gè)ID并非程序語言在內(nèi)存中為它分配的對象標(biāo)識(shí),而是從領(lǐng)域角度來看烧董,由設(shè)計(jì)者為其識(shí)別毁靶,由創(chuàng)建者為其分配,因而具有領(lǐng)域語義逊移。實(shí)體的狀態(tài)當(dāng)然是可變的预吆,然而實(shí)體ID在這個(gè)實(shí)體的生命周期中卻是不可變的。

與之相對的是值對象胳泉。在DDD中拐叉,強(qiáng)調(diào)將領(lǐng)域?qū)ο髧?yán)格區(qū)分為實(shí)體和值對象。一個(gè)指導(dǎo)原則是扇商,當(dāng)你無法分辨某個(gè)領(lǐng)域?qū)ο缶烤故菍?shí)體還是值對象時(shí)凤瘦,應(yīng)優(yōu)先將其建模為值對象。這有助于我們更好地利用值對象的不可變性案铺。

不可變的對象能夠更好地維護(hù)廷粒,因?yàn)槟悴挥貌傩乃闹底兓矡o需追蹤變化的軌跡红且。不變性天生支持并發(fā)。這就衍生出面向?qū)ο笤O(shè)計(jì)中的Immutable模式涤姊。例如Java和C#中的String類型暇番,皆為Immutable模式的實(shí)現(xiàn)。

可若放在函數(shù)式編程中思喊,這種模式就顯得有些可笑了壁酬。尤其在純函數(shù)式編程的世界里,任何東西都應(yīng)該是不變的恨课。

這種不變意味著只要它存在舆乔,就不可修改,而且恒古不變剂公。這種追究變化背后的不變性希俩,一直是古希臘哲學(xué)乃至科學(xué)的基本原則。物質(zhì)是否永恒不變纲辽,在哲學(xué)中一直是引人深思的命題或假設(shè)颜武;但在函數(shù)式編程中璃搜,它幾乎被證明了。例如鳞上,在Haskell中这吻,對List的任何操作,即使調(diào)用++對List進(jìn)行合并篙议,返回的都是全新的List對象唾糯,原有對象不會(huì)有任何變化。

羅素在《西方哲學(xué)簡史》中寫道:

有的神秘主義者認(rèn)為永恒并不是指時(shí)間上的永久鬼贱,它是獨(dú)立于時(shí)間之外的移怯,無前無后、無因無果吩愧,也沒有邏輯可循芋酌。

我覺得函數(shù)式編程追求的不變性,可以劃入這個(gè)范疇雁佳。

赫拉克利特說:“人不能兩次踏進(jìn)同一條河流”脐帝。這是赫拉克利特終極的哲學(xué)觀,即萬物隨時(shí)在變糖权。軟件系統(tǒng)就是這樣一條河流堵腹,它無時(shí)無刻不在變化,正如水不斷的流動(dòng)星澳,需求也總是在變化疚顷。但若拋開原子裂變、放射衰變的科學(xué)原理禁偎,我們似乎也可以將組成整條河流的每一滴水腿堤,看做是不變的基本組成要素。這個(gè)要素就是Monad中的Identity(幺元或單位元)如暖。這個(gè)Identity表達(dá)了單一笆檀、恒等的概念,例如Int類型中加減法運(yùn)算半群(SemiGroup)中的Zero盒至,就是一個(gè)Identity酗洒,因?yàn)榘肴褐械娜魏卧豠與Zero結(jié)合,依然是元素a本身枷遂。

水是如何組成一條河流的呢樱衷?這取決于組合子(Combinator)的設(shè)計(jì)與組合。只要我們找到萬物的基本要素酒唉,繼而設(shè)計(jì)出各種組合子矩桂,就可以演繹出世間不同的物。例如水滴雖可以組合為河流痪伦,卻也可以組合為橙汁耍鬓,只要我們加入橙子的另一個(gè)組合子即可阔籽。這就是面向組合子(Combinator Oriented)的設(shè)計(jì)思想。顯然牲蜀,它與面向?qū)ο蟮脑O(shè)計(jì)哲學(xué)背道而馳笆制。

以哲學(xué)史觀之,函數(shù)式思想更符合古典的樸素哲學(xué)觀涣达。在古希臘哲學(xué)家中在辆,泰勒斯認(rèn)為世界的元素為水,阿那克西美尼認(rèn)為世界的元素是氣度苔,赫拉克利特認(rèn)為世界的元素是火匆篓,而恩培多克勒則糅合了這些思想,認(rèn)為世界的元素有土寇窑、氣鸦概、火、水四種甩骏。而觀中國古代哲學(xué)窗市,則有五行學(xué)說認(rèn)為宇宙萬物都由金木水火土五種基本特性的運(yùn)行和變化所構(gòu)成。

不論構(gòu)成萬物的基本元素為何饮笛,這種哲學(xué)觀不正是函數(shù)式編程的設(shè)計(jì)觀嗎咨察?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市福青,隨后出現(xiàn)的幾起案子摄狱,更是在濱河造成了極大的恐慌,老刑警劉巖无午,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媒役,死亡現(xiàn)場離奇詭異,居然都是意外死亡宪迟,警方通過查閱死者的電腦和手機(jī)酣衷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踩验,“玉大人,你說我怎么就攤上這事商玫』叮” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵拳昌,是天一觀的道長袭异。 經(jīng)常有香客問我,道長炬藤,這世上最難降的妖魔是什么御铃? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任碴里,我火速辦了婚禮,結(jié)果婚禮上上真,老公的妹妹穿的比我還像新娘咬腋。我一直安慰自己,他們只是感情好睡互,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布根竿。 她就那樣靜靜地躺著,像睡著了一般就珠。 火紅的嫁衣襯著肌膚如雪寇壳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天妻怎,我揣著相機(jī)與錄音壳炎,去河邊找鬼。 笑死逼侦,一個(gè)胖子當(dāng)著我的面吹牛匿辩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偿洁,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼撒汉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涕滋?” 一聲冷哼從身側(cè)響起睬辐,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宾肺,沒想到半個(gè)月后溯饵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锨用,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年丰刊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片增拥。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啄巧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掌栅,到底是詐尸還是另有隱情秩仆,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布猾封,位于F島的核電站澄耍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜齐莲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一痢站、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧选酗,春花似錦阵难、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氢烘,卻和暖如春怀偷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背播玖。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工椎工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜀踏。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓维蒙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親果覆。 傳聞我的和親對象是個(gè)殘疾皇子颅痊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 2016年末我遭遇瓶頸 2016年斑响,我在一家互聯(lián)網(wǎng)+醫(yī)療的創(chuàng)業(yè)公司工作。這一年在我Leader的指引下钳榨,我接觸了很...
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,511評論 1 51
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,131評論 30 470
  • 今天的更文時(shí)間有點(diǎn)不正常舰罚,和同學(xué)一起吃飯去啦,吃完飯忙得跑回來更文薛耻。 同學(xué)還熱情的邀請我去她家玩兒营罢。我忙著回家,邊...
    靜靜diary閱讀 279評論 2 1
  • 我獨(dú)自走在路上 望著霓虹的南京 看看眼下的生活 想想自己的未來 心中起了些許的惆悵 不知不覺 走到了星火路的盡頭 ...
    愛情的逃兵閱讀 189評論 0 1