Различия между активной записью и шлюзом табличных данных - PullRequest
12 голосов
/ 18 сентября 2011

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

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

Ответы [ 3 ]

16 голосов
/ 18 сентября 2011

Этот ответ, как и большинство шаблонов, на самом деле отвечает только моей интерпретации, большая часть того, что я говорю, основана на Active Record и Таблица данных Gateway описания на сайте Мартина Фаулера.

Ключевые кавычки о шлюзе табличных данных:

Объект, который действует как шлюз (466) для таблицы базы данных. Один Экземпляр обрабатывает все строки в таблице.

А это по поводу Active Record:

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

Таким образом, на простейшем уровне шлюз табличных данных абстрагирует таблицу базы данных, а Active Record переносит строку из таблицы.

Другой ключевой момент, который я понял из чтения, состоит в том, что объекты Active Record являются объектами домена, то есть объект, который вы вызываете Update () для сохранения изменений в базе данных, также является объектом, содержащим бизнес-логику. В случае шлюза табличных данных это не так, шлюз обычно действует как слой, который преобразует выходные данные вызовов вашей базы данных в объекты домена, и когда вы хотите сохранить изменения в этих объектах, вы передаете обратно шлюзу и сообщаете шлюз для сохранения.

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

Я никогда особенно не использовал Active Record, но работал над большим проектом, который использовал Table Data Gateway в своем дизайне. Это надежная модель, но многие скажут, что она довольно устарела - преимущества, которые вы получаете, сохраняя доступ к своим данным в одном месте и позволяя своим администраторам баз данных владеть базой данных, были перехвачены новыми преимуществами ORM, которые дают разработчикам хороший объект. ориентированные методы работы с данными с соответствующими преимуществами с точки зрения времени разработки и прозрачности.

(Мне не очень интересно комментировать, насколько правдивым является вышеприведенный абзац - я просто пытаюсь представить некоторые мнения сообщества. В настоящее время я использую ORM, но также могу с радостью вернуться к подход к шлюзу)

1 голос
/ 22 июля 2017

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

  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'];
1 голос
/ 10 сентября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...