2009-01-18 174 views
16

我只是碰到下面的句子來了:差異之間的三個

隨着行業已經從三個 層次模式搬到n層模型,對象關係型阻抗失配已成爲更普遍。

但我無法找到三層和n層之間區別的簡明解釋。我知道三層是什麼,我假設n層只增加一層或多層。我只是不確定這些額外的層次是什麼。如果任何人有一個簡短的解釋或簡單的一個很好的鏈接,這將不勝感激。

回答

9

該報價看起來是從這codeproject頁面。它也似乎做了很好的解釋n層來包含諸如Web服務,JavaScript,工作流等等的東西。所有這些3層模型都不一定包含。

0

沒有看到上下文中的句子,我認爲它指的是服務和中間件的爆炸式增長。

1

這是從哪裏來的?他們指的是什麼行業?我不得不想象這與SOA有關,因爲這是唯一對此類聲明有意義的事情。

大多數聽過這種說法的人都認爲,在面向服務的領域,每種服務都是某種程度上的自己的層次。我不同意,因爲大多數時候,這些不同的服務無論如何可以在邏輯上分成共同的三層(表示,邏輯和數據)。但是,它的一切都非常主觀。

3

嘿我甚至不能得到3層的定義。有時候,他們會在客戶端上打折JavaScript,有時客戶端和客戶端Web瀏覽器上的JavaScript被視爲另一層。因此,如果您假定數據庫=第3層,Web服務器=第2層,客戶端Web瀏覽器=第1層,則與數據庫交談的ASP頁可以是3層。而其他時間Web服務器=第1層,中間件=第2層,數據庫=第三層。這真的取決於誰在寫定義/書。

一般而言,n層似乎指的是更多地分裂中間件層。但除此之外,我沒有看到一致的定義。

7

n層意味着n是任何數字 - 當n = 3時,它與n層相同。

3層的通常定義是演示文稿,邏輯&數據(以任何次序),是的,SOA可以混淆新手因爲有時它位於數據層,有時邏輯層,有時兩個邏輯&數據層。

整個主題是......主觀的。如果你需要一些層,那麼稱它爲n層 - 如果你知道n = 7,那麼稱它爲7層或n層。

25

在開發中,我們將層級理解爲「責任級別」抽象。

這種責任級別將概念分組在一起,以提供對現實的連貫的語義視圖,或者至少類似於現實。

在這種意義上,所謂的3層模型或n層模型只是這些概念的不同實現。

一個層級的一個很好的例子就是遵循這樣一個審慎模式,在這個模型中,責任被仔細地解決給適當的人。例如,一個共同的企業有商業,市場,系統,開發和測試部門(例如),代表業務層。那樣的話,責任是明確的,開發提供了產品,測試測試,營銷推廣和商業推銷,所有這些都是系統保持基礎架構運行的過程(僅僅是一個例子)。

這個比喻是第一次接近3層模型,其中三層標識。通常這層是數據庫抽象層,這是負責通信和抽象了數據庫,業務規則層,其中認爲描述業務流程和用戶界面層其抽象用戶的交互規則與系統。

這樣,我們就爲每個層的責任分配角色,這樣,如果用戶需要與系統交互,他將與一個層進行通信,而不是混淆洞系統。

N層通過使用更多層來解決特定需求,代表了前一概念的演變。通常用戶界面層和數據庫抽象層保持不變,因爲他們的角色非常清晰,而業務規則層進一步細化。

爲此,我們始終考慮到問題的特點以及我們現在和將來提供的功能。例如,如果某個應用程序需要與智能客戶端一起工作,或者需要與智能客戶端一起工作,那麼業務層通常會分爲代理層和後端層,第一層應該將應用程序路由到他們應該去的地方。

最後,重要的是在不同層次抽象責任的概念,並從同一地方的語義視圖集中所有相關的操作。

請注意,此外,n層架構允許在開發人員之間分配這些「責任」。這樣,給定的團隊可以對數據庫抽象層負責,而其他團隊則在代理層上工作,而另一個團隊則在圖形抽象層上工作。當一個團隊的成員需要訪問數據庫時,他查閱DAL文檔並使用提供的其中一個工具,或要求DAL團隊提供他需要的功能,以便他不直接尋址數據庫,但通過那些更好地瞭解數據庫本身的設計和錯綜複雜的人們。

+0

一個小小的更正:可以通過多個「圖層」實現責任級別。但是,當這些層被部署在不同的進程中(在不同的物理機器中)時,它被稱爲一個層。因此,一個層次的重要要求是它應該可以部署並作爲一個單獨的過程進行部署。 – 2013-07-03 23:10:08

11

如果我們把層看成蛋糕層,每層都會有它自己的成分,並做它自己的事情。每個應用程序的層只與其上層或下層交互。

3層意味着蛋糕有3層。通常它的底部是數據,然後是應用程序邏輯層(PHP/ruby​​/etc),然後是頂部的表示層(html)

具有n層體系結構意味着您要爲其設計多層圖層。您擁有的圖層數量取決於您決定如何製作它。

對於大型或Web應用程序來說,它似乎更有意義。

我通常會得到一個5層應用程序。每一層只能與其上面或下面的層進行交互。這可以在整個應用程序中提供出色的可擴展性和標準化。

客戶層

Web瀏覽器


表示層

渲染HTML - ColdFusion的/閃光燈/紅寶石/ PHP等。


業務邏輯層

運行的過程和計算需要 - ColdFusion的/閃光燈/紅寶石/ PHP等。


數據集成層

(從我的開發語言查詢,存儲過程等)


數據層

(數據庫 - MySQL等)