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