今天在閱讀Martin Fowler的《Patterns of Enterprise Application Architecture》時,終于讓我``澄清"了tier和layer的關系。 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.
我們平時一直說``多層"結構,常常混淆著使用tier或者layer這個詞( N-tier或者N-layer一般是摻和著用的),Matin則非常清楚的區分了這兩個詞的用法: tier更多的是指物理上的層次關系,比如說Client/Server結構,是two-tier的,因為客戶端在桌面機上,服務器則在遠端的數據庫服務器上。 layer則更多的指邏輯上的層,我們通常說的Java EE,應該是N-layer的,因為從邏輯上,Java EE里面有表現層,業務邏輯層和數據永久層,在物理上,這三層可以在不同的tier上(表現層在PC上,業務邏輯層在應用服務器上,數據永久層則在數據庫服務器上),也可以在一個tier上,比如Martin說的,如果把數據庫,應用服務器和瀏覽器都裝在一臺筆記本電腦上,那么,3-layer就是在1-tier上了。
因此,當我們以后談論Java EE的多層體系時,應該更精確的使用layer這個詞。
【關于Martin Fowler】
http://en.wikipedia.org/wiki/Martin_Fowler
http://martinfowler.com/