Язык сущностей: почему программисты и «обычные люди» иногда не понимают друг друга
Автор: Hallow / Sarcastic Saint
Вы когда-нибудь пытались объяснить техническую идею другу и натыкались на стену непонимания? Я прошел через это. Однажды, обсуждая реализацию простого магазина для игрового сервера, я столкнулся с тем, что мой собеседник разозлился, потому что мой перебор технических вариантов он воспринял как неуверенность, возможно даже глупостью потому что я указал на сущности без конкретики или их описания.
На самом деле, я точно знал, ЧТО я хочу сделать, но размышлял о том, КАК это лучше реализовать. Этот случай заставил меня задуматься о фундаментальной концепции, которая лежит в основе всего IT, от программирования до баз данных — о сущности.
Сущность — это «Анкета» для реальности
Забудьте о мистике и сложных философских трактатах, упоминающихся в сети. В IT сущность (Entity) — это просто **»анкета» или «шаблон»** для описания любого объекта или понятия.
Представьте, что вы создаете анкету для «Клавиатуры». В ней будут пустые поля:
- Производитель: __________
- Модель: __________
- Тип подключения: __________
- Физическая или Виртуальная: __________
Сама эта пустая анкета — и есть **сущность «Клавиатура»**. Это ее «чертеж».
Когда мы берем конкретную клавиатуру, например, Logitech K120, и заполняем эту анкету — «Производитель: Logitech», «Тип подключения: USB», «Физическая» — мы создаем один **экземпляр** этой сущности. А когда мы открываем на экране смартфона программу и заполняем анкету как «Производитель: Google», «Модель: Gboard», «Виртуальная» — мы создаем **совершенно другой экземпляр той же самой сущности!**
И в этом вся суть: для программы и та, и другая — просто «заполненные анкеты». Программист или администратор баз данных сначала создает «анкету» (определяет сущность), и только потом в системе появляются «заполненные анкеты» (конкретные клавиатуры, пользователи, товары).
Мой случай: Одна «Анкета», три способа ее «заполнить»
Вернемся к тому самому «Магазину» для Lineage 2. Его «анкета» (сущность) была проста:
- Характеристики: Список товаров, цены, продавец.
- Действия: Открыть, купить, продать.
Проблема с другом возникла, когда я начал размышлять о способах реализации — то есть о том, КАК игрок будет «заполнять» или взаимодействовать с этой «анкетой». Вариантов было несколько:
- Через интерфейс Community Board.
- Через диалог с NPC (персонажем).
- Через готовый Мод.
Для меня «анкета» магазина оставалась неизменной. Я просто выбирал наиболее удобный «кабинет», где игрок будет ее заполнять. Для моего собеседника же все это звучало как хаос и неуверенность.
Как можно было объяснить это проще?
Сегодня я бы использовал ту же аналогию с клавиатурой и разъемами:
«Смотри, наш Магазин — это как Клавиатура. Это ее сущность.
А вот Community Board, NPC и Мод — это разные способы ее подключения к компьютеру: через USB или Bluetooth.
Способ подключения (реализация) может быть разным, но сама Клавиатура (сущность) остается одной и той же. Нам просто нужно выбрать самый удобный «разъем».»
Заключение: Мост между мирами
Понимание концепции «сущностей» — это ключ к пониманию того, как мыслят разработчики: они сначала создают «пустые анкеты», а потом думают, как и чем их будут заполнять. Этот разрыв в восприятии часто становится источником недопонимания. Но если найти правильную аналогию, можно построить мост через эту пропасть.