multi-layer | allows replacement of a layer by an improved version, or by one with a different set of capabilities | |
anticipates obsolescence: databases and UI systems tend to change; by isolating these in separate layers, the system becomes more resistant to obsolescence | |
can be used to produce a complex system can be built by superposing layers at increasing levels of abstraction | |
has definition An architectural pattern in which a system is divided into layers | |
facilitates designing for portability because all the facilities that are dependent on a particular platform can be isolated in one of the lower layers | |
facilitates designing for testability because individual layers, particularly the UI layer, database layer and communications layer, can be tested independently | |
facilitates divide and conquer since the separate layers can be independently designed | |
increases abstraction because when you design the higher layers, you do not need to know the details of how the lower layers are implemented | |
increases cohesion by facilitating independent designing of layers | |
increases reusability because the lower layers can often be designed generically so that they can be used to provide the same services for different systems | |
is a subtopic of 9.5 - Architectural Patterns | |
is used to build a multi-layer system | |
is a kind of architectural pattern | |
reduces coupling since well-designed lower layers do not know about the higher layers | |
pattern | should be as general as possible | |
should be described in an easy-to-understand form so that people can determine when and how to use it | |
should contain a solution that has been proven to effectively solve the problem in the indicated context | |