• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-15  評(píng)論-5  文章-0  trackbacks-0
            使用多層架構(gòu)進(jìn)行系統(tǒng)開(kāi)發(fā)是現(xiàn)今系統(tǒng)設(shè)計(jì)的流行趨勢(shì)。通過(guò)分解業(yè)務(wù)細(xì)節(jié),將不同的功能代碼分散開(kāi)來(lái),更利于系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā),同時(shí)為可能的變更提供了更小的單元。

            以下就是一個(gè)典型的多層體系結(jié)構(gòu)圖。

            uploads/200607/24_142206_mt.png


            首先我們以“訂單(Order)”為例,進(jìn)行一個(gè)簡(jiǎn)單的業(yè)務(wù)分解。

            1. 訂單自然包括訂單的內(nèi)容(OrderInfo),其中有諸如訂單編號(hào)、商品名稱、數(shù)量,以及金額等信息。
            2. 有了訂單信息,我們還需要一個(gè)存儲(chǔ)訂單的場(chǎng)所,那么自然需要有個(gè)操作讀寫的對(duì)象(OrderAccess)。
            3. 為了外界能進(jìn)行相關(guān)的訂單操作,我們還需要有個(gè)業(yè)務(wù)邏輯對(duì)象(Order),它提供創(chuàng)建新訂單,向訂單插入/刪除商品,保存訂單等操作。

            通過(guò)上面的分析,我們基本上可以將一個(gè)業(yè)務(wù)邏輯完整地分割為:

            業(yè)務(wù)實(shí)體 ---> OrderInfo
            數(shù)據(jù)訪問(wèn) ---> OrderAccess
            業(yè)務(wù)邏輯 ---> Order

            基于系統(tǒng)架構(gòu)考慮,我們將這些對(duì)象分別放置在不同的邏輯單元中,這些邏輯單元就組成了“多層”。

            業(yè)務(wù)實(shí)體層(Model) ---> 業(yè)務(wù)實(shí)體 ---> OrderInfo
            數(shù)據(jù)訪問(wèn)層(DAL) ---> 數(shù)據(jù)訪問(wèn) ---> OrderAccess
            業(yè)務(wù)邏輯層(BLL) ---> 業(yè)務(wù)邏輯 ---> Order

            同樣以上面訂單為例,我們進(jìn)一步講述各層對(duì)象的實(shí)現(xiàn)細(xì)節(jié)。

            1. 客戶基本上只依賴于 Order 和 OrderInfo,通過(guò)他們就可以操作業(yè)務(wù)的全部,它并不關(guān)心業(yè)務(wù)存儲(chǔ)等細(xì)節(jié)。

            2. 大多數(shù)時(shí)候我們會(huì)將 OrderAccess 設(shè)計(jì)成 Internal Protected 方式,OrderAccess 可以是一個(gè)抽象類或者接口。我更習(xí)慣于將其實(shí)現(xiàn)為抽象類,因?yàn)槟承┓椒ㄊ钦{(diào)用其他方法來(lái)實(shí)現(xiàn)的,抽象類的設(shè)計(jì)可以減少實(shí)現(xiàn)類的代碼數(shù)量。另外將該抽象類設(shè)計(jì)成工廠方法模式,通過(guò) IoC 或者 "配置反射" 來(lái)獲得具體的實(shí)現(xiàn)類,可以減少層之間的耦合,也便于數(shù)據(jù)系統(tǒng)的替換。

            3. Order 多數(shù)時(shí)候可以實(shí)現(xiàn)為 Singleton 或者靜態(tài)類,它只是提供了一系列的方法來(lái)操作某些邏輯,通過(guò)接受 OrderInfo 參數(shù)來(lái)獲取信息。其本身無(wú)需保存任何狀態(tài)。如果需要實(shí)現(xiàn)購(gòu)物車,只需將 OrderInfo 存儲(chǔ)到 Session 之中即可。

            通過(guò)上面的例子,我們還可以發(fā)現(xiàn)多層的另外一個(gè)好處就是更利于團(tuán)隊(duì)協(xié)作開(kāi)發(fā)。架構(gòu)設(shè)計(jì)人員無(wú)需考慮具體的數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼,而將設(shè)計(jì)重點(diǎn)放在業(yè)務(wù)層面;數(shù)據(jù)庫(kù)開(kāi)發(fā)人員自然也可將重心放在數(shù)據(jù)庫(kù)訪問(wèn)優(yōu)化上。團(tuán)隊(duì)成員之間不再是一人負(fù)責(zé)一個(gè)業(yè)務(wù)模塊,不再有了 n 個(gè)數(shù)據(jù)訪問(wèn)類,不再有 n 種不同的對(duì)象模式等等。從傳統(tǒng)的 "瓦罐作坊" 演變?yōu)?"工業(yè)流水線",更利于根據(jù)技術(shù)能力和業(yè)務(wù)熟悉度的差別來(lái)劃分不同的角色。
            posted on 2008-04-17 17:13 學(xué)習(xí)才能進(jìn)步 閱讀(222) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 收集
            久久精品亚洲日本波多野结衣| 久久精品aⅴ无码中文字字幕重口| 久久99精品国产99久久6| 久久精品国产一区二区三区| 怡红院日本一道日本久久| 久久久久久国产精品美女| 久久久高清免费视频| 国产亚洲综合久久系列| 国产福利电影一区二区三区久久老子无码午夜伦不 | 99久久精品国产麻豆| 久久久精品视频免费观看| 亚洲色大成网站WWW久久九九| 精品久久久久久久久中文字幕| 久久激情亚洲精品无码?V| 少妇精品久久久一区二区三区| 久久综合中文字幕| 狠狠88综合久久久久综合网| 人人狠狠综合88综合久久| 久久国产精品一区二区| 蜜臀久久99精品久久久久久小说 | 国产成人综合久久精品红| 99久久精品免费观看国产| 久久综合香蕉国产蜜臀AV| 亚洲精品国产综合久久一线| 伊人丁香狠狠色综合久久| 久久综合九色综合网站| 亚洲国产精品无码久久久蜜芽| 一级做a爰片久久毛片毛片| 久久国产乱子伦精品免费午夜| 97久久超碰国产精品2021| 久久综合亚洲欧美成人| 久久婷婷五月综合97色| 热re99久久6国产精品免费| A级毛片无码久久精品免费 | 精品久久久久久99人妻| 精品国产综合区久久久久久| 99精品久久久久久久婷婷| 久久婷婷久久一区二区三区| 青青草原1769久久免费播放| 99久久婷婷国产一区二区| 久久男人AV资源网站|