Ответ 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, но также могу с радостью вернуться к шлюз)