HTML Diff
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>