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