Этот ответ, как и большинство шаблонов, на самом деле отвечает только моей интерпретации, большая часть того, что я говорю, основана на Active Record и Таблица данных Gateway описания на сайте Мартина Фаулера.
Ключевые кавычки о шлюзе табличных данных:
Объект, который действует как шлюз (466) для таблицы базы данных. Один
Экземпляр обрабатывает все строки в таблице.
А это по поводу Active Record:
Объект, который упаковывает строку в таблицу или представление базы данных, инкапсулирует
доступ к базе данных и добавляет доменную логику к этим данным.
Таким образом, на простейшем уровне шлюз табличных данных абстрагирует таблицу базы данных, а Active Record переносит строку из таблицы.
Другой ключевой момент, который я понял из чтения, состоит в том, что объекты Active Record являются объектами домена, то есть объект, который вы вызываете Update () для сохранения изменений в базе данных, также является объектом, содержащим бизнес-логику. В случае шлюза табличных данных это не так, шлюз обычно действует как слой, который преобразует выходные данные вызовов вашей базы данных в объекты домена, и когда вы хотите сохранить изменения в этих объектах, вы передаете обратно шлюзу и сообщаете шлюз для сохранения.
Наконец, тот факт, что шлюз табличных данных работает над всей таблицей, важен с точки зрения дизайна и того, как вы думаете о вашем доступе к данным.
Я никогда особенно не использовал Active Record, но работал над большим проектом, который использовал Table Data Gateway в своем дизайне. Это надежная модель, но многие скажут, что она довольно устарела - преимущества, которые вы получаете, сохраняя доступ к своим данным в одном месте и позволяя своим администраторам баз данных владеть базой данных, были перехвачены новыми преимуществами ORM, которые дают разработчикам хороший объект. ориентированные методы работы с данными с соответствующими преимуществами с точки зрения времени разработки и прозрачности.
(Мне не очень интересно комментировать, насколько правдивым является вышеприведенный абзац - я просто пытаюсь представить некоторые мнения сообщества. В настоящее время я использую ORM, но также могу с радостью вернуться к подход к шлюзу)