Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильная организация классов 
:(
    Опции темы
VanHelsing
Дата 5.6.2013, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Здравствуйте. Для учебной работы выполняю привет по учету путевых листов автотранспорта. Создаю несколько классов для работы с автомобилями, один родительский и несколько дочерних - грузовые автомобили, автобусы. 
При выполнении конструктора хотелось бы сразу записывать данные в БД. Для работы с БД имеется так же отдельный класс, который хранит массивы структур таблиц. 
Скажите пожалуйста правильно ли будет внутри класса автомобилей создавать экземпляр класса базы данных и производить запись внутри конструктора.
Также немного не понимаю как правильнее организовать считывание информации из БД, таким образом, чтобы возвращался экземпляр класса автомобили (думаю тут необходимо использовать статический метод).
Подскажите правильно ли я думаю.


--------------------
PM MAIL   Вверх
Urfin
Дата 5.6.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 27.10.2006
Где: хохляндия

Репутация: нет
Всего: 1



Неправильно вы думаете.
Во-первых для автотранспорта достаточно создать всего 1 класс.
И зачем в классе хранить массив структур таблиц, если вы используете БД???
Работать надо напрямую с БД.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL WWW ICQ   Вверх
krundetz
Дата 5.6.2013, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(VanHelsing @  5.6.2013,  08:27 Найти цитируемый пост)
При выполнении конструктора хотелось бы сразу записывать данные в БД.

Не верный подход, так как тогда вам потребуется дополнительные классы для работы с данными уже находящимися в БД. Тоесть один класс с данными который сразу запихивает их в БД при инициализации и второй который с такими же в точности данными но не записывающий их в БД при инициализации. Лучше запись в БД вынесете в отдельный метод. insert() например.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
ksnk
Дата 5.6.2013, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Деталей мало. smile 

Давай планировать со стороны пользователей.
Насколько я понял, требуется завести кучу машин, с разными свойствами. И отслеживать в более-менее реальном времени где они находятся и что делают?
То есть клиентские надобности примерно такие
  •  отметить, что машина X находится в пункте Y под загрузкой/ ждет пассажиров/ стоит порожняком/ в аварии и т.д.
  •  вывести список машин по пунктам, по состоянию - свободен, будет-свободен-скоро, авария и т.д.
 

При реализации второго пункта отсутствует надобность писать в базу какую-то информацию, а использовать объект "автомобиль", вероятно, захочется. Тоесть в конструкторе запись в базу делать не надо, а надо где-то в более удобном месте.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
VanHelsing
Дата 5.6.2013, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Спасибо за ответа.
А насколько правильно будет использовать отдельный класс для автомобиля и отдельный класс для работы с базой данных?


--------------------
PM MAIL   Вверх
ksnk
Дата 5.6.2013, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



При планировании системы классов нужно исходить из возможности повторно их использовать. 
К примеру, самодельный класс базы данных захочется использовать еще где-то, однако сделать его достаточно универсальным не очень просто. Для первого проекта пока непонятно что такое универсальность и заморачиваться этим не стоит. Просто нужно смирится с тем фактом, что самодельные классы придется переписывать снова и снова. ;) 
В качестве первого варианта класса базы данных разумно взять PDO и не мастерить своих велосипедов. 
 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
krundetz
Дата 5.6.2013, 11:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(VanHelsing @  5.6.2013,  10:14 Найти цитируемый пост)
А насколько правильно будет использовать отдельный класс для автомобиля и отдельный класс для работы с базой данных?

максимально правильно.

Дело в том что система может жить очень долгое время и может возникнуть ситуация когда мы решим поменять БД. В случае если у нас работа с БД прописана напрямую в каждом классе, мы получим много работы по изменению каждого класса. В случае если у нас вся работа с БД прописана в отдельно классе и остальные классы взаимодействуют с БД через него, то переписать нам нужно только этот класс. Писать его не стоит можно задействовать уже существующий например PDO.

Это сообщение отредактировал(а) krundetz - 5.6.2013, 11:38


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
VanHelsing
Дата 9.6.2013, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Приступил к реализации приложения и сразу столкнулся с вопросом о правильности применения классов. Например у меня созданы классы водитель и автобус. Например класс водитель:
Код

class Driver {
    
    private $id;
    private $first_name; //имя
    private $second_name; //фамилия
    private $telephone; //сотовый телефон
    private $age; //возраст
    private $status; //статус
    private $model; //модели автобусов, которыми управляет
    
