☆藍(lán)色夢(mèng)想☆

          世界總是反反覆覆錯(cuò)錯(cuò)落落地飄去 來不及嘆息 生活不是平平淡淡從從容容的東西 不能放棄
          posts - 57, comments - 5, trackbacks - 0, articles - 0
          什么是架構(gòu)
          • Rolph Johnson認(rèn)為:架構(gòu)是一種主觀上的東西,是專家級(jí)的項(xiàng)目開發(fā)人員對(duì)系統(tǒng)設(shè)計(jì)的一些可共享的理解
          • 架構(gòu)中包括一些決定,開發(fā)者希望這些決定能盡早作出,因?yàn)樵陂_發(fā)者看來它們是難以改變的。
          •  如果你發(fā)現(xiàn)某些決定不像你想象中的那么難以改變,那么它就不再與架構(gòu)相關(guān)
          • 理解: B/S (SmartClient、C/S) 架構(gòu), DotNet 架構(gòu), J2EE架構(gòu)

          企業(yè)應(yīng)用的特點(diǎn)

          1. 涉及到持久化數(shù)據(jù)
          2. 很多人同時(shí)訪問數(shù)據(jù)
          3. 含有大量操作數(shù)據(jù)的用戶界面
          4. 與散布在企業(yè)內(nèi)部或周圍的其他的應(yīng)用集成
          5. 各種異構(gòu)系統(tǒng)的概念含有不一致性
          6. 業(yè)務(wù)邏輯通常是最沒有邏輯的東西
          7. 企業(yè)應(yīng)用并非都是大型的,但可能都為企業(yè)提供巨大的價(jià)值

            · 性能:多時(shí)候,增加更多的服務(wù)器比增加更多的程序員便宜;如果增加服務(wù)器對(duì)性能的提升較大,則說明應(yīng)用的伸縮性好 

          · 分層:上層是用下層定義的各種服務(wù),而下層對(duì)上層一無所知;分層的缺陷是不能封裝所有的東西,因此可能帶來級(jí)聯(lián)更改,過多的曾影響性能;LayerTier的區(qū)別是Tier可能更多的意味物理上的分離      

          Brown分層模型

          表現(xiàn)層>>控制層>>領(lǐng)域?qū)?/span>>>數(shù)據(jù)映射層>>數(shù)據(jù)源層  

          Core J2EE分層模型

          客戶層>>表現(xiàn)層>>業(yè)務(wù)層>>集成層>>資源層 

          MS DNA分層模型

          表現(xiàn)層>>業(yè)務(wù)邏輯層>>數(shù)據(jù)訪問層 

          Marinescu分層模型

          表現(xiàn)層>>應(yīng)用層>>服務(wù)層>>領(lǐng)域?qū)?/span>>>持久層


          · 領(lǐng)域模型:使用不同職責(zé)的對(duì)象來聯(lián)合解決業(yè)務(wù)問題,而不是通過事務(wù)腳本來處理數(shù)據(jù) 

          · 阻抗不匹配:對(duì)象模型和關(guān)系型數(shù)據(jù)庫(kù)之間的不匹配,通常通過對(duì)象-關(guān)系映射(ORM)解決 

          · 軟件事務(wù)的四個(gè)特性 

          1.      原子性:要么全部成功,要么全部會(huì)滾

          2.      一致性:事務(wù)開始和完成時(shí),資源都不應(yīng)該被破壞

          3.      隔離性:事務(wù)成功完成之前,其影響不應(yīng)該被看到

          4.      持久性:事務(wù)不會(huì)因?yàn)槿魏伪罎⒍鴣G失更改 

          · 事務(wù)的隔離級(jí)別(由高而低)

          1.      可串行化:完全隔離,并發(fā)執(zhí)行的結(jié)果與以某種順序依次執(zhí)行的結(jié)果相同

          2.      可重復(fù)讀:允許幻讀,更新者向集合中插入了一些元素而讀的人只能看到其中一部分

          3.      讀已提交:允許不可重復(fù)讀,所有已經(jīng)提交的數(shù)據(jù)都可以讀

          4.      讀未提交:允許臟讀,允許讀未提交的數(shù)據(jù) 

          · 會(huì)話狀態(tài):無狀態(tài)對(duì)象是一種不良設(shè)計(jì);用無狀態(tài)的服務(wù)器可以實(shí)現(xiàn)有狀態(tài)的會(huì)話;如果有很多會(huì)話空閑,可以考慮用數(shù)據(jù)庫(kù)存儲(chǔ)會(huì)話;如果需要頻繁訪問會(huì)話,則應(yīng)該使用服務(wù)器會(huì)話 

          · 分布策略:分布對(duì)象的第一定律:不要使用分布對(duì)象;分布對(duì)象的第二定律:節(jié)約使用分布對(duì)象

          領(lǐng)域邏輯模式分為 事物腳本、領(lǐng)域模型、表模塊和服務(wù)層四種模式

            很多設(shè)計(jì)者喜歡把業(yè)務(wù)邏輯分成兩類:領(lǐng)域邏輯和應(yīng)用邏輯,前者只與問題領(lǐng)域有關(guān)、而后者有時(shí)被稱為工作流邏輯

          1. 事物腳本

            通過使用SQL語句或者存儲(chǔ)過程返回記錄集,記錄集在系統(tǒng)的各層之間傳遞,在必要的時(shí)候可以通過更新記錄集、使用SQL語句或者存儲(chǔ)過程的方式更新數(shù)據(jù)庫(kù)
            事物腳本勝在簡(jiǎn)單,通常應(yīng)用在小型的項(xiàng)目和系統(tǒng)中,但業(yè)務(wù)邏輯越來越復(fù)雜,使用這一模式就越來越難以保持良好設(shè)計(jì),因?yàn)樵诔绦蚶锩娉涑饬舜罅康腟QL語句和命令,一旦數(shù)據(jù)結(jié)構(gòu)發(fā)生更改或者需要對(duì)系統(tǒng)進(jìn)行修改,可能會(huì)出現(xiàn)許多難以發(fā)現(xiàn)的問題

          2. 領(lǐng)域模型

            領(lǐng)域模型是合并了行為和數(shù)據(jù)的領(lǐng)域的對(duì)象模型,領(lǐng)域模型創(chuàng)建了一張由互聯(lián)對(duì)象組成的網(wǎng),其中的每個(gè)對(duì)象都代表著某個(gè)有意義的個(gè)體,可能大到一個(gè)公司或者小到訂單的一行

            簡(jiǎn)單領(lǐng)域可以使用活動(dòng)記錄,即簡(jiǎn)單的單條數(shù)據(jù)記錄和單個(gè)對(duì)象對(duì)應(yīng)的模式,一個(gè)對(duì)象對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一個(gè)表

            復(fù)雜領(lǐng)域模型需要使用數(shù)據(jù)映射器,它可能使用繼承、策略或者其他的設(shè)計(jì)模式,是一張由互聯(lián)的細(xì)粒度對(duì)象組成的復(fù)雜網(wǎng)絡(luò),我們經(jīng)常會(huì)看到:多個(gè)類通過交互來完成很簡(jiǎn)單的任務(wù)

            在面向?qū)ο蠹夹g(shù)中,通過從一個(gè)對(duì)象到另一個(gè)對(duì)象的連續(xù)傳遞可以把行為傳遞給最有資格處理的對(duì)象,它同時(shí)消除了很多條件判斷行為

          領(lǐng)域模型的要點(diǎn)在于隱藏?cái)?shù)據(jù)庫(kù)的存在

          3. 表模塊

            表模塊是處理某一數(shù)據(jù)庫(kù)表或視圖中所有行的業(yè)務(wù)邏輯的一個(gè)實(shí)例

            表模塊通過強(qiáng)類型或弱類型的數(shù)據(jù)集與對(duì)象結(jié)合使用,使用主鍵查詢數(shù)據(jù),是.Net中使用的很多的一種模式,主要使用主鍵、半對(duì)象化的操作數(shù)據(jù)---之所以說是半結(jié)構(gòu)化,是因?yàn)樗玫膶?duì)象基本上只具有行為,通過傳入?yún)?shù)執(zhí)行特定的操作或者查詢記錄集,而幾乎不承載任何數(shù)據(jù)

            在.net中,這種模式因?yàn)槠淙菀缀蚒I進(jìn)行綁定和交互,所以倍受歡迎


          4. 服務(wù)層

            通過一個(gè)服務(wù)層來定義應(yīng)用程序邊界,在服務(wù)層中建立一組可用的操作的集合,并在每個(gè)操作內(nèi)部協(xié)調(diào)應(yīng)用程序的響應(yīng)

            服務(wù)層是一種組織業(yè)務(wù)邏輯的模式,有點(diǎn)類似于業(yè)務(wù)外觀;WEB SERVICE通常擔(dān)任著服務(wù)層的角色

            服務(wù)層可以通過領(lǐng)域外觀方法和操作腳本方法實(shí)現(xiàn),領(lǐng)域外觀方法中,服務(wù)層以領(lǐng)域模型之上的瘦外觀集合方式出現(xiàn),負(fù)責(zé)實(shí)現(xiàn)外觀的類中不不包含業(yè)務(wù)邏輯;而在操作腳本方法中 ,服務(wù)層由一組相對(duì)復(fù)雜的類組成,這些類直接實(shí)現(xiàn)應(yīng)用邏輯,但將領(lǐng)域邏輯委托給封裝好的領(lǐng)域?qū)ο箢?/p>

             服務(wù)層的類的接口是粗粒度的,適合于遠(yuǎn)程調(diào)用。但是,在開始時(shí),我們應(yīng)該僅設(shè)計(jì)一個(gè)本地調(diào)用的服務(wù)層,在需要遠(yuǎn)程調(diào)用時(shí),再在服務(wù)層上增加一個(gè)遠(yuǎn)程外觀。


          并發(fā)管理的正確目標(biāo)是盡量增加對(duì)數(shù)據(jù)的正確訪問,同時(shí)減少?zèng)_突
            離線并發(fā)模式有兩種:使用樂觀離線鎖、使用悲觀離線鎖

            離線鎖可以理解為一種非服務(wù)器管理的鎖,或者說是自管理的鎖,應(yīng)用在適當(dāng)?shù)牡胤阶?cè)鎖,獲取數(shù)據(jù),然后離線,并對(duì)數(shù)據(jù)進(jìn)行離線的操作;其他的應(yīng)用通過檢測(cè)已經(jīng)注冊(cè)的鎖來決定是否進(jìn)行并發(fā)操作

          1. 悲觀離線鎖


             悲觀離線鎖假設(shè)會(huì)話沖突的可能性很大,從而對(duì)系統(tǒng)的并發(fā)進(jìn)性進(jìn)行限制
             在對(duì)不一致讀的要求不高時(shí),第一選擇是使用獨(dú)占寫鎖(不可以再添加任何讀鎖,當(dāng)然寫鎖也不能);如必須讀出最新數(shù)據(jù),而不在乎是否要修改,則應(yīng)使用獨(dú)占讀鎖(不可以再添加任何寫鎖,但讀鎖是允許的)。結(jié)合以上兩種,提供互斥讀鎖的限制,又有互斥寫鎖的并發(fā)性的鎖稱為 讀/寫鎖---讀/寫鎖互斥不能同時(shí)加,但并發(fā)的讀鎖是允許的
             構(gòu)建悲觀離線鎖的步驟:決定使用哪種鎖>>構(gòu)建一個(gè)鎖管理對(duì)象>>定義業(yè)務(wù)事務(wù)使用鎖的過程
             讓鎖管理對(duì)象在鎖不可用時(shí)拋出異常而不是等待鎖釋放,可以免除死鎖
             悲觀離線鎖作為樂觀離線鎖的補(bǔ)充,只在真正需要的時(shí)候才應(yīng)該使用 


          2. 樂觀離線鎖

             樂觀離線鎖假設(shè)會(huì)話沖突的可能性很小,從而使得多用戶對(duì)一份數(shù)據(jù)進(jìn)行處理成為可能
            通過沖突檢測(cè)和事務(wù)會(huì)滾來防止并發(fā)事務(wù)中的沖突
            本質(zhì)就是通過將會(huì)話中的版本號(hào)與當(dāng)前記錄數(shù)據(jù)的版本號(hào)相比較,事務(wù)成功提交以后版本號(hào)增加;或者在更新的SQL語句中包含對(duì)所有字段的檢查,可以不需要為數(shù)據(jù)庫(kù)增加版本字段,但可能導(dǎo)致性能損失
            樂觀離線鎖必須自定檢查以防止不一致讀
            一個(gè)高效的合并策略能使樂觀離線鎖變得非常強(qiáng)大,當(dāng)沖突發(fā)生時(shí),合并策略可以合并更改并重新提交

          Feedback

          # re: 《企業(yè)應(yīng)用架構(gòu)模式》(POEAA)讀書筆記  回復(fù)  更多評(píng)論   

          2007-10-21 11:24 by h4
          聽君一席話,勝讀十年書,真是高手高手高高手!原來分散的概念在我心中,都聯(lián)起來了。

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 绥滨县| 福清市| 团风县| 乌鲁木齐市| 井陉县| 通化县| 海晏县| 乐山市| 永和县| 贡觉县| 通州区| 新营市| 洪泽县| 济南市| 临邑县| 项城市| 长泰县| 汾西县| 哈尔滨市| 运城市| 延吉市| 西平县| 阿尔山市| 温宿县| 罗定市| 赞皇县| 日土县| 德兴市| 浮山县| 赣州市| 新源县| 勃利县| 礼泉县| 醴陵市| 安塞县| 阿拉尔市| 搜索| 东乡县| 湖南省| 莒南县| 兴安县|