Зарегистрируйтесь, чтобы продолжить обучение

Уровневое проектирование PHP: Последовательности

Уровневое проектирование

Сложная система как структура последовательных уровней.

Наша библиотека для работы с HTML-тегами — пример проекта с использованием так называемого уровневого проектирования.

Уровневое проектирование предполагает такой подход, когда сложной системе нужно придавать структуру при помощи последовательности уровней, которые описываются последовательностью языков. Каждый из уровней строится путём комбинации частей, которые на этом уровне рассматриваются как элементарные. Части, которые строятся на каждом уровне, работают как элементарные на следующем уровне. Язык, который используется на каждом уровне такого проекта, включает примитивы, средства комбинирования, абстракции и соответствующие этому уровню подробности. В нашем случае это:

  • Функции — functions
  • Пары — cons, car, cdr
  • Списки — l, head, tail, map, filter, reduce, ...
  • Уровень конечных HTML-тегов — node, append, make, children, hasChildren

Уровневое проектирование пронизывает всю технику построения сложных систем. Например, при проектировании компьютеров сочетаются резисторы и транзисторы, из них строятся им подобные элементы, служащие основой языка цифровых схем. Из этих элементов строятся процессоры, шины и системы памяти, которые в свою очередь служат элементами построения компьютеров при помощи языков, подходящих для описания компьютерной архитектуры. Компьютеры дают распределённые системы, которые описываются при помощи языков описания сетевых взаимодействий и т.д.

Сетевая модель OSI

Хороший пример уровневого проектирования — Сетевая модель OSI. Она разбивает весь процесс взаимодействия по сети на 7 подуровней. Сейчас мы не будем вдаваться в подробности. Вот их краткое описание (уровни принято считать снизу вверх):

  • Прикладной уровень — верхний уровень модели, обеспечивающий взаимодействие пользовательских приложений с сетью.
  • Уровень представления обеспечивает преобразование протоколов и кодирование/декодирование данных.
  • Сеансовый уровень модели обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время.
  • Транспортный уровень модели предназначен для обеспечения надёжной передачи данных от отправителя к получателю.
  • Сетевой уровень модели предназначен для определения пути передачи данных.
  • Канальный уровень предназначен для обеспечения взаимодействия сетей на физическом уровне и контроля ошибок, которые могут возникнуть.
  • Физический уровень — нижний уровень модели, который определяет метод передачи данных, представленных в двоичном виде, от одного устройства (компьютера) к другому.

В реальной жизни часть уровней отсутствует, но по факту это некая спецификация, которая говорит о том, что они из себя представляют и как их правильно разбивать. Эта модель была придумана достаточно давно. И она оказалась настолько успешной, удачной и правильной с точки зрения реализации, что сейчас появляются новые технологии, новые способы передачи данных, более эффективные протоколы, более эффективные механизмы передачи, но это не заставляет нас переделывать каждый раз полностью работу интернета, взаимодействие между компьютерами или любую программу, которая работает по сети. Это очень здорово! Без этого мы просто не могли бы двигаться с такой скоростью, с которой мы можем двигаться сейчас.

Уровневое проектирование обеспечивает устойчивость. По сути происходит локализация изменений. Если у вас что-то ломается, что-то нужно заменить, что-то работает не так, то вы просто вносите изменения только на соответствующем уровне, но предоставляя такой же интерфейс для уровней выше. То, что мы говорили про OSI-модель, это хороший пример, потому что в какой-то момент времени мы работаем с Ethernet, в какой-то момент у нас используется Wi-Fi. После этого выходит новый стандарт или появляется оптоволокно. При этом все уровни, которые выше базового физического уровня, продолжают работать точно также и не зависят от того, что находится на уровне ниже.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу