| 廣告聯系 | 簡體版 | 手機版 | 微信 | 微博 | 搜索:
歡迎您 游客 | 登錄 | 免費注冊 | 忘記了密碼 | 社交賬號注冊或登錄

首頁

新聞資訊

論壇

溫哥華地產

大溫餐館點評

溫哥華汽車

溫哥華教育

黃頁/二手

旅游
搜索:  

 論壇通告:  請不要上傳第三方有版權的照片,請尊重版權,謝謝   轉載新聞請務必注明出處,這些媒體請不要轉,謝謝   批評商家需要注意  
 個人空間: lxls | 豬頭看世界 | 格局 | NotmeL8 | XY | 羅蓬特機器人 | 白龍王許道長 | 一襲絳襦落鵬城,疑似玄女下九天 | 花隨風 | 呂洪來的個人空間 | 靜觀雲卷雲舒 | 顧曉軍 | 客觀中立而實事求是,唯服理據而杜絕辱罵 | 逸言堂 | 大溫房產和地產研究 | 我的退休生活 | 禪人俗事 | 湖裡湖塗 | 天涯逐夢 | My AI Tech Channel
 最新求助: 請問誰知道哪裡有賣理發的電動推子?   忽然有個疑問:戰爭時期,加拿大拿PR卡未入籍的永久居民會被強制服兵役嗎?   這個銀條   如何修改會員名?
 論壇轉跳:
     發帖回帖獲取加西鎊, 兌換精彩禮物

論壇首頁 -> IT人生

轉貼:不變性immutablity設計 (發表於10年前)



回復主題  圖片幻燈展示  增添帖子到書簽中  給帖子中的發貼者批量贈送獻花或者花籃    |##| -> |=|        發表新主題
閱讀上一個主題 :: 閱讀下一個主題  
作者 正文
webdriver
(只看此人)




文章 時間: 2014-10-17 13:04 引用回復
不變性是統領業務分析和高性能架構重要法門,通過業務上不變性分析設計,可以實現代碼運行的並發高性能和高擴展性。

不可變性是一種抽象,它並不在自然界中存在,世界是可變的,持續不斷變化。所以數據結構是可變的,他們是描述真實世界某段時間內的狀態。而狀態經常會被修改,如下面情況:
1.狀態被並發線程同時修改
2.多個用戶對一個共享對象(狀態)進行沖突性修改。
3.用戶提供了無效數據,應該被回滾。
在自然可變的模型下,會在上面情況下發生不一致性或數據破碎crushing,顯然可變性很容易導致錯誤。我們需要的是一種新視野,新角度,一種事務transaction視野,當你從事務性程序中看世界時,一切都是不可變的。這和蒯因與引用透明 中功能重復執行不可變原理非常類似,體現邏輯的線性特征。
 
花籃
分享
_________________
There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
樓主 | 電梯直達
閱讀會員資料 發送站內短信 主題 User photo gallery 禮物  
webdriver
(只看此人)




文章 時間: 2014-10-17 13:04 引用回復
不可變性說得這麼玄,是不是和平常編程沒有太大關系呢?

完全錯誤。舉個例子,當你要對一個變量進行修改時,這個變量處於一個對象A內,你是直接對這個對象(A類的實例)內這個變量進行修改?還是重新創建一個A類新的對象實例,新的變量在新的對象實例中,然後替換掉原來的對象呢?

很多程序員對這麼一個權衡問題沒有過多考慮,基本是隨意選擇其中方案,甚至根據工作量多少為抉擇,這些不經意行為都為整個系統的性能留下禍根。

這個問題其實涉及到了不可變性的問題,如果A類被設計為不可變了,那麼就要采取第二個的方案,創建後替換,這個答案帶來兩個問題:
1.程序員如何知道A類是一個不可變的類?
2.不可變類為什麼能夠獲得性能提高?

關鍵問題是第一個,我認為我們可以通過OOA/OOD等建模方式明確哪個類為不可變,很顯然DDD領域驅動設計方法中,有值對象為不可變的概念,如果領域專家指定來自需求中哪個類是值對象,那麼我們程序員就容易在編程實踐中采取構建替換的辦法,從而又能照顧到了計算機底層的性能。
 
花籃
分享
_________________
There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
沙發 | 返回頂端
閱讀會員資料 發送站內短信 主題 User photo gallery 禮物  
webdriver
(只看此人)



