通用的N-Tier模型合理么?
??????? 現(xiàn)在的通用N-Tier模型很合理了么? N-Tier的目的是什么?不就是為了清晰么?現(xiàn)在的N-Tier都有很理論化的色彩,在實際的應用中,往往為了保持那點清晰性,不得不讓人破口大罵。
????????尤其是一個有著多個子系統(tǒng)的復雜系統(tǒng)里,如果有兩個或多個子系統(tǒng)處理的數(shù)據(jù)之中,還有暗昧難明的關(guān)系,這個復雜度不但不會被現(xiàn)在的N-Tier模型所簡化,相反還用了另一種復雜來替換當前的復雜,而且還是一種讓人思維極度混亂的復雜。
????????橫著切出來,看起來似乎隔離得不錯,但實際上,在UI層需要驅(qū)動某個元素時,進行反向作用時,這個就顯得捉襟見肘。
??????? 在通常的三層結(jié)構(gòu)模型中,控制中心并不在UI上,而是在邏輯層上,這意味著,需要通常驅(qū)動的中心就在邏輯層上,邏輯層由于是一種類似于“后臺”的模式進行運作,在對用戶交互性較強的開發(fā)中,顯得力不從心。
?????? 按感覺比較舒服的方式應當是:邏輯界對UI發(fā)出指令,你給我變變,然后UI界才發(fā)生變化,對數(shù)據(jù)訪問層說,我要xxxx,數(shù)據(jù)數(shù)據(jù)訪問層給出數(shù)據(jù),邏輯控制層再進行處理。如果用戶發(fā)生交互,則由UI層返回處理要求,邏輯層進行處理,然后再反饋要求,此時,邏輯層再次陷入被動,實際上,這并不是一個比較漂亮的模型,不過,一般三層系統(tǒng)針對中小型系統(tǒng)及少部分偏大一些系統(tǒng)來說,是完全足夠的,因為其中邏輯層顯得模糊的部分可以忽略掉,維護起來只會增加一點點麻煩而已。
??????? 至于更多N層結(jié)構(gòu),矛盾更明顯,像微軟的Duwamish所演示的架構(gòu),簡直就是一發(fā)而動全身,如需要改動一個地方,馬上就開始雪崩,許多層次都會被牽著走。例如,界面上加了一個需要顯示的字段,呵呵,哭吧。
??????? 分層必要嗎?有必要。但分層的方式都對嗎?不一定。個人認為,無論任何系統(tǒng),在分層的情況下,還必須需要一個處理中心,自上而下貫穿所有的層次,這個處理中心不需要專門用于與各層進行直接打交道,了,也就是說,它是一個可以讓各個層次可以自由穿梭往來的通道。它本身相當于一個外觀模式,但這個外觀模式與通常的設(shè)計模式又有所不同的是:它是作為一個靈魂實體實在,它需要暴露任何細節(jié)。
?????? ?初看起來,此處理中心嚴重違反了數(shù)據(jù)封裝特性,其實不然,任何系統(tǒng)都需要一個相對緊密的交互核心,該核心原則只有一個:清晰。需要任何層次都可以直接通過它來進行交互,這樣就可以把多層系統(tǒng)的開發(fā)簡化,任何一層系統(tǒng)需要進行與其它層次打交道時,都僅僅需要考慮與一個目標進行打交道。
??????? 這個中心需要處理成為多面體的形態(tài),然后把各個層次進行粘貼在上面,這樣的系統(tǒng),就可以解決大部分問題。
?????? 最早的三層結(jié)構(gòu),實際上就是通過邏輯層來粘合其它層次,但在N層結(jié)構(gòu)中,則恰好讓一切變得更加混亂了。
?????? 系統(tǒng)的層次,要以多面體的觀察角度去思考,而不是一個平面,例如:兩層系統(tǒng)中,實際上就是兩個面,三層系統(tǒng)中,實際上就是三個面,這都不是問題,但是,如果你一旦要處理成為四層或更多的層次,就不能不采用立體模型來進行考慮。
?????? 處理中心設(shè)計的關(guān)鍵在于,對其它的任何層次都是再次外部包裝,它本身唯一需要提供的就是層次間交互所需要的內(nèi)容,也就是一個具有代理性質(zhì)的中轉(zhuǎn)點,該中轉(zhuǎn)點不應當對于任何其它層次產(chǎn)生了依賴關(guān)系的類有哪怕是一點點的關(guān)系。
?????? 對于一個有多個子系統(tǒng)的系統(tǒng)來說也是這樣,它仍然需要一個中心系統(tǒng),其它系統(tǒng)僅與中心系統(tǒng)打交道,并可以從中心系統(tǒng)獲取任何所能允許的其它系統(tǒng)的數(shù)據(jù)或資料。
?????? 基于立體模型的處理,可以有效地避免各個層面發(fā)生大面積相交的情況,可以把各層間的交互濃縮至最小,只要能夠保證相交點穩(wěn)牢性,就可以使得各個層次在維護起來各不相干,當然,這可能會更麻煩一些,但是,這可以最大限度的保證連鎖效應的降低。
?????? ?另外,在開發(fā)時,應當預留一個類似于"其它"的層次用于堆放垃圾也是一個好主意,比如一些,在使用各個層次突然發(fā)生困難時,但卻有直觀的操作方式時,可以把該代碼往垃圾層里丟。
??????? 這層的最大意義并非是對于系統(tǒng)構(gòu)建有什么直接的意義,它的意思關(guān)鍵在于:需要再次重構(gòu)。
??????? 這可以保證開發(fā)時,在充分前沖的情況下,盡量把看似還不合理的代碼都放在一起,盡管會越堆越臭,但總比垃圾散布在各個層次要好得多。因為它們可以在你有空的時候進行集中處理。
???????? 需要注意的是,重構(gòu)并不萬能,所以該層次不是萬能的,使用這個層需要在非常不明確的概念前提下才能夠往里面放代碼,這個層中的代碼本身也應該是雜亂的,但它卻是很有用的。
總結(jié)
以上是生活随笔為你收集整理的通用的N-Tier模型合理么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform 的一个多线程绑定Data
- 下一篇: OJ1036: 某年某月有多少天