Каковы основные или основные различия между шаблоном активной записи и шаблоном шлюза данных таблицы?
Я относительно новичок в программировании, так что извиняюсь, если это глупый вопрос, но они кажутся мне похожими.
Каковы основные или основные различия между шаблоном активной записи и шаблоном шлюза данных таблицы?
Я относительно новичок в программировании, так что извиняюсь, если это глупый вопрос, но они кажутся мне похожими.
Этот ответ похож на большинство ответов на модели, на самом деле моя интерпретация, большинство из того, что я говорю, основано на Active Record и Table Data Gateway на сайте Мартина Фаулера.
Ключевыми котировками являются Table Gateway:
Объект, который действует как шлюз (466) в таблицу базы данных. Один экземпляр обрабатывает все строки в таблице.
И это об активной записи:
Объект, который обертывает строку в таблице базы данных или представлении, инкапсулирует доступ к базе данных и добавляет логику домена к этим данным.
Таким образом, на простейшем уровне Table Data Gateway абстрагирует таблицу базы данных, в то время как Active Record переносит строку из таблицы.
Другим ключевым моментом, который я беру из чтения, является то, что объекты Active Record являются объектами Domain, что означает, что объект, который вы вызываете Update() для сохранения изменений в базе данных, также является объектом, который содержит бизнес-логику. С помощью шлюза данных таблицы это не так, шлюз обычно будет действовать как уровень, который переводит вывод из ваших вызовов базы данных в объекты домена, и когда вы хотите сохранить изменения в тех объектах, которые вы передаете обратно на шлюз, и сообщить шлюз для сохранения.
Наконец, тот факт, что Table Data Gateway работает на всей таблице, важен с точки зрения дизайна и того, как вы думаете о доступе к данным.
Я никогда не использовал Active Record, но работал над большим проектом, который использовал Table Data Gateway в своем дизайне. Это прочный шаблон, но многие говорят, что он довольно устарел - преимущества, которые вы получаете в том, чтобы хранить все данные в одном месте и позволять вашим администраторам баз данных владеть базой данных, были преодолены новыми преимуществами ORM, которые дают разработчикам хороший объект ориентированные методы работы с данными с соответствующими преимуществами с точки зрения времени разработки и прозрачности.
(Я не очень заинтересован в том, чтобы комментировать оба способа, сколько из приведенного выше абзаца истинно - я просто пытаюсь представить мнение сообщества. В настоящее время я использую ORM, но также могу с радостью вернуться к шлюз)
Активная запись - это объект, который представляет собой модифицируемую запись. Эти объекты помогают поддерживать согласованность состояния объекта в базе данных. Запись активна, когда вы манипулируете ее состоянием, и это позволит избежать того, что другие будут изменять ее в одно и то же время.
Это просто пример для реализации как
Активная запись
class ActiveRecord
{
protected $connection = null;
public function __construct()
{
$this->connection = new PDO("mysql:host=localhost; dbname=db_userscloud", 'root', '');
}
public function loadId($id)
{
$sql = 'SELECT * FROM blog WHERE id_blog = ' . (int) $id;
$result = $this->connection->query($sql);
$record = $result->fetch(PDO::FETCH_ASSOC);
foreach($record as $column => $value) {
$this->$column = $value;
}
}
}
$blog = new ActiveRecord();
$blog->loadId(1);
echo $blog->id_blog . '<br />';
echo $blog->title_blog;
Данные таблицы
class TableData
{
protected $connection = null;
public function __construct()
{
$this->connection = new PDO("mysql:host=localhost; dbname=db_userscloud", 'root', '');
}
public function loadId($id)
{
$sql = 'SELECT * FROM blog WHERE id_blog = ' . (int) $id;
$result = $this->connection->query($sql);
return $result->fetch(PDO::FETCH_ASSOC);
}
$gateway = new TableData();
$blog = $gateway->loadId(1);
echo $blog['id_blog'] . '<br />';
echo $blog['title_blog'];