Не пойму, в чем удобство такого метода написания кода

korchasa

LIMB infected
Активист
А что тут оценивать то? Там хоть логика более-менее сложная была, а тут админка для рассылок с двумя полями и тремя галочками.
Обработку исключений и switch вполне можно было убрать в базовый класс, а не таскать 15 одинаковых строчек в каждом контроллере.
Куча мелких косяков, типа $this->assignData(), разбросанная обработка данных, levels, которые на самом деле группы и т.д.
 

Активист

Активист
Команда форума
> switch вполне можно было убрать в базовый класс
Покажи как бы ты это сделал

> разбросанная обработка данных ?
Де?

> levels, которые на самом деле группы
Нет, это уровень доступа пользователя. Клиент хочет закрытый сайт с возможностью рассылки по уровням доступа. Там есть группы, они другие.

> каждом контроллере
Де контроллер?)
 

korchasa

LIMB infected
>> switch вполне можно было убрать в базовый класс
>Покажи как бы ты это сделал
Вынес бы __do() в базовый класс, откуда бы дергал метод наследника, окружим его try-catch'ем. Ах да, у нас обязательное требование, чтобы урл фигурировал в экшене. Придется использовать рефлексию.

>> разбросанная обработка данных ?
>Де?
subject и body

>> levels, которые на самом деле группы
>Нет, это уровень доступа пользователя. Клиент хочет закрытый сайт с возможностью рассылки по уровням доступа. Там есть группы, они другие.
Ты уж прости, в тексте ошибки у тебя группы. По остальному коду невозможно понять что это.

>> каждом контроллере
>Де контроллер?)
В МэВэСэ.
 

Активист

Активист
Команда форума
Здесь мы говорим не о теории, а о коде.

korchasa
> откуда бы дергал метод наследника
Можно с примером кода, не могу уловить ход мысли.

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

> тексте ошибки у тебя группы
Минус мне в карму.

> В МэВэСэ.
Ну дк это пример модели.

-~{}~ 28.10.10 17:55:

> разбросанная обработка данных
А. Почему вы считаете, что она разбросана, тогда в вашем понимании, не разбросанная это как? Желательно с примером кода.

Б. А разве не модель отвечает за обработку данных? Как раз именно она.

-~{}~ 28.10.10 17:57:

Кстати, здесь я ни в коем случае не спорю, а обмениваюсь опытом.

-~{}~ 28.10.10 18:19:

И еще
> исключение это же когда все пипец, дальше работать ничего не
> будет...
Хм, почему? Они применяются для выхода из блока try для выполнения каких-либо действие , выйти от туда можно и не только когда все пипец работать ничего не будет. Работать ничего не будет это core dump ))

-~{}~ 28.10.10 18:27:

> ну так это основной принцип разделения (?) - функции короче и
> классы как можно меньше.

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

> классы как можно меньше.
Еще один бред, имхо, класс должен быть ровно такой, что бы в нем были описаны все атрибуты и методы для работы с объектом, дробить их попусту - лишняя нагрузка не только на интерпретатор/компилятор но и на мозг. Типичные методы и атрибуты для применения их несколькими классами выносятся в базовый класс.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
спасибо, поржал насчет скобок :)

при выделении кода в классы/методы придерживаюсь принципа fixxxer-а

рефлексия рулит

Активист, код просто выглядит непривычно, странно, но чего ты хочешь?
хочешь доказать, что это не странно, а обычно и удобно? дык субьективно ...
вброс говна на вентилятор? :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: Adelf
метод заканчивается обязательной генерацией исключения? Теперь ты мой идеологический враг
а в питоне даже есть дублирующиеся методы на этот случай!
str.index() и str.find() - аналоги strpos()
index, если не находит, кидает исключение, а find возвращает -1 :)

-~{}~ 28.10.10 13:26:

Автор оригинала: fixxxer
switch - кака
кстати, да - единственное, что меня зацепило ;)
 

Фанат

oncle terrible
Команда форума
Leonid
да, именно скобки на одной строке. я думал меня неправильно понять невозможно.
тебя все еще невозможно понять правильно.

То, что "скобка открывается сразу после условия If или цикла", никак не связано с тем, что "заканчивается в самом начале строки". Ты смешал две проблемы в одну:
несуществующую - отсутствие отступов (отступы должны быть, это не обсуждается)
и несущественную, чистую вкусовщину - на какой строке должна быть открывающая скобка, которая является не проблемой, а типичным холиваром на пустом месте, ничем не отличающимся от вопроса, с какого конца разбивать яйцо.

Для первого случая (если говорить о строке, на которой находится скобка), код должен выглядеть вот так:
PHP:
foreach ($array as $val) {
  if ($val == $c1) {
    $array2[] = intval($c1);
  } else {
    $array3[] = intval($c1);
  }
}
закрываящая скобка находится в той же позиции, что и открывающий оператор. Понять, где находится закрывающая скобка, очень легко.
 

itprog

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

Фанат

