今天在閱讀Martin Fowler的《Patterns of Enterprise Application Architecture》時,終于讓我``澄清"了tier和layer的關(guān)系。 Martin的原話是:
``When people discuss layering, there's often some confusion over the terms layer and tier. Often the two are used as synonyms, but most people see tier as implying a physical separation. Client-server systems are often described as two-tier systems, and the separation is physical: The client is a desktop and the server is a server. I use layer to stress that you don't have to run the layers on different machines. A distinct layer of domain logic often runs on either a desktop or the database server. In this situation you have two nodes but three distinct layers. With a local database I can run all three layers on a single laptop, but there will still be three distinct layers.
我們平時一直說``多層"結(jié)構(gòu),常常混淆著使用tier或者layer這個詞( N-tier或者N-layer一般是摻和著用的),Matin則非常清楚的區(qū)分了這兩個詞的用法: tier更多的是指物理上的層次關(guān)系,比如說Client/Server結(jié)構(gòu),是two-tier的,因為客戶端在桌面機上,服務(wù)器則在遠端的數(shù)據(jù)庫服務(wù)器上。 layer則更多的指邏輯上的層,我們通常說的Java EE,應(yīng)該是N-layer的,因為從邏輯上,Java EE里面有表現(xiàn)層,業(yè)務(wù)邏輯層和數(shù)據(jù)永久層,在物理上,這三層可以在不同的tier上(表現(xiàn)層在PC上,業(yè)務(wù)邏輯層在應(yīng)用服務(wù)器上,數(shù)據(jù)永久層則在數(shù)據(jù)庫服務(wù)器上),也可以在一個tier上,比如Martin說的,如果把數(shù)據(jù)庫,應(yīng)用服務(wù)器和瀏覽器都裝在一臺筆記本電腦上,那么,3-layer就是在1-tier上了。
因此,當(dāng)我們以后談?wù)揓ava EE的多層體系時,應(yīng)該更精確的使用layer這個詞。
【關(guān)于Martin Fowler】
http://en.wikipedia.org/wiki/Martin_Fowler
http://martinfowler.com/