Comments: |
Странно. А почему мы с Вами прекрасно видим имеющуюся избыточность, и нам ООП-стиль не мешает? Я отвечу: потому что знание ООП не превращает ни обезьяну в человека, ни человека в обезьяну. Обезьяна напишет код по-обезьяньи, даже если будет писать на языке, поддерживающем ООП. Но и на ассемблере она тоже по-обезьяньи напишет (я видел, это ужас-ужас).
тут дело в том (на чём она училась) - меня учили сначала на ассемблере.
А его, вероятно, вообще не учили. Вернее, ему прочитали курс "основы программирования", а в качестве языка программирования использовали C++. Ему объяснили, что такое подпрограмма и цикл, но про виртуальные функции, например, не рассказали, потому что это уже не основы программирования. Потом он где-то подсмотрел остальное, и, как умел, скопировал. А умел он по-обезьяньи. В результате на выходе имеем обезьяну с гранатой. И чем лучше граната, тем сильнее окружающим хочется материться.
ну насчёт мощности этой гранаты скажу отдельно (не будет яркого примера кода (будет словестное описание (вы поймёте, а в пост это нельзя было поместить))): ООП прячет реальные действия программы! Вот у меня есть имя метода (увидел глазами в том месте где предположительно должен был быть запрос к базе) надо узнать какой запрос делается. Греплю, нахожу определение. Почти пустое - вызов другого метода другого объекта. И так раза три-четыре. В конце (если повезёт) вижу реальный запрос. Понимаете? Смысл-то программы именно в этом запросе содержится!!! А его обвешали тоннами СЛОВЕСТНОЙ МИШУРЫ (подобно тому (как заказчик преступления отгораживается от исполнителя сотней посредников, и таки этот метод реально работает - редкая птица разберёт эту цепочку)). Вот ООП это и есть метод легко и стильно навешать словестной мишуры.
По-моему, это обычная история: скорость программы приносится в жертву скорости её разработки. Современные языки программирования позволяют это сделать. Но, по-моему, это фича, а не баг.
вот именно, но тонны словесной мишуры - это не бага, а фича. и придумана она всем известно, для чего.
Ну вот не вижу я тут Адской Жопы! Может, Вы упустили какую-либо важную информацию? Например, что поле field1 есть в индексе, который используется при выборке? >Почти пустое - вызов другого метода другого объекта. И так раза три-четыре. Не сыпьте соль на рану :-)
адская жопа в том, что SELECT обращён к серверу БД, а это в общем случае хрен знает где (раз). Полей в таблице десяток а то и больше (два). Фетчить их все в тормознутом пхп в ассоциативные массивы (три). -- И всё это для того чтобы потом _ВЫБРОСИТЬ_ - вот вам главная жопа (как всегда в голове) просто брать и выбрасывать результаты вычислений
Какой кошмар! В запросе, выполняемом аж 100 раз в сутки. База в конкретном случае расположена где-то рядом. Полей в таблице обычно столько, что они влезают в один сетевой пакет. Главные тормоза - чтение базой данных с диска и латентность сети. Если ПХП тормозит настолько, что становится заметен на фоне главных тормозов - нахрена его вообще использовать. Истории кода мы не знаем - может, там было две-три проверки на значения других полей. В общем, я бы так писать не стал, но что этот код - Адская Жопа без всяких оговорок, не согласен.
(молодой человек) вы несёте полную хуйню. и не станете програмистом до тех пор (пока не поймёте (что так писать нельзя никогда, тоесть совсем, даже если бы этот запрос выполнялся 1 раз в год))
P.S. У нас он выполняется 3 раза в секунду (но причина пиздеца не в этом)
перечитал свой комент ниже, просмотрел эту ветвь дискуссии. и вот что хочу еще сказать. в данном случае жопа вообще во всем, что там написано, это верно. но если попытаться разобрать отдельные части кода, как то - сам запрос, то получается, что не всегда "select * ..." является плохим решением так как если работаешь со всеми полями, меньше шансов ошибиться или запутаться. но в данном случае это катастрофа, что ни говори.
бывают также временные коды, которые впоследствии будут оптимизироваться
ага! 4 символа в селект-листе сэкономили - временный код
это какая-то пост-гумманитарная психопатия - вытаскивать из таблицы запись (набор записей) полностью, а возвращать только одно значение. хрен знает, сколько там полей. вдруг тыща? хрен знает, сколько записей прошерстит запрос - вдруг миллион? я понимаю, что при выходе из функции, вроде как, все лишние данные должны уничтожаться и тд, но выделение памяти серверном для обработки запроса плюс "на клиенте" - где выполняется описанный код, может весьма нетривиально сказаться на общей работе. ЗЫ кстати, а почему вынимаем массив? других вариантов нет? хэши (ассоциативные массивы) не изобрели? или это я последние 4 года в perl переиграл и уже не соображаю чего?
Мне встречался уникум, который в качестве "select count(*) from sometable where blah=foo" был кусок кода (цитирую по памяти):
$query = "SELECT * FROM sometable WHERE blah=foo";
$result = mysql_query ($query) or DIE ("!");
$rows_count = mysql_num_rows($result);
unset($result);
$pager = make_pager($rows_count, "SELECT * FROM sometable WHERE blah=foo");
?>
вот это, хоть и уебищное пхп, и я даже в детстве так не писал, но вполне себе код. пока еще вполне. там то речь о совсем других вещах. там показан пример о выборке * и возврате одного значения, чего не следует из приведенного тут пехепе. здесь же в первичном определении запроса, а потом помещении его текста вместо переменной я вижу вполне банальный "копипаст наспех" - ну скопировал не то. суть не изменилась. там же ошибка куда серьезнее.
присмотритесь ВНИМАТЕЛЬНО! в этом коде выбирается вся таблица чтобы посчитать количество записей! это ещё хуже чем выбросить састь полей.
предлагаю повременить бороться с логикой вещей. как я уже писал - из приведенного в этой ветке не следует, что с данными потом произойдет то же, что и в посте. ну понадобилось взять количество записей - вот и взяли. что делали потом - не пишут. а на верху - напротив, сразу же return. или я что-то пропустил и закрытие "?>" означает не окончание блока, где после еще одного "<?" можно снова использовать данные, полученные в этом блоке?
если че, я в пехепе не силен и вы меня поправляйте, ежели ошибся где. из языков для сайтописания специализируюсь лишь на перле.
всё верно, просто неправильно оформленный пример - требует комментариев.
о том и речь. любой "пример в тексте" должен быть достаточно нагляден, чтобы не вызывать лишних вопросов и рассуждений. | |