Лекция
Привет, Вы узнаете о том , что такое паттерны архитектуры источников данных, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое паттерны архитектуры источников данных, row data, gateway, active record, table data gateway, data mapper, dao , настоятельно рекомендую прочитать все из категории Проектирование веб сайта или программного обеспечения.
Паттерн проектирования Row Data Gateway
Объект выступает в роли шлюза к отдельной записи в источнике данных. Один экземпляр на одну запись.
Встраивание кода доступа к БД в объекты, хранящиеся в памяти, может привести в некоторым неудобствам. Во-первых, если ваши объекты содержат бизнес-логику, добавление взаимодействия с БД увеличит сложность. Вскоре тестирование станет неудобным, если объекты, хранящиеся в памяти, завязаны на БД. Тесты станут медленнее из-за доступа к БД.
Объект шлюза к записи представляется в точности, как запись в БД, но при этом дает возможность доступа посредством штатных средств языка программирования. Все подробности доступа к БД скрыты за этим интерфейсом.
Пример: объект шлюза PersonGateway, данные о записи из таблицы person и методы insert и update, которые позволяют прозрачно работать с записью.
Качественная реализация этого паттерна на PHP существует в частности в Zend Framework в классе Zend_Db_Table_Row
Паттерн проектирования Active Record
Один объект управляет и данными, и поведением. Большинство этих данных постоянны и их надо хранить в БД. Этот паттерн использует наиболее очевидный подход - хранение логики доступа к данным в объекте сущности.
Объект является "оберткой" одной строки из БД или представления, включает в себя доступ к БД и логику обращения с данными.
Пример: объект "Работник" содержит данные об одном работнике и методы: добавить, обновить или удалить. Помимо прочего, отдельным методом вынесена смена имени.
Паттерн проектирования Table Data Gateway
Объект выступает в качестве шлюза между данными в приложении и в БД. Об этом говорит сайт https://intellect.icu . Один объект работает сразу со всеми записями в таблице.
Сочетание SQL-запросов и логики приложения может вызвать достаточно много проблем. Есть разработчики, которые не сильны в SQL, а есть и те, кто в этом преуспел. Администраторы SQL-серверов должны иметь возможность быстро найти SQL-код, чтобы понимать каким образом настраивать и развивать сервера.
Объект шлюза к таблице содержит все запросы SQL для доступа к отдельной таблице или представлению (view): выборка, обновление, вставка, удаление (CRUD). Остальной код, для взаимодействия с БД, обращается к методам объекта шлюза.
Пример: объект шлюза PersonGateway содержит методы для доступа к таблице person в БД. Методы содержат SQL-код для выборки, вставки, обновления и удаления. Объект может содержать специальную выборку, например поиск по компании.
Паттерн проектирования Data Mapper
Объектные и реляционные БД используют разные способы структурирования данных. Множество составляющих объектов, например коллекции и наследование, не представлены в реляционных БД. Когда проектируется объектная модель с большим количеством бизнес-логики, полезно применять такие механизмы для улучшения организации хранения данных и логики, которая работает c ними. Это приводит к различиям в организации. Так что объектная и реляционная схемы не идентичны.
Тем не менее, необходимость в обмене данными между двумя схемами не отпадает, и этот обмен становится, в свою очередь, сложным. Если же объект знает о реляционной структуре — изменения в одной из структур приведет к проблемам в другой.
Data Mapper — это программная прослойка, разделяющая объект и БД. Его обязанность — пересылать данные между ними и изолировать их друг от друга. При использовании Data Mapper'а объекты не нуждаются в знании о существовании БД. Они не нуждаются в SQL-коде, и (естественно) в информации о структуре БД. Так как Data Mapper - это разновидность паттерна Mapper, сам объект-Mapper неизвестен объекту.
Используется в библиотеке DBSimple.
DAO (Data Access Object) - объект, который предоставляет абстрактный интерфейс к базе данных. Главной идеей DAO является сделать возможным определенные операции с данными не вдаваюсь в детали реализации базы данных.
При использовании DAO - функции для работы c конкретной таблицей хранятся в файле модели. Модель (таблица) наследует абстрактный класс, реализующий DAO.
При получение ряда в DAO - в результирующем объекте или массиве будут содержаться все поля из базы данных. Пример:
В переменной $user будет объект либо массив в зависимости от реализации, содержащий все поля из таблицы "user". Класс TableUser будет содержать все методы, которые работают с таблицей "user". Дополнительный класс репозитория тут не нужен. Почему? Если для получения данных создать класс репозиторий, то в модели (таблице) останется буквально единственный метод получения имени таблицы.
Для обновления данных в DAO - используются отдельные методы, реализующие прямые sql-запросы, в отличие от Active Record где меняется состояние модели и вызывается save() для персиста состояния в базу данных.
Используется в Kohana, Yii.
Это шаблон проектирования или один из слоев приложения, который несет ответственность за представление бизнес-логики и данных. Active Record позволяет создавать и использовать более просто те объекты, который требуют постоянного хранения в базе данных. Если говорить в отношении MVC, то Active Record реализует первую букву М - то есть модель.
Очень простой пример использования модели, реализующей паттерн Active Record в php:
Этот код вызовет генерацию такого sql-запроса:
Как правило, внутри модели, которая реализует Active Record, прописаны property. В данном случае в модели User должны быть представлены как минимум property name, email. Содержимое класса User:
Проперти, как правило, делают публичными, как в примере выше. Но, проперти модели могут быть и приватными, тогда отдельно создают сеттеры и геттеры под каждый проперти.
Как правило, Active Record Модель - это маппинг полей модели на поля в базе данных. В Active record сама модель отвечает за сохранение данных в базу данных. А это означает, что нарушется первый принцип из SOLID - принцип единственности ответственности. Класс отвечает не только за представление данных, но и за сохранение.
Используется в Hibernate в Java и в Doctrine2 в php, так в CycleOrm.
Data Mapper - это слой доступа к данным, который предоставляет двунаправленный маппинг данных между постоянным хранилищем данных (обычно, это sql база данных) и хранением данных в памяти (например, на время выполнениния php скрипта).
В отличие от Active Record, в Data Mapper появляется еще один слой или тип сущности такой как entityManager. Именно этот слой будет отвечать за перенос состояния модели в базу данных и обратно.
Анализ данных, представленных в статье про паттерны архитектуры источников данных, подтверждает эффективность применения современных технологий для обеспечения инновационного развития и улучшения качества жизни в различных сферах. Надеюсь, что теперь ты понял что такое паттерны архитектуры источников данных, row data, gateway, active record, table data gateway, data mapper, dao и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Проектирование веб сайта или программного обеспечения
Из статьи мы узнали кратко, но содержательно про паттерны архитектуры источников данных
Комментарии
Оставить комментарий
Проектирование веб сайта или программного обеспечения
Термины: Проектирование веб сайта или программного обеспечения