Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper кратко

Лекция



Привет, Вы узнаете о том , что такое паттерны архитектуры источников данных, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое паттерны архитектуры источников данных, row data, gateway, active record, table data gateway, data mapper, dao , настоятельно рекомендую прочитать все из категории Проектирование веб сайта или программного обеспечения.

  • Row Data Gateway (Шлюз к данным записи)
  • Active Record (Активная запись)
  • Table Data Gateway (Шлюз к данным таблицы)
  • Data Mapper ()

Row Data Gateway (Шлюз к данным записи)

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Паттерн проектирования Row Data Gateway

Описание Row Data Gateway

Объект выступает в роли шлюза к отдельной записи в источнике данных. Один экземпляр на одну запись.

Встраивание кода доступа к БД в объекты, хранящиеся в памяти, может привести в некоторым неудобствам. Во-первых, если ваши объекты содержат бизнес-логику, добавление взаимодействия с БД увеличит сложность. Вскоре тестирование станет неудобным, если объекты, хранящиеся в памяти, завязаны на БД. Тесты станут медленнее из-за доступа к БД.

Объект шлюза к записи представляется в точности, как запись в БД, но при этом дает возможность доступа посредством штатных средств языка программирования. Все подробности доступа к БД скрыты за этим интерфейсом.

Пример: объект шлюза PersonGateway, данные о записи из таблицы person и методы insert и update, которые позволяют прозрачно работать с записью.

Качественная реализация этого паттерна на PHP существует в частности в Zend Framework в классе Zend_Db_Table_Row

Active Record (Активная запись)

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Паттерн проектирования Active Record

Описание Active Record

Один объект управляет и данными, и поведением. Большинство этих данных постоянны и их надо хранить в БД. Этот паттерн использует наиболее очевидный подход - хранение логики доступа к данным в объекте сущности.

Объект является "оберткой" одной строки из БД или представления, включает в себя доступ к БД и логику обращения с данными.

Пример: объект "Работник" содержит данные об одном работнике и методы: добавить, обновить или удалить. Помимо прочего, отдельным методом вынесена смена имени.

Table Data Gateway (Шлюз к данным таблицы)

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Паттерн проектирования Table Data Gateway

Описание Table Data Gateway

Объект выступает в качестве шлюза между данными в приложении и в БД. Об этом говорит сайт https://intellect.icu . Один объект работает сразу со всеми записями в таблице.

Сочетание SQL-запросов и логики приложения может вызвать достаточно много проблем. Есть разработчики, которые не сильны в SQL, а есть и те, кто в этом преуспел. Администраторы SQL-серверов должны иметь возможность быстро найти SQL-код, чтобы понимать каким образом настраивать и развивать сервера.

Объект шлюза к таблице содержит все запросы SQL для доступа к отдельной таблице или представлению (view): выборка, обновление, вставка, удаление (CRUD). Остальной код, для взаимодействия с БД, обращается к методам объекта шлюза.

Пример: объект шлюза PersonGateway содержит методы для доступа к таблице person в БД. Методы содержат SQL-код для выборки, вставки, обновления и удаления. Объект может содержать специальную выборку, например поиск по компании.

Data Mapper

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Паттерн проектирования Data Mapper

Описание Data Mapper

Объектные и реляционные БД используют разные способы структурирования данных. Множество составляющих объектов, например коллекции и наследование, не представлены в реляционных БД. Когда проектируется объектная модель с большим количеством бизнес-логики, полезно применять такие механизмы для улучшения организации хранения данных и логики, которая работает c ними. Это приводит к различиям в организации. Так что объектная и реляционная схемы не идентичны.

Тем не менее, необходимость в обмене данными между двумя схемами не отпадает, и этот обмен становится, в свою очередь, сложным. Если же объект знает о реляционной структуре — изменения в одной из структур приведет к проблемам в другой.

Data Mapper — это программная прослойка, разделяющая объект и БД. Его обязанность — пересылать данные между ними и изолировать их друг от друга. При использовании Data Mapper'а объекты не нуждаются в знании о существовании БД. Они не нуждаются в SQL-коде, и (естественно) в информации о структуре БД. Так как Data Mapper - это разновидность паттерна Mapper, сам объект-Mapper неизвестен объекту.

Паттерн DAO

Используется в библиотеке DBSimple.

DAO (Data Access Object) - объект, который предоставляет абстрактный интерфейс к базе данных. Главной идеей DAO является сделать возможным определенные операции с данными не вдаваюсь в детали реализации базы данных.

При использовании DAO - функции для работы c конкретной таблицей хранятся в файле модели. Модель (таблица) наследует абстрактный класс, реализующий DAO.

При получение ряда в DAO - в результирующем объекте или массиве будут содержаться все поля из базы данных. Пример:

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

В переменной $user будет объект либо массив в зависимости от реализации, содержащий все поля из таблицы "user". Класс TableUser будет содержать все методы, которые работают с таблицей "user". Дополнительный класс репозитория тут не нужен. Почему? Если для получения данных создать класс репозиторий, то в модели (таблице) останется буквально единственный метод получения имени таблицы.

Для обновления данных в DAO - используются отдельные методы, реализующие прямые sql-запросы, в отличие от Active Record где меняется состояние модели и вызывается save() для персиста состояния в базу данных.

Паттерн Active Record

Используется в Kohana, Yii.

Это шаблон проектирования или один из слоев приложения, который несет ответственность за представление бизнес-логики и данных. Active Record позволяет создавать и использовать более просто те объекты, который требуют постоянного хранения в базе данных. Если говорить в отношении MVC, то Active Record реализует первую букву М - то есть модель.

Очень простой пример использования модели, реализующей паттерн Active Record в php:

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Этот код вызовет генерацию такого sql-запроса:

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Как правило, внутри модели, которая реализует Active Record, прописаны property. В данном случае в модели User должны быть представлены как минимум property name, email. Содержимое класса User:

Паттерны архитектуры источников данных Row Data Gateway , Active Record,Table Data Gateway ,Data Mapper

Проперти, как правило, делают публичными, как в примере выше. Но, проперти модели могут быть и приватными, тогда отдельно создают сеттеры и геттеры под каждый проперти.

Как правило, Active Record Модель - это маппинг полей модели на поля в базе данных. В Active record сама модель отвечает за сохранение данных в базу данных. А это означает, что нарушется первый принцип из SOLID - принцип единственности ответственности. Класс отвечает не только за представление данных, но и за сохранение.

Паттерн Data Mapper

Используется в 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 и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Проектирование веб сайта или программного обеспечения

Из статьи мы узнали кратко, но содержательно про паттерны архитектуры источников данных
создано: 2017-07-31
обновлено: 2021-05-22
132423



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Проектирование веб сайта или программного обеспечения

Термины: Проектирование веб сайта или программного обеспечения