So far, few replies include the reality that we can’t really ignore the possibility of having new database vendor in future. Well, first it happens really rare to switch from one database vendor to another, and I guess 95%+ ASP.NET applications are using SQL Server as database vendor, which has been changed rarely. Having an upgraded version of SQL Server will not let developer to write a complete new data access layer. Although rare, but if the database vendor get changed to a separate vendor, but having additional Business Logic Layer will not help you not to write a complete new data access layer.
RazanPaul:Make our classes easier to consume by other developers by hiding the ugly inner workings of our classes behind well-designed APIs, Isolate potential changes to a small area of code
If you use good data access utility methods, there is a rare chance that your data access codes get ugly. Also, if you consider pure object oriented development, developers at UI layer don’t really need to see your data access code, but needs to see the structure of those classes.
RazanPaul:the code easier to maintain and read, to reduce duplication in the code.
Few have mentioned, having additional business layer will help to maintain code easily, which is totally fuzzy, having a useless layer will include some additional overhead of maintenance, nothing but this. “reduce duplication” is totally happens when you don’t have an useless business logic layer actually, as generally methods in business logic layer call the corresponding or similar functions of the data access layer.
Lastly, one reply said, having three layers helps to make the application scalable (by deploying into separate physical machines), and well I agree in this point, however that really can be considered when you have that possibility for that much HIGH VOLUME traffic. Furthermore, regarding current availability of high configurations of the servers, having two tiers dedicated to UI and Data Access Layer can easily handle millions of users per day easily and if you need more support for high volume traffic, then that’s special and obvious to have three layer model.
Personally I am in favor of using Three Layer Architecture (or even more, such as Façade Layer, Cache Layer, SOA Layer in addition to UI, BLL, DAL), but ONLY when we need it. Three Layer Architecture has been such a hype/buzz word that most of the developers are using/implementing it without understanding that, if they really need it, and thus violates two primary software development principle: KISS (Keep It Simple and Stupid), as addition useless Business Logic Layer reduces simplicity and YAGNI (You Ain't Gonna NeedIt), as you don’t have any business rule of the corresponding entities and you have the similar interface exist in Data Access Layer.