Программы, которые пишут программисты, всегда создаются под определенную предметную область. Например, бухгалтерский софт основывается на правилах ведения бухгалтерского учета. Сайт для просмотра сериалов — на понятиях из телеиндустрии, например, сезон или эпизод.
Это относится и к любой другой предметной области: бронирование авиабилетов, отелей, поиск туров, продажа и покупка автомобилей:
В этом уроке мы узнаем, что такое сущности предметной области, а также разберем связи между ними. Еще познакомимся с онтологией предметной области и узнаем, зачем она нужна.
Сущности и связи между ними
Предметную область программы важно понимать, как и уметь программировать. Это не значит, что ее нужно знать досконально. Иногда область может быть сложной. Например, бухгалтерия или технологическое производство. Но общее понимание все же требуется.
Рассмотрим в качестве примера Хекслет. Чтобы понимать его предметную область, нужно выделить ключевые понятия. У обучающих ресурсов это: «курс» и «урок». Но понятий может быть больше. В случае Хекслета еще можно выделить «профессию», «испытание», «code review», «квиз», «участника курса», «проект». Этот список можно продолжать еще долго.
На Хекслете существует более двухсот подобных понятий. Еще их называют сущностями, и все они описаны в коде.
Сущности находятся в определенных взаимоотношениях друг с другом. Например, квиз содержит в себе вопросы, а каждый вопрос — ответы. Профессия состоит из курсов, а курсы — из уроков, уроки — из теории, квиза и практики. У этих связей есть конкретные названия. Например:
- Один урок может находиться только в одном курсе, но курс содержит множество уроков. Это связь один ко многим, one-to-many или o2m
- Один курс могут проходить множество пользователей, и один пользователь может проходить много курсов. Это связь многие ко многим, many-to-many или m2m
- Реже встречается отношение один к одному, one-to-one или o2o. На Хекслете так связаны пользователь и эксперт
Одна и та же сущность с точки зрения разных систем может выглядеть по-разному. Например, пользователь Хекслета с точки зрения бухгалтера и пользователь с точки зрения наставника отличаются.
При этом не всегда можно однозначно сказать, какая связь существует между двумя сущностями. Иногда программисты думают наперед и сразу формируют более сложные связи, например, m2m, а не o2m. Это сказывается на сложности кода.
Чем сложнее связь, тем больше кода и выше стоимость его создания и поддержки. Сложность связей от простой к сложной: o2o, o2m, m2m.
Иногда программист ошибается при выборе связи. Это значит, что он плохо понимает предметную область.
Предположим, что в системе нужно реализовать пользователя и заграничный паспорт. Кажется, что между этими понятиями связь один к одному. Один пользователь может иметь один заграничный паспорт. Но это не верно.
Паспорт может поменяться, если он был утерян или закончился срок действия. Также в некоторых странах разрешено владеть одновременно несколькими заграничными паспортами.
Программисту не нужно создавать универсальную модель области. Он должен понять потребности конкретного бизнеса, выделить для них только значимые части рассматриваемой предметной области и перенести их в код. В этом ему поможет эксперт.
Онтология предметной области
Описание объектов рассматриваемой области и связей между ними называется онтологией предметной области. Ее хорошо знают эксперты соответствующей области. Например, в бухгалтерии — бухгалтер, в обучении — преподаватель.
В отличие от программистов, эксперты в области часто представляют свою область на интуитивном уровне — неформально. На практике программисты, бизнес-аналитики или менеджеры общаются с заказчиками, которые могут сами выступать в роли экспертов и строят с ними формальную онтологию. Этот процесс происходит постоянно в процессе развития проекта и не выделяется в отдельный этап проектирования.
Создатели онтологии выделяют конкретные термины, договариваются о том, что они означают и как связаны друг с другом. Затем с помощью ER-модели программист формирует необходимую модель данных:
ER-модель используется при высокоуровневом проектировании баз данных. На этом этапе уже проявляются зачатки архитектуры будущего приложения.
В зависимости от языка программирования будет меняться способ представления сущностей в коде. Например, в некоторых языках с помощью абстрактных типов данных, интерфейсов или классов определяются типы, в других — структуры, а в третьих не предоставляют никаких вариантов, кроме словарей — ассоциативных массивов.
Выводы
В этом уроке мы узнали, что такое сущности предметной области, а также разобрали связи между ними. Еще познакомились с онтологией предметной области. Она нужна, чтобы описывать объекты рассматриваемой области и связи между ними.
Со следующего урока мы начнем изучать различные предметные области и строить подходящие модели данных.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.