Как грамотно сформировать структуру проекта на PHP?
Вопрос получился несколько общим.
Не так давно занимаюсь разработкой на PHP. В основном - структурное программирование, ООП приходилось использовать не много. Принципы, вроде, понимаю. Но вот логически иногда путаюсь.
Суть:
Хочу реализовать свой небольшой проект. Из ближайших аналогов - twitter, но не по смыслу, а по структуре. Будет класс пользователей, абстрактный класс добавляемых "публикаций" (разного вида).
Основной вопрос - как грамотно организовать работу с БД? Логично было бы, как мне кажется, написать для это свой класс, но я не очень понимаю, как с ним работать в таком случае? Например, есть у момего пользователя метод getPublication, который должен делать запрос к БД и получить все его публикации, как мне обращаться к БД? Создать метод "q" (например), в который передавать в качестве параметра запрос к БД? А этот метод должен каждый раз обращаться сначала к методу коннекта к БД? А в конце закрывать соединение, обращением к методу закрытия?
До этого имел опыт только с микро-фреймворком Flight, в котормо нет класса для работы с БД, и с самописным (чужим) фреймворком, в котором объект sql был глобальным. Такой способ мне не нравится.
Фреймворки не использую, потому что хочется самому написать, дабы разобраться.
Я понимаю, что вопросы не чёткие и несколько глуповатые, но хотелось бы, как я уже сказал, разобраться нормально.
Спасибо
Если хотите написать свою ORM, то возьмите пару уже готовых из каких-нибудь фреймворков, посмотрите как они устроены, возьмите лучшее из них и напишите свою). Еще рекомендую почитать вот эту книжку Фаулера www.williamspublishing.com/Books/5-8459-0579-6.html , главы 3, 9, 10 - там именно то, о чем вы спрашиваете.
Подобный вопрос про организацию взаимодействия с БД задают часто.
Если в кратце, то есть два популярных шаблона DataMapper и ActiveRecord. Первый считается более правильным с точки зрения канонов ООП.
Как и многие я тоже в своё время писал свой микрофреймворк (да и использую время от времени).
Можете посмотреть на мою незамысловатую реализацию DataMapper (DAO): базовый класс и потомок