Object Factory Question - использование информации запроса базы данных для создания объектов
У меня есть несколько объектов, таких как продукты, заказ и т. Д. Когда я получаю информацию из своей базы данных, я беру строку и создаю один из типов объектов. Затем я работаю с созданным объектом. Я читал это называется фабрика.
Есть ли какое-то преимущество в этом? Особенно в слабо типизированном языке, таком как PHP?
Спасибо
редактировать: это где я получаю независимость от базы данных? Это то, что по существу делает ORM?
2 ответа
Создавая свои объекты из запросов к базе данных, вы определяете соответствие между вашими объектами и реляционной базой данных. Это именно то, что делает программное обеспечение ORM.
Сделав это и убедившись, что ваши объекты никогда не имеют прямого доступа к базе данных, а вместо этого используют ваши функции / объекты доступа к базе данных, вы защищаете свой код от изменений двумя способами:
Изменения в вашей схеме базы данных не повлияют на ваш код. Вместо этого изменения кода будут находиться только в ваших объектах доступа к базе данных.
Вы можете переключиться на другую СУБД, реализовав новый слой базы данных, который следует тому же интерфейсу, что и исходный. Ваши другие объекты не потребуют изменений.
Я полагаю, в этом смысле вы получаете некоторую независимость от базы данных, но вам, вероятно, будет лучше использовать библиотеку базы данных, которая обеспечивает эту независимость из коробки.
На мой взгляд, преимущество в том, что вы работаете с объектами и получаете все преимущества, которые предлагает объектно-ориентированный язык. Затем вы можете прочитать логику домена на более высоком уровне (с точки зрения объектов, которые вы определили), не просматривая запросы к базе данных. Написание ORM самостоятельно может быть трудным, но есть инструменты, которые помогут с этим.
Я обычно выбираю этот путь, но я не занимаюсь разработкой PHP, поэтому не могу сказать, насколько хорошо он применим к этому языку.
То, что вы описываете, является реализацией уровня доступа к данным - это не похоже ни на образец шаблона фабричного метода, ни на шаблон абстрактной фабрики.
Да, ORM ликвидируют разрыв между объектами и реляционными базами данных и могут служить вашим уровнем доступа к данным. Помните, что любой ORM, который вы используете, имеет определенные плюсы / минусы / ограничения. В зависимости от вашего опыта и требований, написание собственного уровня доступа к данным иногда является хорошей идеей; Не думайте, что вы ДОЛЖНЫ использовать сторонний ORM.
Да, хороший уровень доступа к данным позволяет легко менять механизм хранения (другую базу данных, XML, плоские файлы и т. Д.) Без изменения бизнес-логики, пользовательского интерфейса или другого кода.
Независимо от языков со свободной типизацией или со строгой типизацией, если вы работаете на языке OO, будет гораздо проще писать код с использованием объектов данных (предоставляемых ORM или доморощенным уровнем доступа к данным). Я уверен, что можно написать систему без слоя доступа к данным, где ваш бизнес-уровень будет работать напрямую с базой данных. Но это, вероятно, будет более сложным для реализации и поддержки.