oncle terrible
Команда форума
Но, несмотря на несущественность повода, топик плучился на редкость полезный. Поскольку увидеть обсуждение кода, отличного от
$result = mysql_query(...
while ($row = ...
случается довольно редко.
 

fixxxer

К.О.
Партнер клуба
>>Функция применяется исключительно для выполнения действий множество раз

mysql_connect обычно вызывается 1 раз. почему это выделено в функцию?
 

vovanium

Новичок
itprog
т.е. твое лучше чем
А какой смысл в таких классах? и так понятно что этот класс рассылает мыла (из его названия), имхо от того что класс будет выглядеть как
Код:
классРассылающийМыла {
     выбранныеЮзеры = юзеры->выбратьЮзеров();
     отправитьВыбраннымЮзерам(выбранныеЮзеры);
}
Да это коротко и читается, но нафига такое чтение, если даже из названия класса понятно, что для того чтобы отправить мыла нужно выбрать юзеров, а потом отправить им мыла.
А вот чтобы внести какие-то правки, или выяснить, где косяк получается, тебе нужно будет скакать по куче методов и классов, в которых еще вложенные методы и классы, и это дело еще и в разных файлах может быть. Так что я лично не вижу здесь удобства...
 

fixxxer

К.О.
Партнер клуба
Удобство возникает не от того, что ты что-то как-то раскидал. А от работы с объектами, а не с кусками кода. Без OOD, конечно, толку немного. Но когда осознаешь, что ты вообще по сути имеешь дело ТОЛЬКО с объектами, возвращаться назад совсем не хочется =)
 

Активист

Активист
Команда форума
fixxxer
> mysql_connect обычно вызывается 1 раз
Простите, конечно, но в связьке, Master + Slaves x X вы предлагаете что, засунуть код коннекта в mysql_query?

> Все книги говорят не более 20 строк
Засунуть эту бесовскую книгу в печь. Требую цитаты и автора.
 

korchasa

LIMB infected
>> откуда бы дергал метод наследника
>Можно с примером кода, не могу уловить ход мысли.
PHP:
class modulesModel_compact_03 extends modulesModel_compact_02 {
  function __do()
  {
     try
     {
        //кастуем $this->action к имени метода в наследнике. Ну например к admin_index_htm_do()
        $this->$method_name();
     }
     catch(Exception $e)
     {
        //обработчики
     }
  }
}

class subscribeModel extends modulesModel_compact_03
{
   function admin_index_htm_do()
   {
     //тушка
   }
}
>> Придется использовать рефлексию.
>Покажите пример кода, ибо рефликсия в коде мне не знакома, а вот в иных психологических аспектах про эту теорию я слышал.
http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=рефлексия+php

>> В МэВэСэ.
>Ну дк это пример модели.
Ну в какой-то парадигме возможно. В МэВэСэ - нет.

>> разбросанная обработка данных
А. Почему вы считаете, что она разбросана, тогда в вашем понимании, не разбросанная это как? Желательно с примером кода.
Потому что html_special_chars в одном случае при получении данных, во-втором при передаче
 

AmdY

Пью пиво
Команда форума
*****
но к сожалению. наводит на мысль, что всё же проще без ООП :(
 

Активист

Активист
Команда форума
fixxxer
Полностью согласен с
> Удобство возникает
Но дробить классы типа
> не более 20 строк
Ахинея чистой воды.
 

fixxxer

К.О.
Партнер клуба
Классы по 20 строк? Где я это говорил? Класс может быть и в 1 строку и в дофига, если это соответствует обязанности класса.

А про mysql_query я намекал на то, что функция/метод это прежде всего API, и мыслить надо удобством API (как внутреннего так и внешнего), а не тем что там где дублируется или нет.
 

korchasa

LIMB infected
fixxxer
Не надо в дофига, позязя. Видел я один на 6К строк. Я содрогаюсь при мысли о том, сколько он денег обсчитывает.
 

craz

Нестандартное звание
Автор оригинала: vovanium
itprog

А какой смысл в таких классах? и так понятно что этот класс рассылает мыла (из его названия), имхо от того что класс будет выглядеть как
Код:
классРассылающийМыла {
     выбранныеЮзеры = юзеры->выбратьЮзеров();
     отправитьВыбраннымЮзерам(выбранныеЮзеры);
}
Да это коротко и читается, но нафига такое чтение, если даже из названия класса понятно, что для того чтобы отправить мыла нужно выбрать юзеров, а потом отправить им мыла.
А вот чтобы внести какие-то правки, или выяснить, где косяк получается, тебе нужно будет скакать по куче методов и классов, в которых еще вложенные методы и классы, и это дело еще и в разных файлах может быть. Так что я лично не вижу здесь удобства...
а не явно что надо выбрать только пользователей, а вдруг мы должны выбрать не юззеров, а поддомен куда эти юзеры прикреплены?

к примеру у нас будет так xxx.usersClients.domen.name где xxx зарегистрированный клиент,
и вот так xxx.vendor.domen.name где ххх наши вендоры, и одним надо слать одно а другим другое? и как тогда быть?
а если не только мыло, но и смс?
 
Сверху