![Java EE 8 Design Patterns and Best Practices](https://wfqqreader-1252317822.image.myqcloud.com/cover/557/36699557/b_36699557.jpg)
Layers
A layer is merely a logical division that has a responsibility within the architecture of the application. It is a logical way to organize the application code. Martin Fowler's book Patterns of Enterprise Application Architecture describes the three main layers and their responsibilities:
![](https://epubservercos.yuewen.com/EE3E79/19470389901547306/epubprivate/OEBPS/Images/01.png?sign=1738883251-zU93oYE4WSZbDFzJfbJKuMdY3vnkpdp8-0-fa0e10937adba6525a02a01c1c1cfe87)
Thus, the classes of an application are logically separated according to their responsibilities. There are classes that are used in the data-access layer, while other classes prepare the data to be displayed as part of the presentation layer. This division is purely logical. A good architecture practice is to have a layered chain where a layer interacts with its adjacent layer, providing and consuming services. This leads to more cohesion (the same responsibilities are contained in the same layer) and low-coupling.
Let's look at the following diagram:
We can see that the JSF, JSP, and HTML pages, the bean-backing class, and even a servlet belong logically to the presentation layer group, since they have the same basic responsibility, which is to send information to the user and receive requests from a user. An EJB, a servlet (part of it), and a Business Object belong to the business layer. The DAO classes and the JPA entities belong to the data layer.