<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Johnny's Collections

    生活總是有太多的無奈與失望,讓我們以在努力學習和工作中獲得的成就感和快樂來沖淡它們。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      10 Posts :: 0 Stories :: 80 Comments :: 0 Trackbacks

    2010年6月26日 #

        一直對BIO、NIO、AIO不太理解,特別是阻塞與異步的區(qū)別。Google了一下,一篇文章中的4張圖很形象的表述了4種IO模型的原理和區(qū)別,收藏一下。

        首先,貼一張表示四種IO模型的圖:



    同步阻塞IO:


    同步非阻塞IO:



    異步阻塞IO:


    異步非阻塞IO:
    posted @ 2012-05-20 00:12 Johnny.Liang 閱讀(931) | 評論 (0)編輯 收藏

    6月下旬,由于個人發(fā)展的原因,離開了做銀行外包的F公司,也離開了S城,結束了2個半月短暫的S城之旅,重新回到了土生土長的G城,也加入了一家互聯(lián)網公司,工作這么多年,都是做企業(yè)級應用,這次是我第一次從事互聯(lián)網技術工作,我終于落網了。

    從事互聯(lián)網技術工作與企業(yè)級應用有很大的不同,考慮的東西更多了。由于缺乏互聯(lián)網相關的開發(fā)經驗,很多東西需要去學習,同時,加入新公司后,終于真正的當上了Leader,這次終于可以自己一手一腳的組件自己的團隊了,所以,除了技術工作,還有一大堆管理工作要做。幾個月來,晚上9點半過后下班,周末帶電腦回家繼續(xù)工作已經成為了習慣。總之,每天都有忙不完的工作,生活的70%時間都在工作上。

    正因如此,本來想堅持寫的博客暫停了,《領域驅動設計》的系列文章也暫停了很久。在此,向一直關注我的文章的同學說聲抱歉,我可能有一段時間要暫停寫博了。不過,技術依然是我的最愛,IT依然是我的事業(yè),等我在新公司的工作上軌之后,我就會回來。各位,再會!

    posted @ 2010-12-14 22:46 Johnny.Liang 閱讀(1147) | 評論 (3)編輯 收藏

    領域驅動設計系列文章(3)——有選擇性的使用領域驅動設計

     

    本系列的第一篇博文拋磚引玉,大談領域驅動設計的優(yōu)勢,這里筆者還是希望以客觀的態(tài)度,談談領域驅動設計的缺點及其不適合使用的場景,以讓讀者可以有選擇性的使用領域驅動設計。

     

           我們知道,沒有最好,只有最合適,設計也是一樣。因此,所謂設計,就是以你和你的團隊的知識、經驗和智慧,全面充分的考慮各種內外因素后,在你們的設計方案中作出合理的選擇的過程。而這些影響你們選擇的因素主要有:

     

    • 技術框架的特征和約束(如果你的項目決定使用C語言進行開發(fā),那么首先在設計方法上,就需要使用面向過程而非面向對象的設計方法)。

     

    • 時間的壓力和約束(你永遠不可能告訴你的老板,給我10年時間,我和我的團隊將為你設計出世界上最優(yōu)秀的軟件)。

     

    • 你的團隊的能力、經驗、性格、價值觀等因素的約束(你不能期望一個長期從事遺留系統(tǒng)維護項目或大部分成員是缺乏經驗的高校畢業(yè)生的團隊能很好的按照你的設計意圖去實現(xiàn)你的高度抽象的優(yōu)秀設計,同時你也別指望一幫家里經濟條件不錯,本著過來熬時間的家伙會樂意與你一起刻苦鉆研、精益求精)。

     

    • 你的系統(tǒng)的特征(如果你想把一個足夠簡單而且在可以預計的將來都不存在很大規(guī)模的需求變更的系統(tǒng)設計得很復雜,很精妙,具有很好的擴展性,但要為此付出巨大的時間、人力成本,這顯然是一種不理智的過度設計(Over design))。

     

    • 其他外在因素的約束(你的項目需要參與投標,你必須壓縮人力、時間等以讓你的項目成本成為巨大的競爭資本)。

     

    當然,上述的考慮因素站在比較高的角度,通常是項目經理、架構師需要考慮的問題,但這當中你應該會得到一些啟發(fā)。回到我們的主題,我們首先看看,領域驅動設計相對于傳統(tǒng)的面向過程式的設計,有什么缺點:

     

    • 復雜化:面向過程思維之所以一直很受歡迎,是因為它很直觀,非常符合大部分人的思維習慣,大部分人拿到一個問題,通常都是會很直觀的想第一步做什么、第二步做什么,如果怎樣,應該怎樣,否則怎樣……,可以說,任何水平的程序員,都能很好的使用面向過程的方法進行設計和開發(fā)。同時,由于我們教育水平的落后和整體IT環(huán)境的制約,可以這樣說,真正掌握面向對象思維和設計方法的程序員的比例非常低(雖然絕大部分都使用面向對象的語言和工具),而本身面向對象思維要求人有很好的抽象思維能力,因為你需要把一個復雜的系統(tǒng)一層層的抽象為簡單的部分,需要把現(xiàn)實世界的事物(有些是可見的,但有些是不可見)合理的抽象為計算機世界的不同元素。這些都不是一些很容易做的事情,要做得好,就更難。


    • 團隊的抗拒:如果你的團隊(很大可能)大部分人都習慣于用很直觀的面向過程的方式進行設計和開發(fā),你需要推動你的團隊轉換思維來采用面向對象的方式進行領域驅動設計,通常會遭到多數(shù)人的抗拒。因為人都是有惰性的,他們習慣安于現(xiàn)狀,而改變是痛苦的,他們要付出額外的努力,需要進行學習,但以筆者的經驗,相當一部分程序員,特別是有一定工作年限的程序員,他們從事IT工作都只是為了獲得一份不錯的報酬,因此他們的學習動力非常有限,而且,他們都相當自負,被說服的難度比較大。



    • 管理、開發(fā)和維護的成本高:復雜度更高,意味著你需要花更多的時間進行設計,同時需要花出額外的時間進行必要的培訓,而且需要有更完善的文檔(設計文檔,API文檔,培訓文檔等)。領域驅動設計的抽象程度比較高,因此必需有良好的文檔,否則,隨著項目的不斷迭代、升級和維護,它很容易因為后來者的誤解而慢慢回歸面向過程的設計,甚至會變得“四不象”,領域驅動設計的成本優(yōu)勢是隨著時間的推移慢慢體現(xiàn)的(見下圖),如果出現(xiàn)這種情況,所有前面付出的努力都會付諸東流。


    系統(tǒng)的初始階段,領域驅動設計需要付出更大的成本,但隨著時間的推移,領域驅動設計的成本效益優(yōu)勢會逐步顯現(xiàn)

    • 性能比較低:使用純面向對象的方式進行領域驅動設計的程序,其系統(tǒng)開銷通常要比面向過程設計的程序高,從而性能相對較低(關于具體的例子,后續(xù)的博文會提及)。

     

    那么,假設我們在時間、團隊能力及各種資源都允許的情況下,是否就可以麻木的全盤使用領域驅動設計呢?正如本博文的標題一樣,答案是否定的,我們需要有選擇性的使用。讓我們來看看一些指導性原則:

     

    • 使用領域驅動設計,并不代表整個系統(tǒng)的方方面面都必須遵從領域驅動設計的原則,需要根據實際情況,讓適合的部分使用領域驅動設計,讓不適合的部分使用面向過程的設計。


    • 對于那些業(yè)務規(guī)則非常簡單,通常只有增、刪、改、查的簡單操作,而且也不大可能發(fā)生大規(guī)模需求變更的模塊,可以讓業(yè)務實體成為一個“貧血模型”,例如一些基礎數(shù)據:系統(tǒng)參數(shù)、商品類型、國家、地址信息(注:對于這點,本人持保留態(tài)度,因為這些業(yè)務雖然非常簡單,但既然選擇了領取驅動設計,即使把這些業(yè)務實體設計為“充血模型”,即把極其簡單的業(yè)務邏輯也封裝在業(yè)務實體中,也并不比使用“貧血模型”成本高,而它卻帶來了統(tǒng)一設計風格的好處)。


    • 對于查詢操作,特別是復雜的查詢操作,出于性能的考慮,可以用結構化查詢邏輯一次性完成,并把這些邏輯封裝在Repository(即技術上的DAO)中(這方面的具體例子,后面關于“查詢通道”和“領域對象倉庫”的博文會更具體的闡述)。我們可以看到,對于一些業(yè)務視圖,以及報表模塊,很明顯不適合使用面向對象的方式設計,因為這些“視圖”和“報表”,本質上就不是業(yè)務實體。


    • 同樣出于性能的考慮,在業(yè)務實體的實現(xiàn)邏輯中,某些操作不適合過度偏執(zhí)的使用面向對象方式。例如,在“訂單”的“新增訂單明細”(order.addOrderItem(orderItem))中,如果業(yè)務邏輯規(guī)定一張訂單中包含優(yōu)惠商品的明細數(shù)目不能超過20條,使用面向對象的方式,就需要把訂單中的所有訂單明細全部加載,然后逐個明細判斷其對應的商品是否優(yōu)惠商品,再統(tǒng)計出優(yōu)惠商品的數(shù)目,這樣很明顯是低效率和高開銷的,這里只需要使用Repository提供的一個統(tǒng)計方法,用一個結構化查詢邏輯返回統(tǒng)計結果即可,而這就是非面向對象的方式。


    本博文給有志于領域驅動設計的讀者潑了一下冷水,提出一些“反模式”(Bitter),是為了讓讀者冷靜一下,在領域驅動設計過程中作出更靈活和更合理的選擇。關于這方面的論述,筆者在這里淺嘗則止,限于水平、經驗和表達能力,不敢胡亂賣弄,建議讀者可以參考閱讀Martin Fowler的《Patterns of Enterprise Application Architecture》一書的相關觀點。

    posted @ 2010-06-26 17:47 Johnny.Liang 閱讀(4103) | 評論 (2)編輯 收藏

    主站蜘蛛池模板: 亚洲色大成网站www永久男同| 久久丫精品国产亚洲av不卡| 亚洲男同gay片| 成人女人A级毛片免费软件| 九一在线完整视频免费观看| 四虎www免费人成| 精品亚洲av无码一区二区柚蜜| 最好免费观看韩国+日本 | 久久久久高潮毛片免费全部播放| 亚洲AV综合色一区二区三区| 日韩免费视频一区二区| 亚洲黄色免费在线观看| 日日麻批免费40分钟日本的| 精品亚洲456在线播放| 麻豆国产精品入口免费观看| 亚洲丶国产丶欧美一区二区三区| 国产一区二区视频免费| 一级日本高清视频免费观看 | 亚洲福利中文字幕在线网址| 国产成人高清精品免费观看| 久久精品亚洲视频| 国产啪精品视频网免费| 色偷偷亚洲第一综合网| 国产亚洲精品美女久久久 | 亚洲精品GV天堂无码男同| 亚洲成年看片在线观看| 国产情侣久久久久aⅴ免费| 亚洲精品影院久久久久久| 国产高清在线免费视频| 国产一级婬片A视频免费观看| 亚洲综合久久1区2区3区| 日韩成人在线免费视频| 中文字幕免费视频精品一| 91亚洲国产成人久久精品网址| 国产亚洲精品免费| 99视频免费观看| 国产亚洲精品仙踪林在线播放| 久久精品亚洲综合| 香蕉视频在线观看免费国产婷婷| 中文字幕无线码免费人妻| 亚洲一区二区三区亚瑟|