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

首頁

新聞資訊

論壇

溫哥華地產

大溫餐館點評

溫哥華汽車

溫哥華教育

黃頁/二手

旅游
搜索:  

 論壇通告:  轉載新聞請務必注明出處,這些媒體請不要轉,謝謝   請不要上傳第三方有版權的照片,請尊重版權,謝謝   批評商家需要注意  
 個人空間: XY | NotmeL8 | 忽然聽到一個墨西哥女仔唱。呐呐呐呐呐呢呐 | 白龍王許道長 | 我大爺 | 亂想 | 湖裡湖塗 | 血流成河 | 顧曉軍 | 羅蓬特機器人 | 我的退休生活 | Amy Yi | 客觀中立而實事求是,唯服理據而杜絕辱罵 | 快樂的獅子 | 我在溫哥華 | 滄海一聲笑 | little fish in the sky | 一襲絳襦落鵬城,九天玄女下凡間。 | 真情Z下海 | xian
 最新求助: 請問誰知道哪裡有賣理發的電動推子?   忽然有個疑問:戰爭時期,加拿大拿PR卡未入籍的永久居民會被強制服兵役嗎?   這個銀條   如何修改會員名?
 論壇轉跳:
     發帖回帖獲取加西鎊, 兌換精彩禮物

論壇首頁 -> IT人生

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



回復主題  圖片幻燈展示  增添帖子到書簽中  給帖子中的發貼者批量贈送獻花或者花籃    |##| -> |=|        發表新主題
閱讀上一個主題 :: 閱讀下一個主題  
作者 正文
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
    潛力帖子 精華帖子 熱門帖子
    一周麻辣點評:地產稅收就是搶錢
    奈飛上的紀錄片
    去吃韓國人開的日本餐
    面向足球球迷的 2024 年歐洲杯
    歐洲杯馬上要開始了,預測一下比分
    歐洲杯揭幕戰結束,德國5:1完爆蘇格蘭
    歐洲杯柏林最佳公共觀賽點
    貝克漢姆
    歐洲人對足球真是瘋狂
    現在國際事務,都是由G7來敲啊
    今天關注葡萄牙
    葡萄牙真是讓人著急啊😣
    好後悔去辦中國簽證
    溫東小兵,你大爺,心涼了!他不上當!
    哈哈馬
    在首爾景福宮見到了明娘娘
    在Victoria華裔博物館裡面的一套token
    日本五日游記
    Mule Coin 無法抗拒的魅力之一:200...
    法國阿爾卑斯山區
    明天又要上班了
    漂亮的MS66
    The Value of Money
    再去chief peak
    這些是不是真貨?
    同號雷達鈔
    今天包粽子 兼和粉紅吵架
    熱烈恭賀錢幣小站新任版主四季豆同學
    北溫換硬幣活動取消
    加拿大唯一無國籍的硬幣
    你們洗一次牙的價格一般多少錢?
    最近愛上了KALE
    刺傷4美國講師 凶手身份曝光,順便...
    從64看中國人的奴性和殘暴。
    大溫2室租金將達2800
    在北美得了大病真是只能等死了
    國內最驕傲的兩件事外賣和快遞
    烏克蘭已經花掉了美國七百多億美元
    大家如何看待北京同仁堂汞超標5萬倍...
    身在海外,痛罵國內人不反抗挺壞的
    95個小時,這是看急診嗎
    疫情4年後,海外華人去中國的觀感
    在加做房東有罪嗎?
    坎昆比夏威夷好玩
    中國沒有恐襲

    最新新聞 熱門新聞 熱評新聞
    福建上杭山體滑坡一寺廟倒塌 村民:一家6口失聯
    冷藏車載8人窒息身亡背後:農閒打零工的大齡女工
    傳俄羅斯在中國大量采購一物資(圖
    走線非法移民激增,厄瓜多爾暫停對中國公民免簽
    "開使館車堵路叫囂女子"身份曝光 北京警方通報
    北京南海襲擊菲律賓船只 用意曝光
    美國會高調抗北京,貿易團體避風頭紛與中企切割
    醫保患者住院15天必須出院?兩部門:建議舉報
    北京大幅減持美債?高盛最新報告揭"玄機"
    普丁凌晨才抵達平壤,南韓媒體譏:遲到隊長不意外
    突發!上海地鐵發生持刀傷數人 嫌犯遭捕
    美國:加沙停火可以結束以色列與真主黨的沖突
    席琳·迪翁有望獻唱奧運開幕式?!驚喜現身首映禮
    中國南方暴雨引發洪災,至少九人死亡
    英偉達市值超越微軟,成為全球第一
    去加拿大開挖掘機:有落差,但更快樂
    經濟不好方丈也要跑路?傳出售寺廟
    律師賄賂法官之妻 僅判行政處罰
    BMW汽車使用被禁中國零件擴大調查
    被困國產電動車喊救命 理想車撞一排
    西捷維修師工會發72小時罷工通知
    盜竊轉賣室友奢侈品 華裔女生被捕
    禍不單行,中國出口電動車被他重錘
    加國槍案三人死亡 貸款經紀人身亡
    美5月零售不如預期 月增僅0.1%
    神秘深海烏賊育卵曝光 揭繁殖之謎
    薄熙來死黨 72歲正部級高官病亡
    戰爭初期烏克蘭曾願割地 換入歐盟
    打趴外國企業,打工人就幸福了嗎?
    殘酷的閒暇:女工冷藏車與和鄉村圖
    盜竊轉賣室友奢侈品 華裔女生被捕
    姜萍事件是徹頭徹尾的炒作,始作俑
    大溫巴士總站將拆除 剛翻新裝修完
    正見證一個洲際變遷 俄中帝國夢魘
    多花20萬買房短租 BC業主現在崩潰
    被困國產電動車喊救命 理想車撞一排
    貸款還款增加一倍多 加國夫婦震驚
    影響幾億人,養老金即將發生巨變
    加國"路怒"視頻瘋傳 男子持刀威脅
    BMW汽車使用被禁中國零件擴大調查
    西捷維修師工會發72小時罷工通知
    為俄押運黃金、與港府關系密切
    禍不單行,中國出口電動車被他重錘
    加國槍案三人死亡 貸款經紀人身亡
    美5月零售不如預期 月增僅0.1%

    更多方式閱讀論壇:

    Android: 加西網
    [下載]

    Android: 溫哥華論壇
    [下載]

    PDA版本: 論壇

    加西網微信

    加西網微博


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

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

    頁面生成: 0.0471 秒 and 5 DB Queries in 0.0013 秒