文章 時間: 2014-10-17 13:04 引用回復
我2006年在jivejdon按照DDD設計開發時,探索性地提出狀態可以表達設計為值對象概念,見實戰DDD(Domain-Driven Design領域驅動設計:Evans DDD),雖然此後一直有反復和懷疑,但是最近看了如何打敗CAP定理?一文以後,比較肯定了自己當初想法,心中一塊石頭落地,這是一種探索的樂趣。

下面談談我如何在JiveJdon 4.5版本中如何把值對象狀態不可變性貫徹落實完整的情況,在之前版本因為心中不確定,所以對狀態修改時,沒有遵循上面提到的第二步法則,而是直接對對象字段修改,就好象直接去修改數據表字段那樣魯莽。

這種破壞性修改的惡果也讓我吃盡苦頭,就是數據出現嚴重的不一致性,如帖子更新狀態,經常是增加新帖後,在論壇列表的“最近更新”欄目出現的不是最後增加的那個新帖,有時正確有時錯誤,頭疼不已,當時是非常懷念基於數據庫的編程模式,因為這個功能只要通過一條SQL查詢就能完成,輕松而簡單,而JiveJdon是基於內存中的對象,這個功能是對對象的狀態進行修改完成的,方式不同,思路就不一樣了,後來雖然費了九牛二虎之力勉強正確,但是不夠優雅和輕量,一直是自己不敢面對的痛。
 
花籃
分享
_________________
There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
板凳 | 返回頂端
閱讀會員資料 發送站內短信 主題 User photo gallery 禮物  
webdriver
(只看此人)



文章 時間: 2014-10-17 13:05 引用回復
現在理順了值對象狀態不可變性這樣一個思路,我幾乎三下五除二把JiveJdon這個功能就重構了,而且一次性調試通過。下面談談這個重構過程。先展示一下JiveJdon的設計類圖:

 
花籃
分享
_________________
There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
地板 | 返回頂端
閱讀會員資料 發送站內短信 主題 User photo gallery 禮物  
webdriver
(只看此人)



文章 時間: 2014-10-17 13:05 引用回復
將ForumThreadState這個經常變換的狀態和實體聚合邊界內其他變化是不一致的,慘遭DDD一書中的訂單價格變化案例設計為單獨的ForumThreadState,下面問題是,ForumThreadState變化是直接修改其中字段,還是重新構建一個ForumThreadState替換原來的,不幸的是我和大多數一樣,起初沒有太多留意走的是前一種辦法,繞了不少彎路。


(The end)
 
花籃
分享
_________________
There is no wisdom tree; nor a stand of a mirror bright, Since all is void, where can the dust alight?
5 樓 | 返回頂端
閱讀會員資料 發送站內短信 主題 User photo gallery 禮物  
 
回復主題     |##| -> |=|     論壇首頁 -> IT人生 所有的時間均為 美國太平洋時間
1頁,共1


