Попытка писать в ООП. Вопрос во взаимодействии классов с БД

Статус
В этой теме нельзя размещать новые ответы.

Absinthe

жожо
AmdY, а Вы не правы. Такие понятия как "прекрасен" или "ужасен" весьма субъективны. Обоснуйте свое утверждение. Что Вы имеете в виду, когда пишите "код ужасен"?
То, что код ужасен. Это всем и сразу понятно. И автору кода, поэтому он и попросил оценку.
Более того, даны инструкции как исправить код.

Не понимаю причину такой попоболи: все по делу и конструктивно.
 

Sufir

Я не волшебник, я только учусь
AmdY, а Вы не правы. Такие понятия как "прекрасен" или "ужасен" весьма субъективны. Обоснуйте свое утверждение. Что Вы имеете в виду, когда пишите "код ужасен"? Кому-то нравится перенос фиговых скобок на новую строку, а кого-то (например меня) раздражают вертикальные файловые простыни с кучей лишних строковых переносов. Кто-то требователен даже к тому, чтобы выводы ошибок были унифицированы, а кому-то оно менее чем равнозначно. Собственно, по делу бы лучше высказывались...
Прав, прав... Код действительно ужасен и обижаться тут вообще причин никаких нет. Не в тебе дело. Я вот открываю свой код, который полгода-год назад писал и вижу, что он ужасен. Думаю "нафига так", "а это что ещё тут", "это я так сделал вообще"? Ну, ужасен же, что ж мне на себя обижаться?

И по поводу "простыни" не совсем верно. "Простыня" это плохо, но не скобки её создают. Есть простые (и не очень) принципы ООП, да и программирования вообще и приёмы рефакторинга. В частности единая ответсвенность делает классы и методы (и функции, если не ООП да и вообще всё, модули, переменные, всё должно иметь одну единственную ответсвенность) понятнее, проще изменяемыми и поддерживаемыми и т.д. Большие классы (как и методы, функции и т.д.) имеет смысл делить на более мелкие. В общем много всяких тонкостей и нотация это мелочь, от нотации требуется только её соблюдение, а какую выберешь не суть важно. Тебе посоветовали уже хорошие книги, там всё описано. Фаулер, Шлоссенгейл, (Граббер по SQL), "банда четырёх" по паттернам, "Совершенный код" Макконнелла и т.д. - это всё классика и основа (foundation).
 

Sufir

Я не волшебник, я только учусь
С другой стороны, я вспоминаю как ужасно сам тупил, банально не понимая даже разницы между $object->method() и Class::method() - тогда бы для меня "Шлоссенгейл" (я уж не говорю про "Рефакторинг" и "Паттерны") были бы так-же как и какие-нибудь учебники по ракетостроению... Действительно лучше всего будет взять цикл статей (я не знаком с предложенными, но думаю вполне подойдут) или готовый фреймворк и опять же потихоньку разбираться по статьям и мануалам. А уж там, возможно, и сам захочешь почитать то, что "не пошло" раньше и воспринимать будешь иначе.

Так или иначе, но твой подход вряд ли даст результат. Это выглядит как-то так: "говорят сейчас на огне готовить модно... Ну, я тоже решил попробовать. Короче я нашел кремень, вот посмотрите, правильно я им искру высекаю?" Так или иначе один человек не способен пройти весь путь развития человечества, так и один программист не сможет пройти весь путь развития программирования. Просто жизни не хватит, даже если хватит ума. Поэтому бросай "кремень", бери статьи, книги, фреймворки (или как минимум какие-то ОРМ, квери билдеры, AR) и вперед.
 

AmdY

Пью пиво
Команда форума
Какая может быть толерантность, когда у человека элементарнейшие ошибки и он не удосужился прочитать даже мануал по ООП синтаксису и проверить свой код на ошибки
PHP:
private $db_host = 'localhost';
private $db_name = 'name';
private $db_username = 'user';
private $db_password = 'password';
Обязательно нужно захардкодить значение доступов и сделать их без вохзможности переобределить в наследниках, конфиги вообще придумали трусы.
PHP:
if (mysqli_connect_errno()) {
        printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error());
        exit;
Конечно, пользователю нужно показать что не так у вас с базой данных, а лучше ещё показато данные для доступа, чтобы он проверил подходит ли логин-пароль.
PHP:
return $this->mysqli;
Конечно, отличное решение для конструктора, хорошо хоть код не работает, а так создаём DBConnection, а получать должны были mysqli?
PHP:
class Article {
  $this->link = new DBConnection;
Это работает?
PHP:
public function SelectFromBase () { // какие-то действия по выборке из базы
        $row = $link->sql_query("SELECT * FROM `articles` WHERE `id` = '$id'", 'fetch_assoc');
А это работает? Откуда берутся $link и $id

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

p.s. Уважай других, приводи нормальны код без синтаксических ошибок и тогда тебя будут уважать.
 

hell0w0rd

Продвинутый новичок
https://github.com/nkt/flame - ТС вот можешь почитать) Там даже QB не до конца допиленный есть, и код тестами покрыт. Идея плейсхолдеров - выжимка из всего, что на форуме обсуждали по этой теме.
 

fixxxer

К.О.
Партнер клуба
hell0w0rd, да хоть как назови ;)

bool PDOStatement::execute(array?)
Statement Statement::execute(array?)

ататат. :)
 

Вурдалак

Продвинутый новичок

Страшный Злодей

