Подтвердить что ты не робот

Различия между Active Record и Table Data Gateway

Каковы основные или основные различия между шаблоном активной записи и шаблоном шлюза данных таблицы?

Я относительно новичок в программировании, так что извиняюсь, если это глупый вопрос, но они кажутся мне похожими.

4b9b3361

Ответ 1

Этот ответ похож на большинство ответов на модели, на самом деле моя интерпретация, большинство из того, что я говорю, основано на 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, но также могу с радостью вернуться к шлюз)

Ответ 2

Активная запись - это объект, который представляет собой модифицируемую запись. Эти объекты помогают поддерживать согласованность состояния объекта в базе данных. Запись активна, когда вы манипулируете ее состоянием, и это позволит избежать того, что другие будут изменять ее в одно и то же время.

Ответ 3

Это просто пример для реализации как
Активная запись

  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'];