    public function __construct($name, $famili, $tele, $age, $status, $model) {
        $this->first_name = $name;
        $this->second_name = $famili;
        $this->model = $model;
        $this->telephone = $tele;
        $this->age = $age;
        $this->status = $status;              
    }
    
}

У меня есть страница на которой выводятся данные из таблицы "Водители", а также возможно осуществление добавление, редактирование и удаление записей. Вот например код вывода информации (в качестве библиотеки для работы с базой данный выбрана adoconnection)/
Код

require_once 'adodb5/adodb.inc.php';
                        require_once 'class/config.php';
                        $conf = new Config();
                        $db = ADONewConnection('mysql');
                        $db->Connect($conf->BASE_URL, $conf->DB_USER, $conf->DB_PASS, $conf->DB_NAME);
                        $query = '';
                        $res = $db->Execute($query);
                        if($res && $res->RecordCount()>0) {
                            //проверяем что значения в таблице имеются
                            while (!$res->EOF) {
                                echo "<tr>";
                                echo "<td>".$res->fields['id']."</td>";                            
                                echo "<td>".$res->fields['fio']."</td>";
                                echo "<td>".$res->fields['name']."</td>";
                                echo "<td>".$res->fields['telephone']."</td>";                            
                                echo "<td>".$res->fields['age']."</td>";                                                            
                                echo "<td>".$res->fields['status']."</td>"; 
                                echo "<td>".$res->fields['model']."</td>"; 
                                echo "<td><input type='checkbox' name=".$res->fields['id']."></td>";
                                echo '</tr>'; 
                            }
                        } 

Также есть код, который добавляет и редактирует данные, значение предаются через AJAX и скрипт только добавляет или редактирует данные. Проблема в том, что я даже не представляю где здесь применить созданные классы, а главное сделать это правильно.
Надеюсь на помощь!


--------------------
PM MAIL   Вверх
ksnk
Дата 9.6.2013, 19:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



ООП - это просто взгляд на мир, который позволяет разбить программу на кирпичики.
Каждый кирпичик, при желании, можно вытащить и воткнуть в другой проект. 
Логика каждого кирпичика обозрима и доступна для понимания, в отличии от логики целостной программы. 
Зато логика программы,состоящей из кирпичиков, тоже обозрима.
Идеальный класс занимает небольшое количество(одну?) страниц  на экране.  Каждый класс находится в одном файле. И так далее, и тому подобное.

Если переписать эти 22 строки на классы, выгоды не будет ни в эффективности, ни в размере. Это такой парадокс программирования  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
VanHelsing
Дата 10.6.2013, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Спасибо за ответы. Возможно кто-нибудь подскажет как увеличить сложность приложения, чтобы было возможно использовать классы?
Буду очень благодарен.


--------------------
PM MAIL   Вверх
Arantir
Дата 10.6.2013, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(VanHelsing @  10.6.2013,  18:31 Найти цитируемый пост)
Возможно кто-нибудь подскажет как увеличить сложность приложения, чтобы было возможно использовать классы?
Вы как-то задом наперед смотрите на проблему...
Обычно использование классов и усложнение структуры приложения естественным образом вытекает из необходимости соответствовать поставленной задаче. А вы хотите усложнить программу просто для того, чтобы использовать классы.

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

На PHP еще труднее вникнуть ООП. Потому что приложение не выполняется в реальном времени, а отрабатывает, выдает браузеру код и завершается. Грубо говоря — одна большая функция. По этому, по сравнению с постоянно работающим приложением, тут многие приемы не приносят особой выгоды.

Вот в чем именно заключается выгода от выделения водителя в отдельный класс? Сначала задать ему значения полей, чтобы через пару строчек их оттуда вынуть? Так и простого массива достаточно...
Простой класс, представляющий какую-то сущность, как Ваш Driver, в PHP просто негде использовать в полной мере. Будь это долгоработающее приложение, то объекты можно было бы собирать в коллекции, хранить их, перебирать, менять обрабатывать и сохранять по требованию. А с одноразовой отработкой кода такой класс стает только лишней прослойкой.

Классы, отображающие сущности из базы данных, обычно используются в ORM. Тут объект класса становится прямым его отображением из БД. Изменение такого объекта автоматически изменяет его состояние в базе. Таким образом программа не работает с базой на прямую, а работает только лишь с объектами. А обращения в БД автоматизированы в базовых классах ORM, или уточнены классах-наследниках (представляющих объекты из БД).



--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.