Intereting Posts
Получить все фотографии из Instagram, которые имеют определенный хэштегов с PHP Jquery отправляет массив ключей / значений в PHP str_replace не работает для некоторых случаев Поиск регулярного выражения Mysql без повторяющихся символов Символьные данные MySql Как разобрать блок комментариев PHP-стиля PHP? Повторяющиеся повторения таблиц в PHP возникают проблемы с регулярным выражением zend validator для числа – целое или необязательное значение float PHP-команда shell_exec () не работает для моего настраиваемого Java-приложения5 Laravel 4: Как получить выбранные / конкретные столбцы во многих отношениях? Расширить класс запроса в Laravel 5 PHP: регулярное выражение для игнорирования скрытых кавычек в кавычках Вывод элементов массива случайным образом с помощью PHP Получить папку загрузки и имя файла из браузера всплывающее окно на основе входного значения php

Как эффективно создавать классы объектов при работе с табличными объединениями?

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

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

Когда я узнал об объектах, классах и т. Д., Основные экзамены преподавателя охватывали идею о том, что, как правило, каждая таблица базы данных должна иметь свой собственный класс. Хотя это хорошо сработало для проекта фотогалереи, который мы написали, поскольку у него были очень простые запросы mysql, он не работает так хорошо, что теперь мои проекты становятся более сложными. Если мне нужны данные из двух отдельных таблиц, для которых требуется соединение таблицы, я вместо этого игнорировал класс и обрабатывал его в каждом конкретном случае, ИЛИ, что еще хуже, объединяло некоторые данные в класс, а остальное как отдельный объект и выполняет два запроса, что для меня кажется неэффективным.

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

Итак, как я могу получить от моего нынешнего состояния дел что-то немного менее «глупое» из-за отсутствия лучшего слова. Прямо сейчас у меня есть класс DB, который имеет дело со значениями соединения и экранирования и т. Д., Класс запроса родительского db, который имеет дело с общими запросами и методами, и все другие классы (Thread, Upload, Session, Photo и те, которые не являются используемые Почтой, Пользователем и т. д.) являются детьми этого.

Я могу создать класс больших сообщений, который имеет соответствующие дополнительные атрибуты, которые я извлекаю из таблицы пользователей (и потенциально потоков)?
Есть ли у меня отдельные классы, которые заполняют каждый из их соответствующих атрибутов одним запросом? Если да, то как мне это сделать?
Из-за того, как мои классы написаны, на основе того, чему меня учили, моего метода строки обновления db или метода вставки, как просто взять атрибуты в виде массива, так и обновить все это, если у меня есть дополнительные атрибуты из других таблиц db в каждом класс, то как я могу переписать эти методы, так как ошибка, автоматически обновляемая автоматически, приведет к ошибкам?

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

Редактировать:

Спасибо за ответы, они дали мне много указателей и мыслей и много материала для чтения. Что бы мне хотелось, может быть, это идея о том, как разные люди решили обрабатывать простое соединение таблицы с любым количеством классов? Вы добавляли атрибуты к классам? Запрос извне класса затем передать результаты в каждый класс? Что-то другое?

Были написаны целые книги о том, как создать набор классов для соответствия схеме базы данных.

Короче говоря: нет единого способа, чтобы сделать это, вы должны принять множество проектных решений о компромиссах, которые вы хотите сделать на основе приложения-приложения.

Вы можете найти библиотеку или фреймворк, чтобы помочь, ключевые слова: ActiveRecord, ORM (Object Relational Mapper)

PS Вы не представляете возможности для анализа паралича анализа смерти и над дизайном, в который вы можете попасть. Сделайте простейшую вещь, которая может работать для вашего приложения.

Пример кода для моего (ниже) комментария:

$post = new PublishedPost($data); $edit = $post->setTitle($newTitle); $edit->save(); 

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

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

Там, где становится сложно, когда вы начинаете решать несоответствие импеданса между базой данных и бизнес-объектами в вашем приложении. Для этого существует ряд шаблонов сопоставления объектно-реляционных поведенческих, структурных и метаданных, таких как карты идентичности, «ленивая загрузка», «объекты запросов», «репозитории» и т. Д. Объяснение этих данных выходит за рамки. Они покрывают почти 200 страниц в PoEAA.

То, что вы можете посмотреть, это Doctrine или Propel – два самых известных PHP ORM – которые реализуют большинство этих шаблонов и которые вы можете использовать в своем приложении для замены текущей обработки доступа к базе данных.

На многие из ваших проблем можно ответить, проверив существующие решения, найденные в проверенных инфраструктурах, таких как CakePHP , Symfony и Zend Framework . Изучая их подходы и подглядывая под капот, нужно пролить свет на ваши вопросы. Кто знает? Возможно, вы даже решите писать будущие проекты, используя их!

Они провели годы, объединив свои головы, чтобы решить эти проблемы. Воспользуйтесь преимуществами!

Оформить заявку Доктрина:

Ниже приведен пример приложения для форума с использованием Doctrine.

http://www.doctrine-project.org/documentation/manual/1_2/en/real-world-examples#forum-application