Object Factory Question - использование информации запроса базы данных для создания объектов

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

Есть ли какое-то преимущество в этом? Особенно в слабо типизированном языке, таком как PHP?

Спасибо

редактировать: это где я получаю независимость от базы данных? Это то, что по существу делает ORM?

2 ответа

Решение

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

Сделав это и убедившись, что ваши объекты никогда не имеют прямого доступа к базе данных, а вместо этого используют ваши функции / объекты доступа к базе данных, вы защищаете свой код от изменений двумя способами:

  • Изменения в вашей схеме базы данных не повлияют на ваш код. Вместо этого изменения кода будут находиться только в ваших объектах доступа к базе данных.

  • Вы можете переключиться на другую СУБД, реализовав новый слой базы данных, который следует тому же интерфейсу, что и исходный. Ваши другие объекты не потребуют изменений.

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

На мой взгляд, преимущество в том, что вы работаете с объектами и получаете все преимущества, которые предлагает объектно-ориентированный язык. Затем вы можете прочитать логику домена на более высоком уровне (с точки зрения объектов, которые вы определили), не просматривая запросы к базе данных. Написание ORM самостоятельно может быть трудным, но есть инструменты, которые помогут с этим.

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

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

Да, ORM ликвидируют разрыв между объектами и реляционными базами данных и могут служить вашим уровнем доступа к данным. Помните, что любой ORM, который вы используете, имеет определенные плюсы / минусы / ограничения. В зависимости от вашего опыта и требований, написание собственного уровня доступа к данным иногда является хорошей идеей; Не думайте, что вы ДОЛЖНЫ использовать сторонний ORM.

Да, хороший уровень доступа к данным позволяет легко менять механизм хранения (другую базу данных, XML, плоские файлы и т. Д.) Без изменения бизнес-логики, пользовательского интерфейса или другого кода.

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

Другие вопросы по тегам