|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.02.2016, 20:22 | #1 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
Классы - когда использовать
Привет!
Подскажите по классам. ООП выглядит привлекательно, с одной стороны. Всё красиво и работает. Вот только есть особенности. Предположим, что нужно сделать подключение к базе. Можно написать просто 4 переменных $host,$db,$login,$password и подключиться через функции mysql_*, а можно сделать объект типа $MyDbConnection. $MyDbConnection->query()... Возникает вопрос - не выглядит ли это перегруженным, не совсем естественным? Точнее - что за объект нужен - база данных, подключение, что-то другое? Часто вижу в примерах по ООП перегруженные вещи, где есть и база, и подключение и дополнительные обёртки. Главное, иногда непонятно, кто вызывает код - сам объект, или над ним что-то делают, то есть объект активный или пассивный. $MyDbConnection->query()... $MyDb->query()... То ли сама база вызывает метод, то ли программист вызывает у объекта метод. Сделано с попыткой соответствия реальным объектам в мире, а получается искусственно (иногда). Функция если - то просто: "выполнить подключение". mysql_... Мы знаем, что скрипт подключится к серверу и что-то сделает. А тут? Написано много по этой теме, но есть вопросы. Может появиться желание вообще всегда делать объекты, но это напоминает усложнение, т.к. есть принцип KISS. Из плюсов видна возможность поместить всю функциональность в объект, и если что-то изменится, то автоматически изменится во всём проекте, не надо переделывать ничего. Из "странностей" - что означает "метод объекта" - к примеру бильярдного шара? У самого шара никаких методов нет - и с этой стороны это кажется искусственным. Получается, что это "ТО, что можно сделать над шаром"? Или это то, что делает сам шар? ---- ADD: получается, что класс имеет смысл делать только если планируется создавать в программе много объектов такого типа, вида? Именно много, а если один (или в одном файле), то можно и не делать/использовать класс? Последний раз редактировалось vinniepooh; 20.02.2016 в 20:24. |
20.02.2016, 21:48 | #2 |
Пользователь
Регистрация: 23.05.2012
Сообщений: 34
|
Принцип KISS подразумевает использование классов и объектов. Мне помог разобраться в теме данный учебникhttp://www.ozon.ru/context/detail/id/33506422/
|
20.02.2016, 22:03 | #3 |
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
Я не считаю себя знатоком ООП, но все же напишу как я это вижу. Пишется класс для соединения с БД и выполнения запросов. Все в одном классе. Данные о соединении читаются из конфига. Для каждой БД своя секция в конфиге. Соединение к конкретной бд запихиваем в синглтон, чтобы не плодить коннекты. В модели, там где нужно работать с этим классом пишется примерно следующее
Код:
Последний раз редактировалось Gorychev; 20.02.2016 в 22:11. |
21.02.2016, 17:05 | #4 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
Мне только что пришла мысль, что класс имеет делать смысл тогда, когда система может расширяться, что-то появляться, новое.
Это даже видно по фигурным скобкам - они как бы разрешают масштабирование. А вот квадратные как у массива - ориентированы на входные данные известных заранее объёмов. Хотя если баз несколько, почему бы не обойтись массивом, пусть и динамическим? В данном случае я говорю о том, когда 1 база, известная заранее. А параметры ее могут быть переменными (имя, хост, логин, пароль). Можно ее в настройках сделать, тоже чтобы из файла читалось (ну или в коде жестко забить). В конце концов почему бы не читать из текстового файла несколько баз, если уж они есть? Ну то есть объект нам нужен в зависимости от ТЗ - если там что-то может появляться, то делаем класс. Если заранее чётко фиксировано - пусть и динамическое - то обойтись можем текстом, строками, массивами, файлами. |
21.02.2016, 17:16 | #5 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
// $DB = new MySuperDbClass('db_name');
спасибо. Класс - это шаблон объекта. В чём основной смысл создания шаблона? По идее можно сделать ассоциативный массив, а не объект. Тогда будет так: $db[$host], $db[$pass], и т.п. В расчёте на возможное добавление свойств только (создание объектов?)? Или объект берём тогда, когда сложность структуры объекта реального не позволяет обойтись массивом? Тогда как бы объект содержит в одном целом все параметры. |
21.02.2016, 17:19 | #6 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
Или же вообще - делаем объект и всё тут, потому что так принято. И не важно, почему функции содержатся внутри - просто это удобно может быть.
|
21.02.2016, 17:20 | #7 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
Итого: массив, если заранее известны ограничения и не предвидится увеличение серьезное, а объект если может добавляться что-то из свойств и т.п., система планирует развиваться. Так?
Или даже более важно, что чтобы никто не мог изменить снаружи это. Последний раз редактировалось vinniepooh; 21.02.2016 в 17:23. |
21.02.2016, 19:30 | #8 |
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
Что то у вас вопросы в разброс пошли.. Как бы класс работы с БД обязательно нужен. Если не хотите, чтобы ваш код не превратился в спагетти из коннектов и запросов. О каком массиве вы толкуете, не могу понять. Выражайте более четко свои мысли. Если сделать как я написал, то ничего глобального дописывать потом не придется. Тренируйтесь. И да, почитайте учебники, у вас плохо с теорией. Функции внутри класса, называются методами
Последний раз редактировалось Gorychev; 21.02.2016 в 19:32. |
21.02.2016, 19:45 | #9 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
21.02.2016, 20:19 | #10 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
Да, вот сегодня как раз подумал про спагетти. Собственно, всё это делается ради отсутствия оного? Т.е., для удобочитаемости, производительности, масштабируемости?
Класс работы с БД, вот это оно. Тут важно понять, почему класс работы, а не отдельные классы - сама БД, класс коннекта и т.п. Потому что можно сгруппировать максимально и в один объединить? Хотя ведь БД может быть тоже объектом (классом). Но можно ведь остаться в рамках процедурного программирования. Правда, тогда будет: Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Когда стоит использовать постоянные соединения с Mysql? | Illusiony | PHP | 5 | 13.10.2015 18:45 |
ООП - когда стоит использовать классы ? | A9050 | Общие вопросы C/C++ | 10 | 25.02.2013 17:04 |
Когда нужно использовать ООП? | leklerk | Общие вопросы по программированию, компьютерный форум | 49 | 01.06.2012 09:09 |
Не будет ли ошибкой использовать инвок для случаев, когда он не требуется? | gramp | C# (си шарп) | 4 | 18.04.2012 20:41 |
сортировка, когда невозможно использовать свойства таблицы IndexFieldName | Римма | БД в Delphi | 5 | 07.09.2007 10:56 |