Бывший член клуба (достало хамство).
Страшный Злодей, в данном случае вполне объективно, на code review под каждой второй строчкой были бы комментарии с претензиями. Я потому ссылки и дал - посмотри, как опытные люди делают пошагово, вникнешь, сам увидишь что не так - тут вопрос опыта. Ты главное лично не воспринимай, "твой код фигня" не есть "ты дурак" вовсе, это как на преподавателя обижаться за то что двойку поставил. А что тут без политесов - так уж тут принято, в этом есть и своя прелесть =)
fixxxer, я действительно благодарен Вам за столь примирительный пост и я конечно ни в коем случае ни на кого не обижаюсь. Справедливо подмеченное Вами неравенство между "твой код фигня" и "ты дурак" для меня так-же очевидно, как очевидно и то, что я не обвинял AmdY, в попытке это уровнять. Тут немного другое. Мне кажется логичным, что после утверждения - "твой код ужасен" (которое таки предполагает эмоциональный оттенок), должно последовать четкое обоснование, что именно автору утверждения показалось ужасным. В противном случае, данное замечание перестаёт нести смысловую нагрузку, т. е. становится бессмысленным и пустым. После этого, становится сложно воспринимать такие вещи иначе, чем убогую попытку автора тешить чувство собственной важности за счет принижения оппонента.
 

Absinthe

жожо
Мне кажется логичным, что после утверждения - "твой код ужасен" (которое таки предполагает эмоциональный оттенок), должно последовать четкое обоснование, что именно автору утверждения показалось ужасным.
Все ошибки типичные, и много раз тут обсуждались.
Поэтому он просто решил в очередной раз одно и то же не повторять.
Его поведение логично.

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

Страшный Злодей

Бывший член клуба (достало хамство).
Какая может быть толерантность, когда у человека элементарнейшие ошибки и он не удосужился прочитать даже мануал по ООП синтаксису и проверить свой код на ошибки
PHP:
private $db_host = 'localhost';
private $db_name = 'name';
private $db_username = 'user';
private $db_password = 'password';
Обязательно нужно захардкодить значение доступов и сделать их без вохзможности переобределить в наследниках, конфиги вообще придумали трусы.
PHP:
if (mysqli_connect_errno()) {
        printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error());
        exit;
Конечно, пользователю нужно показать что не так у вас с базой данных, а лучше ещё показато данные для доступа, чтобы он проверил подходит ли логин-пароль.
PHP:
return $this->mysqli;
Конечно, отличное решение для конструктора, хорошо хоть код не работает, а так создаём DBConnection, а получать должны были mysqli?
PHP:
class Article {
  $this->link = new DBConnection;
Это работает?
PHP:
public function SelectFromBase () { // какие-то действия по выборке из базы
        $row = $link->sql_query("SELECT * FROM `articles` WHERE `id` = '$id'", 'fetch_assoc');
А это работает? Откуда берутся $link и $id

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

p.s. Уважай других, приводи нормальны код без синтаксических ошибок и тогда тебя будут уважать.
AmdY, отвечая в Вашем же стиле "цитата - коммент", пройдусь по пунктам:
Обязательно нужно захардкодить значение доступов и сделать их без вохзможности переобределить в наследниках, конфиги вообще придумали трусы.
А разве я (или кто-либо другой) не свободен назначать свойства объектов удобным мне способом? С чего Вы взяли, что у этого прототипа класса должны быть наследники? С чего Вы вообще решили, что существует только один, ведомый именно Вам, способ организации уровня доступа к свойствам? И наконец, иллюстрирует ли это Ваше замечание то, что "код ужасен"?

Конечно, пользователю нужно показать что не так у вас с базой данных, а лучше ещё показато данные для доступа, чтобы он проверил подходит ли логин-пароль.
Да, дорогой AmdY, я уверен в этом на 100%, потому, что единственным пользователем этого прототипа буду я. Нужно быть очень "иным", чтобы принять приведенную мной схему, за проект реального приложения, уж хоть по вариативным комментам можно было понять это?

А это работает? Откуда берутся $link и $id
AmdY, меня удивляет, как Вы забили спросить о том, работают ли в том коде указанные ниже методы:

Код:
public function WriteToBase ( ) { ... }
public function ReadFromBase ( ) { ... }
public function CheckInBase ( ) { ... }
public function RemoveFromBase ( ) { ... }
Если этот вопрос Вас все-таки мучает, то предупрежу ответом - нет мой дорогой AmdY, данные функции не работают, они предназначены исключительно для иллюстрации решаемой задачи.

ты задаёшь вопрос и приводишь какой-то бредокод, который даже не почистил от синтаксических ошибок. Вот это неуважение и хамство.
Вы не перестаете удивлять, как говориться Вашими же словами будем судить Вас:
захардкодить значение доступов и сделать их без вохзможности переобределить в наследниках
ну если Вы действительно имели в виду "переоБРЕДеление", то поясните значение слова "воХможности"? Или готовы признать, что таким образом хамите и проявляете неуважение к участникам форума или лично мне?

Поясните также, чем смутила моя фраза:
"Всегда писал в процедурном стиле и все устраивало."
Мое признание того, что ранее обходился без ООП, пробуждает в Вас скрытые инстинкты?

Ну и все же, AmdY, наверное я должен перед Вами извиниться за свою подпись, ведь "Уважаемый член клуба" это далеко ни так изысканно как журчащее "пью пиво"...
Впрочем, учитывая, что Вы входите в "команду форума", я не буду сопротивляться и готов первое слово своей подписи заменить на "бывший".
Хотя на самом деле, мне будет очень грустно от того, что это сдалает невозможным мое общение с такими достойными людьми как WMix, fixxxer и Balancer.
 
Последнее редактирование:

Страшный Злодей

Бывший член клуба (достало хамство).
Статус
В этой теме нельзя размещать новые ответы.
Сверху