A middle-tier architecture typically defines an enterprise execution environment that exists between the client applications and data access components. It is certainly not required, however it does offer the following benefits:
1) The middle tier provides a layer of abstraction. Client applications written to communicate with the middle tier do not know the details of the data-access tier. This allows the data-access components and/or framework to change without changing client code.
2) Business logic is placed in the middle tier and as a result, there is relatively little duplicated effort when needing to provide the same logic in multiple domains or applications.
3) The specific language implementation of the middle tier can be made transparent using location and protocol abstractions, thereby facilitating access from many different programming environments.