注:
  • 以上論壇所有發言僅代表發帖者個人觀點, 並不代表本站觀點或立場, 加西網對此不負任何責任。
  • 投資理財及買房賣房版面的帖子不構成投資建議。投資有風險,責任請自負
  • 對二手買賣中的虛假信息,買賣中的糾紛等均與本站無關。
  • 黃頁熱門商家 免費個人廣告
    發布商業廣告

    不能在本論壇發表新主題
    不能在本論壇回復主題
    不能在本論壇編輯自己的文章
    不能在本論壇刪除自己的文章
    不能在本論壇發表投票
    不能在這個論壇添加附件
    可以在這個論壇下載文件

    論壇轉跳: 

    webdriver, webdriver, webdriver, webdriver, webdriver
    潛力帖子 精華帖子 熱門帖子
    巴印空戰0比6之啟示
    應該軍事雜志介紹一下
    中國高鐵牛啊
    個人認為很危險的想法
    陰雨天回來了
    今天看眼醫
    從發型看女人
    中國簽證的問題?
    紅場閱兵大陸儀仗登熱搜,普京朋友...
    中俄聯合聲明
    加拿大允許國內郵寄肉食品了
    被巴鐵擊落6架戰機後,印度迎來一個...
    法國情報高級官員證實至少一架陣風...
    從兩場戰爭說炸掉阿三大壩的必要性
    殲十多了個名號
    5月2日換幣盛況
    維達大師,另類收藏,請您欣賞!
    清代福州台伏鈔票
    四川官錢局鈔票
    大漢四川軍政府軍用銀票
    今年新幣發行計劃
    要出一個新的一元
    古董金幣
    mint三月新幣(四月新幣從22樓起,五...
    1999 mule 25分
    2025 蛇年敲幣活動
    加拿大新總理馬克卡尼
    我在小紅書被罵窮得沒錢給孩子買衣服
    美國2025年AWQ(美國婦女25c)發行計劃
    韓國空難FDR黑匣子缺失最後四分鍾關...
    皮爾今天在溫哥華 - 藍色wave - 保...
    幾分鍾前,中國強硬反擊,征34+50,...
    曼谷高樓直接倒了
    我說我希望特朗普贏,老公氣得眼睛...
    知乎?加西網上為什麼有老男人喜歡...
    明明有能力統台,大陸為何遲遲不動手?
    貌似ndp稍占上風。。。。。
    今天是感恩節,跟大家道個別,以後...
    咱最後還是投了ndp
    生平第一次被偷車了
    中國會不會武統台灣
    突發:台灣隊戰勝中國隊奧運奪冠,...
    溫哥華房姐出事了
    有在看總統辯論的嗎?
    退休幾年後的感悟

    最新新聞 熱門新聞 熱評新聞
    家務你不做誰做 兒媳霸氣回嘴婆婆秒安靜
    加國回收這款檢測儀 搞不好出人命
    69歲父親地牢囚禁兩女兒!長期下藥性侵
    驚天大瓜!一線女星海外產子 3人遭點名
    美國這28個城市正下沉 大溫難幸免
    巴基斯坦拿客機當盾牌 以飛彈、無人機攻擊印度
    都不去了!加航預計飛美客流量狂跌
    駭人!機車騎士行進中"頭顱整顆掉下來"
    台灣批評俄中歪曲二戰歷史 反駁其對台灣主權敘述
    美英貿易協議 英方給予川普一項對中"特權"
    中共反腐新趨勢 多名女高官密集投案
    加國這省推小費新規 BC要不要跟?
    大溫這4大城市的租金加拿大最昂貴
    加人隊傳奇人物住宅降價130萬在售
    空運至溫村的嬰兒死亡 衛生廳嚴查
    烏克蘭及歐洲35國成立特別法庭 審判俄羅斯侵略
    尹錫悅被拍到在公園"悠閒遛狗",身邊帶著3名保鏢
    他是國務院總理接班人? 四中全會恐劇烈震蕩
    美債重量級買家來了 需求高達2萬億美元
    女子月收入4700元負債高達2544萬元,法院回應
    俄媒:俄羅斯"無人系統部隊"首次參加閱兵式
    中美破冰會談"誰先打電話"? 美國財長突然露餡
    虧大了 蘇姿豐黃仁勳炮轟對中國出口限制
    匈牙利外長:已驅逐兩名"從事間諜工作"烏外交官
    2大球隊"搶人大戰" 意外挖出新教宗是死忠球迷
    19歲女生注射頭孢後去世,醫院道歉:存在管理疏忽
    上海一區宣布:優秀"博主"購房最高可獲200萬補貼
    印巴因克什米爾沖突再起,你應該知道的關鍵問題
    特朗普在做中國想做的事:讓自由亞洲電台噤聲
    比爾蓋茨痛批馬斯克,馬斯克回應:蓋茨是個大騙子
    "疫苗導致的死亡海嘯已經來臨" 中國博主發文
    獨家報道傳 川普最快下周將中國關稅降至…
    壓軸登場、長長紅地毯....習在莫斯科享盡榮耀
    中國憂心"2下場"!選擇對美讓步(圖
    英媒:比黃金還珍貴的月塵從中國運抵英國
    紀念蘇聯偉大衛國戰爭勝利80周年,紀念的是什麼?
    租了11年的房子要賣 大溫女子忠告
    加拿大皇家馬戲團素裡列治文開演
    王丹:中國為何這麼快就與美談判?
    多個大國無視中共紅線! 北京體面遭踐踏
    90後當起"做飯阿姨",不打卡月入上萬
    虧大了 蘇姿豐黃仁勳炮轟對中國出口限制
    中美破冰會談"誰先打電話"? 美國財長突然露餡
    俄媒:俄羅斯"無人系統部隊"首次參加閱兵式
    乘客突發急病,醫生為何選擇不救?

    更多方式閱讀論壇:

    Android: 加西網
    [下載]

    Android: 溫哥華論壇
    [下載]

    PDA版本: 論壇

    加西網微信

    加西網微博


    Powered by phpBB 2.0.8
    Terms & Conditions    Privacy Policy    Political ADs    Activities Agreement    Contact Us    Sitemap    

    加西網為北美中文網傳媒集團旗下網站

    頁面生成: 0.0489 秒 and 8 DB Queries in 0.0024 秒