What's the difference between "Layers" and "Tiers"?
What's the difference between "Layers" and "Tiers"?
Logical layers are merely a way of organizing your code. Typical layers include Presentation, Business and Data – the same as the traditional 3-tier model. But when we’re talking about layers, we’re only talking about logical organization of code. In no way is it implied that these layers might run on different computers or in different processes on a single computer or even in a single process on a single computer. All we are doing is discussing a way of organizing a code into a set of layers defined by specific function.
Physical tiers however, are only about where the code runs. Specifically, tiers are places where layers are deployed and where layers run. In other words, tiers are the physical deployment of layers.
Source: Rockford Lhotka, Should all apps be n-tier?
Read Scott Hanselman's post on the issue: A reminder on "Three/Multi Tier/Layer Architecture/Design":
Remember though, that in "Scott World" (which is hopefully your world also :) ) a "Tier" is a unit of deployment, while a "Layer" is a logical separation of responsibility within code. You may say you have a "3-tier" system, but be running it on one laptop. You may say your have a "3-layer" system, but have only ASP.NET pages that talk to a database. There's power in precision, friends.
I've found a definition that says that Layers are a logical separation and tiers are a physical separation.
I use layers to describe the architect or technology stack within a component of my solutions. I use tiers to logically group those components typically when network or interprocess communication is involved.
Technically a Tier can be a kind of minimum environment required for the code to run.
E.g. hypothetically a 3-tier app can be running on
1 physical machine with 3 virtual machines with no OS.
(That was a 3-(hardware)tier app)
1 physical machine with 3 virtual machines with 3 different/same OSes
(That was a 3-(OS)tier app)
1 physical machine with 1 virtual machine with 1 OS but 3 AppServers
(That was a 3-(AppServer)tier app)
1 physical machine with 1 virtual machine with 1 OS with 1 AppServer but 3 DBMS
(That was a 3-(DBMS)tier app)
1 physical machine with 1 virtual machine with 1 OS with 1 AppServers and 1 DBMS but 3 Excel workbooks.
(That was a 3-(AppServer)tier app)
Excel workbook is the minimum required environment for VBA code to run.
Those 3 workbooks can sit on a single physical computer or multiple.
I have noticed that in practice people mean "OS Tier" when they say "Tier" in the app description context.
That is if an app runs on 3 separate OS then its a 3-Tier app.
So a pedantically correct way describing an app would be
"1-to-3-Tier capable, running on 2 Tiers" app.
:)
Layers are just types of code in respect to the functional separation of duties withing the app (e.g. Presentation, Data , Security etc.)
When you talk about presentation, service, data, network layer, you are talking about layers. When you "deploy them separately", you talk about tiers.
Tiers is all about deployment. Take it this way: We have an application which has a frontend created in Angular, it has a backend as MongoDB and a middle layer which interacts between the frontend and the backend. So, when this frontend application, database application, and the middle layer is all deployed separately, we say it's a 3 tier application.
Benefit: If we need to scale our backend in the future, we only need to scale the backend independently and there's no need to scale up the frontend.