Common layers in an information system logical architecture
Encyclopedia
The following four layers are the most common layers
in a logical multilayered architecture
for an information system with an object-oriented design:
Some common purposes of the above four layers are for example described in the book about domain-driven design
at page 68-74, which is a book that otherwise is focused on describing the Domain layer
Sometimes there is no explicit distinction between the Domain Layer and the Application Layer, e.g. the Application Layer is considered as being a part of the Domain Layer.
On the other hand, it is also possible to even further divide the Application/Domain Layers into more layers. For example, if the Model View Presenter
pattern is used, then you can consider the Presenter Layer as being a layer between the User Interface Layer and the Application Layer.
The Domain Layer can also use a Business Infrastructure Layer (aka low-level business services layer) between the Domain Layer and the Infrastructure Layer(s). That layer (BI) is very general and can be used in many different application domains, e.g. a CurrencyConverter.
The Infrastructure Layer may be partitioned into different levels (high-level or low-level technical services). Though, it is not unusual that developers only consider the persistence (data access) and therefore only talk about the Persistence Layer or the Data Access Layer (instead of an Infrastructure Layer or Technical services Layer). In other words, the other kind of technical services are not always being explicitly thought of as being part of any particular layer.
Regarding that all types are not always considered as belonging to one particular layer, according to the "POSA book" (Pattern-Oriented Software Architecture A System of Patterns, page 39) a relaxed layered system (as opposed to a strict layered system) can use so called "shared data definition modules" which are types not belonging in a particular layer.
Layer (object-oriented design)
In object-oriented design, a layer is a group of classes that have the same set of link-time module dependencies to other modules. In other words, a layer is a group of reusable components that are reusable in similar circumstances...
in a logical multilayered architecture
Multilayered architecture
A multilayered software architecture is using different layers for allocating the responsibilities of an application.There is also an architectural pattern that is named Layers and has been described in different publications, including the book Pattern-Oriented Software ArchitectureA System of...
for an information system with an object-oriented design:
- User Interface Layer (aka View Layer, UI layer or Presentation layer)
- Application Layer (aka Service Layer or GRASPGRASP (Object Oriented Design)General Responsibility Assignment Software Patterns , abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design....
Controller Layer ) - Domain Layer (aka Business Layer, Business logic Layer or Model Layer)
- Infrastructure Layer (data access or other persistence, logging, network I/O e.g. sending emails, and other kind of technical services)
Some common purposes of the above four layers are for example described in the book about domain-driven design
Domain-driven design
Domain-driven design is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts...
at page 68-74, which is a book that otherwise is focused on describing the Domain layer
Sometimes there is no explicit distinction between the Domain Layer and the Application Layer, e.g. the Application Layer is considered as being a part of the Domain Layer.
On the other hand, it is also possible to even further divide the Application/Domain Layers into more layers. For example, if the Model View Presenter
Model View Presenter
Model–view–presenter is a derivative of the model–view–controller software pattern, also used mostly for building user interfaces....
pattern is used, then you can consider the Presenter Layer as being a layer between the User Interface Layer and the Application Layer.
The Domain Layer can also use a Business Infrastructure Layer (aka low-level business services layer) between the Domain Layer and the Infrastructure Layer(s). That layer (BI) is very general and can be used in many different application domains, e.g. a CurrencyConverter.
The Infrastructure Layer may be partitioned into different levels (high-level or low-level technical services). Though, it is not unusual that developers only consider the persistence (data access) and therefore only talk about the Persistence Layer or the Data Access Layer (instead of an Infrastructure Layer or Technical services Layer). In other words, the other kind of technical services are not always being explicitly thought of as being part of any particular layer.
Regarding that all types are not always considered as belonging to one particular layer, according to the "POSA book" (Pattern-Oriented Software Architecture A System of Patterns, page 39) a relaxed layered system (as opposed to a strict layered system) can use so called "shared data definition modules" which are types not belonging in a particular layer.
See also
- Layer (object-oriented design)Layer (object-oriented design)In object-oriented design, a layer is a group of classes that have the same set of link-time module dependencies to other modules. In other words, a layer is a group of reusable components that are reusable in similar circumstances...
- Domain layer
- GRASP (object-oriented design)
- Object-oriented design
- Description of a concrete layered architecture for .NET/WPF Rich Client Applications