0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Любое программное обеспечение разрабатывается под конкретную предметную область, например:</p>
1
<p>Любое программное обеспечение разрабатывается под конкретную предметную область, например:</p>
2
<ul><li>Система аналитики оперирует понятиями "просмотр", "сессия", "воронка" и "когорта"</li>
2
<ul><li>Система аналитики оперирует понятиями "просмотр", "сессия", "воронка" и "когорта"</li>
3
<li>Для интернет-магазина понятия будут другими - "товар", "категория", "платежный шлюз".</li>
3
<li>Для интернет-магазина понятия будут другими - "товар", "категория", "платежный шлюз".</li>
4
</ul><p>Все вместе они составляют<a>онтологию предметной области</a>. В некоторых источниках встречается термин<strong>модель предметной области</strong>- это то же самое, что и онтология.</p>
4
</ul><p>Все вместе они составляют<a>онтологию предметной области</a>. В некоторых источниках встречается термин<strong>модель предметной области</strong>- это то же самое, что и онтология.</p>
5
<p>Кроме самих понятий онтология содержит и описание их связей. Например, сущность "Пользователь" связана с сущностью "Покупка" как "один ко многим". То есть один пользователь может выполнить сколько угодно покупок, но каждая покупка принадлежит только одному пользователю.</p>
5
<p>Кроме самих понятий онтология содержит и описание их связей. Например, сущность "Пользователь" связана с сущностью "Покупка" как "один ко многим". То есть один пользователь может выполнить сколько угодно покупок, но каждая покупка принадлежит только одному пользователю.</p>
6
<p>Модель предметной области - основа коммуникации и взаимопонимания между членами команды. Она не зависит ни от языка программирования, ни от программирования вообще.</p>
6
<p>Модель предметной области - основа коммуникации и взаимопонимания между членами команды. Она не зависит ни от языка программирования, ни от программирования вообще.</p>
7
<p>Не важно, кто общается: программисты между собой или программисты с заказчиками, менеджерами или дизайнерами. Все вместе они оперируют<strong>сущностями</strong>и<strong>связями</strong>предметной области и<strong>бизнес-правилами</strong>, используемыми в данной программе. К таким правилам может относиться автоматическое включение скидки при заказе от определенного объема товаров:</p>
7
<p>Не важно, кто общается: программисты между собой или программисты с заказчиками, менеджерами или дизайнерами. Все вместе они оперируют<strong>сущностями</strong>и<strong>связями</strong>предметной области и<strong>бизнес-правилами</strong>, используемыми в данной программе. К таким правилам может относиться автоматическое включение скидки при заказе от определенного объема товаров:</p>
8
<p>Важно понимать, что модель отражает лишь часть предметной области с некоторой детализацией. Причем в программах от разных производителей модель может быть разной, даже если они из одной области. Конечно же, в некоторых областях есть некоторый набор фиксированных сущностей, их связей и правил работы - например, в бухгалтерии. Но есть и менее формальные области, в которых таких возможностей еще больше.</p>
8
<p>Важно понимать, что модель отражает лишь часть предметной области с некоторой детализацией. Причем в программах от разных производителей модель может быть разной, даже если они из одной области. Конечно же, в некоторых областях есть некоторый набор фиксированных сущностей, их связей и правил работы - например, в бухгалтерии. Но есть и менее формальные области, в которых таких возможностей еще больше.</p>
9
<p>Приведем несколько примеров из Хекслета. Количество сущностей - больше сотни, количество связей - много сотен, количество правил посчитать сложно - их тоже много.</p>
9
<p>Приведем несколько примеров из Хекслета. Количество сущностей - больше сотни, количество связей - много сотен, количество правил посчитать сложно - их тоже много.</p>
10
<p>На основе модели предметной области формируется модель данных в коде. Создаем сущности, определяем их связи. Затем мы строим рабочий код, который оперирует сущностями, исходя из требований и бизнес-правил.</p>
10
<p>На основе модели предметной области формируется модель данных в коде. Создаем сущности, определяем их связи. Затем мы строим рабочий код, который оперирует сущностями, исходя из требований и бизнес-правил.</p>
11
<p>На этом этапе возникает вопрос: а как эти сущности будут отображаться на базу данных, в которой они хранятся?</p>
11
<p>На этом этапе возникает вопрос: а как эти сущности будут отображаться на базу данных, в которой они хранятся?</p>
12
<p>Самый простой вариант - создавать по таблице на каждую сущность и связывать их через внешние ключи. В большинстве проектов именно так и делают. Для этого используют<strong>Object-relational mapper (ORM)</strong>- фреймворк для данных.</p>
12
<p>Самый простой вариант - создавать по таблице на каждую сущность и связывать их через внешние ключи. В большинстве проектов именно так и делают. Для этого используют<strong>Object-relational mapper (ORM)</strong>- фреймворк для данных.</p>
13
<p>С помощью ORM описываются сущности и их связи, а также определяется то, как сущность отображается на базу данных (как правило, в полуавтоматическом режиме). ORM берет на себя серьезную часть работы по:</p>
13
<p>С помощью ORM описываются сущности и их связи, а также определяется то, как сущность отображается на базу данных (как правило, в полуавтоматическом режиме). ORM берет на себя серьезную часть работы по:</p>
14
<ul><li>Генерации SQL-запросов</li>
14
<ul><li>Генерации SQL-запросов</li>
15
<li>Извлечению данных</li>
15
<li>Извлечению данных</li>
16
<li>Кастингу - преобразованию типов базы данных в типы целевого языка и обратно</li>
16
<li>Кастингу - преобразованию типов базы данных в типы целевого языка и обратно</li>
17
<li>Автоматическому извлечению связей</li>
17
<li>Автоматическому извлечению связей</li>
18
</ul><p>В итоге получается, что ORM прячет всю работу с базой данных. От программиста нужна только правильная конфигурация, а ORM сам выполняет все необходимые запросы. В сложных случаях их все равно приходится писать самостоятельно, но это не так сложно - ORM содержат в себе query builder, который упрощает генерацию SQL.</p>
18
</ul><p>В итоге получается, что ORM прячет всю работу с базой данных. От программиста нужна только правильная конфигурация, а ORM сам выполняет все необходимые запросы. В сложных случаях их все равно приходится писать самостоятельно, но это не так сложно - ORM содержат в себе query builder, который упрощает генерацию SQL.</p>
19
<p>В экосистеме Python есть несколько ORM. Некоторые из них разрабатывались под конкретные фреймворки и поставляются с ними, другие вполне самостоятельны. Рассмотрим пример, реализованный с использованием Django ORM.</p>
19
<p>В экосистеме Python есть несколько ORM. Некоторые из них разрабатывались под конкретные фреймворки и поставляются с ними, другие вполне самостоятельны. Рассмотрим пример, реализованный с использованием Django ORM.</p>
20
<p>Определение сущности Photo:</p>
20
<p>Определение сущности Photo:</p>
21
<p>Использование:</p>
21
<p>Использование:</p>
22
<p>Код, описывающий сущность, может показаться простым, однако степень автоматизации в Django ORM очень велика. Под капотом у такого простого кода скрыты создание сущности в БД и набор проверок значений, которые вы помещаете в модель.</p>
22
<p>Код, описывающий сущность, может показаться простым, однако степень автоматизации в Django ORM очень велика. Под капотом у такого простого кода скрыты создание сущности в БД и набор проверок значений, которые вы помещаете в модель.</p>
23
<p>Перед тем, как начинать работать с ORM, нужно сначала научиться основам баз данных. Причем не через программирование, а через прямую работу с базой. Также важно познакомиться с:</p>
23
<p>Перед тем, как начинать работать с ORM, нужно сначала научиться основам баз данных. Причем не через программирование, а через прямую работу с базой. Также важно познакомиться с:</p>
24
<ul><li>Нормализацией</li>
24
<ul><li>Нормализацией</li>
25
<li>Внешними и первичными ключами</li>
25
<li>Внешними и первичными ключами</li>
26
<li>Индексами</li>
26
<li>Индексами</li>
27
<li>Планом запроса</li>
27
<li>Планом запроса</li>
28
<li>Языком SQL, чтобы менять структуры базы данных и манипулировать данными внутри базы</li>
28
<li>Языком SQL, чтобы менять структуры базы данных и манипулировать данными внутри базы</li>
29
</ul><p>Затем можно перейти на уровень выполнения запросов из языка программирования. В Python для этого используются различные библиотеки вроде postgres. И только после всего этого стоит переходить к ORM. Все это будет далее в курсах.</p>
29
</ul><p>Затем можно перейти на уровень выполнения запросов из языка программирования. В Python для этого используются различные библиотеки вроде postgres. И только после всего этого стоит переходить к ORM. Все это будет далее в курсах.</p>
30
<p>Вот лишь некоторые темы, вовлеченные в код выше:</p>
30
<p>Вот лишь некоторые темы, вовлеченные в код выше:</p>
31
<ul><li><a>Entity-relation model</a></li>
31
<ul><li><a>Entity-relation model</a></li>
32
<li><a>Domain-driven design</a></li>
32
<li><a>Domain-driven design</a></li>
33
<li><a>ActiveRecord</a>/<a>DataMapper</a></li>
33
<li><a>ActiveRecord</a>/<a>DataMapper</a></li>
34
<li><a>Identity map</a></li>
34
<li><a>Identity map</a></li>
35
<li><a>Миграции</a></li>
35
<li><a>Миграции</a></li>
36
<li><a>Валидация</a></li>
36
<li><a>Валидация</a></li>
37
<li><a>Метапрограммирование</a></li>
37
<li><a>Метапрограммирование</a></li>
38
</ul>
38
</ul>