I asked a question on StackOverflow in November about separating a very large application into layers and tiers: https://stackoverflow.com/questions/13342626/net-divorcing-layers. The previous developer included data logic and business logic in the business logic layer

My question is about the tiers element. I researched on here and concluded that it is better to separate layers into tiers contained in separate DLLs i.e. the presentation layer, business logic layer and data access layer all have separate DLLs as described here: https://stackoverflow.com/questions/13342626/net-divorcing-layers. This seems to be consistent with what I lEarnt at university.

However, since then all the examples I am finding online suggest having two tiers (One for the presentation layer and one tier for the BLL and DAL).

Is there any specific criteria that developers use to decide whether or not to use three tiers?

I am using ADO.NET and have a shared SQL Helper class in the data access layer. The SQLHelper class is similar to this but for VB.NET: http://www.sharpdeveloper.net/source/SqlHelper-Source-Code-cs.html


Is there any specific criteria that developers use to decide whether or not to use three tiers?

Whether or not the software layer must be capable of running on a separate machine. That's the difference between a tier and a layer; a tier is a hardware abstraction.

While the concepts of layer and tier are often used interchangeably, one fairly common point of view is that there is indeed a difference. This view holds that a layer is a logical structuring mechanism for the elements that make up the software solution, while a tier is a physical structuring mechanism for the system infrastructure.


  • Thanks. I have put the data access layer into a separate project. As a result of this a "shared" assembly is also needed. I could reduce the number of assemblies from four to two if I combine the bll and dal. As the DAL and BLL will run on the same machine, your answer suggests that they should be part of the same project and isolated using namespaces? +1. – w0051977 Apr 1 '13 at 19:46
  • My answer suggests that you don't need to make any special provisions for the bll and the dal to run on separate machines. Whether you actually combine the two assemblies is not a decision that is affected by the hardware arrangement, in other words. – Robert Harvey Apr 1 '13 at 19:48
  • Ok, thanks. If the decision us not affected by hardware architecture, then what is it affected by? – w0051977 Apr 1 '13 at 19:51
  • Among other things, whether you need to separate out shared or common functionality into its own library assembly so that it can be used in a different application. – Robert Harvey Apr 1 '13 at 19:53
  • 1
    +1 for simple clarification of a terminology misappropriation many people suffer from. – Jimmy Hoffa Apr 1 '13 at 21:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.