![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Здравствуйте. Для учебной работы выполняю привет по учету путевых листов автотранспорта. Создаю несколько классов для работы с автомобилями, один родительский и несколько дочерних - грузовые автомобили, автобусы.
При выполнении конструктора хотелось бы сразу записывать данные в БД. Для работы с БД имеется так же отдельный класс, который хранит массивы структур таблиц. Скажите пожалуйста правильно ли будет внутри класса автомобилей создавать экземпляр класса базы данных и производить запись внутри конструктора. Также немного не понимаю как правильнее организовать считывание информации из БД, таким образом, чтобы возвращался экземпляр класса автомобили (думаю тут необходимо использовать статический метод). Подскажите правильно ли я думаю. |
|||
|
||||
Urfin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.10.2006 Где: хохляндия Репутация: нет Всего: 1 |
Неправильно вы думаете.
Во-первых для автотранспорта достаточно создать всего 1 класс. И зачем в классе хранить массив структур таблиц, если вы используете БД??? Работать надо напрямую с БД. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Не верный подход, так как тогда вам потребуется дополнительные классы для работы с данными уже находящимися в БД. Тоесть один класс с данными который сразу запихивает их в БД при инициализации и второй который с такими же в точности данными но не записывающий их в БД при инициализации. Лучше запись в БД вынесете в отдельный метод. insert() например. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Деталей мало.
![]() Давай планировать со стороны пользователей. Насколько я понял, требуется завести кучу машин, с разными свойствами. И отслеживать в более-менее реальном времени где они находятся и что делают? То есть клиентские надобности примерно такие
При реализации второго пункта отсутствует надобность писать в базу какую-то информацию, а использовать объект "автомобиль", вероятно, захочется. Тоесть в конструкторе запись в базу делать не надо, а надо где-то в более удобном месте. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Спасибо за ответа.
А насколько правильно будет использовать отдельный класс для автомобиля и отдельный класс для работы с базой данных? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
При планировании системы классов нужно исходить из возможности повторно их использовать.
К примеру, самодельный класс базы данных захочется использовать еще где-то, однако сделать его достаточно универсальным не очень просто. Для первого проекта пока непонятно что такое универсальность и заморачиваться этим не стоит. Просто нужно смирится с тем фактом, что самодельные классы придется переписывать снова и снова. ;) В качестве первого варианта класса базы данных разумно взять PDO и не мастерить своих велосипедов. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
максимально правильно. Дело в том что система может жить очень долгое время и может возникнуть ситуация когда мы решим поменять БД. В случае если у нас работа с БД прописана напрямую в каждом классе, мы получим много работы по изменению каждого класса. В случае если у нас вся работа с БД прописана в отдельно классе и остальные классы взаимодействуют с БД через него, то переписать нам нужно только этот класс. Писать его не стоит можно задействовать уже существующий например PDO. Это сообщение отредактировал(а) krundetz - 5.6.2013, 11:38 |
|||
|
||||
VanHelsing |
|
||||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Приступил к реализации приложения и сразу столкнулся с вопросом о правильности применения классов. Например у меня созданы классы водитель и автобус. Например класс водитель:
У меня есть страница на которой выводятся данные из таблицы "Водители", а также возможно осуществление добавление, редактирование и удаление записей. Вот например код вывода информации (в качестве библиотеки для работы с базой данный выбрана adoconnection)/
Также есть код, который добавляет и редактирует данные, значение предаются через AJAX и скрипт только добавляет или редактирует данные. Проблема в том, что я даже не представляю где здесь применить созданные классы, а главное сделать это правильно. Надеюсь на помощь! |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
ООП - это просто взгляд на мир, который позволяет разбить программу на кирпичики.
Каждый кирпичик, при желании, можно вытащить и воткнуть в другой проект. Логика каждого кирпичика обозрима и доступна для понимания, в отличии от логики целостной программы. Зато логика программы,состоящей из кирпичиков, тоже обозрима. Идеальный класс занимает небольшое количество(одну?) страниц на экране. Каждый класс находится в одном файле. И так далее, и тому подобное. Если переписать эти 22 строки на классы, выгоды не будет ни в эффективности, ни в размере. Это такой парадокс программирования ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VanHelsing |
|
|||
![]() ХОЧУ ВСЕ ЗНАТЬ!!! ![]() ![]() Награды: 1 Профиль Группа: Участник Сообщений: 288 Регистрация: 3.1.2008 Где: Екатеринбург Репутация: нет Всего: 6 |
Спасибо за ответы. Возможно кто-нибудь подскажет как увеличить сложность приложения, чтобы было возможно использовать классы?
Буду очень благодарен. |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Обычно использование классов и усложнение структуры приложения естественным образом вытекает из необходимости соответствовать поставленной задаче. А вы хотите усложнить программу просто для того, чтобы использовать классы. Не столь большую часть применения ООП занимают те случаи, когда класс представляет объект реального мира. Зачастую классы — это чисто программные сущности. Объяснение, что ООП отображает структуру реального мира, на самом деле от части ложно. ООП намного более мощный инструмент как раз в мире, далеком от реального, — в информационном цифровом мире. На PHP еще труднее вникнуть ООП. Потому что приложение не выполняется в реальном времени, а отрабатывает, выдает браузеру код и завершается. Грубо говоря — одна большая функция. По этому, по сравнению с постоянно работающим приложением, тут многие приемы не приносят особой выгоды. Вот в чем именно заключается выгода от выделения водителя в отдельный класс? Сначала задать ему значения полей, чтобы через пару строчек их оттуда вынуть? Так и простого массива достаточно... Простой класс, представляющий какую-то сущность, как Ваш Driver, в PHP просто негде использовать в полной мере. Будь это долгоработающее приложение, то объекты можно было бы собирать в коллекции, хранить их, перебирать, менять обрабатывать и сохранять по требованию. А с одноразовой отработкой кода такой класс стает только лишней прослойкой. Классы, отображающие сущности из базы данных, обычно используются в ORM. Тут объект класса становится прямым его отображением из БД. Изменение такого объекта автоматически изменяет его состояние в базе. Таким образом программа не работает с базой на прямую, а работает только лишь с объектами. А обращения в БД автоматизированы в базовых классах ORM, или уточнены классах-наследниках (представляющих объекты из БД). -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |