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 |  |