Мартин Фаулер ясно демонстрирует:
Расслоение является одним из наиболее распространенных методов, которые разработчики программного обеспечения используют для разделения сложной программной системы. Вы видите это в машинных архитектурах, где слои спускаются с языка программирования с вызовами операционной системы в драйверы устройств и наборы команд ЦП, а также в логические элементы внутри чипов. Сеть имеет FTP-уровень поверх TCP, который находится поверх IP, который находится поверх Ethernet.
Размышляя о системе в терминах слоев, вы представляете основные подсистемы в программном обеспечении, организованные в виде слоеного пирога, где каждый слой опирается на нижний уровень. В этой схеме верхний уровень использует различные сервисы, определенные нижним уровнем, но нижний уровень не знает о более высоком уровне. Кроме того, каждый уровень обычно скрывает свои нижние уровни от вышеперечисленных уровней, поэтому уровень 4 использует службы уровня 3, который использует службы уровня 2, но уровень 4 не знает об уровне 2. (Не все многоуровневые архитектуры непрозрачны, как это , но большинство из них - или, скорее, большинство в основном непрозрачные.)
Разбиение системы на слои имеет ряд важных преимуществ.
• Вы можете понимать один слой как единое целое, не зная много о других слоях. Вы можете понять, как создать службу FTP поверх TCP, не зная деталей того, как работает Ethernet.
• Вы можете заменить слои альтернативными реализациями одних и тех же базовых сервисов. Служба FTP может работать без изменений через Ethernet, PPP или любую другую кабельную компанию.
• Вы минимизируете зависимости между слоями. Если кабельная компания меняет свою физическую систему передачи, при условии, что она заставляет работать IP, нам не нужно менять наш FTP-сервис.
• Слои создают хорошие места для стандартизации. TCP и IP являются стандартами, потому что они определяют, как должны работать их уровни.
• После того, как вы создали слой, вы можете использовать его для многих сервисов более высокого уровня. Таким образом, TCP / IP используется FTP, telnet, SSH и HTTP. В противном случае все эти протоколы более высокого уровня должны будут писать свои собственные протоколы более низкого уровня. Из библиотеки Кайла Джеффри Пассарелли
Расслоение является важной техникой, но есть и недостатки.
• Слои хорошо инкапсулируют некоторые, но не все вещи. В результате вы иногда получаете каскадные изменения. Классическим примером этого в многоуровневом корпоративном приложении является добавление поля, которое должно отображаться в пользовательском интерфейсе, должно находиться в базе данных и, следовательно, должно добавляться к каждому промежуточному слою.
• Дополнительные слои могут повредить производительность. На каждом слое вещи обычно должны быть преобразованы из одного представления в другое. Однако инкапсуляция базовой функции часто дает вам повышение эффективности, которое более чем компенсирует. Слой, который контролирует транзакции, может быть оптимизирован, и тогда все будет быстрее. Но самая сложная часть многоуровневой архитектуры - это решить, какие слои иметь и какова ответственность каждого слоя.