Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

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

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

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

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

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

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

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

Есть вопрос или хотите участвовать в обсуждении?

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

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»