Question: We normally use abstract function/Interfaces in our projects. Why it is really needed? Why can't we just go for Business logic Layer, Data Access Layer and Presentation Layer only

**Function in Presentation Layer:**

```
abc();

```

---

**Function in Business Logic Layer:**

```
 public void abc()
    {
      //Preparing the list
    }

```

---

**Function in Data Access Layer:**

```
public abstract void abc();

```

---

**Function in Data Access SQLServer Layer:**

```
 public override void abc()
    {
       //Connection with database
    }

```

---

**Question is: Why is the Data Access Layer required ?**

Answer: 
Why interfaces : 
 Have you ever used **using** in c# :
 using (Form f = new Form())
 {
 }

Here you will see that you can use only those classes inside **using** which implements IDisposable interface . 

Two things which does not know each other can interact with each other using Interfaces only.
Interface gurantees that "some" functionality has surely been implemented by this type.

**Why layers :**

So that you can have separate dlls which will let you to reuse in different application.

Basically all is for code reuse and Performance gain.
I think you are talking about Facade layer. 

It is an **optional layer** which will simplify the functions of Business Layer. Let's imagine, you have a ProductManager and CategoryManager and you want to do a particular action which involves using both (for example, get me top 5 products in all categories) then you could use a facade layer that uses ProductManager and CategoryManager.

It is inspired by [Facade Pattern](http://en.wikipedia.org/wiki/Facade_pattern).