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

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

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

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

> каждом контроллере
Де контроллер?)
 
>> 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:

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

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

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

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

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

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

-~{}~ 28.10.10 13:26:

Автор оригинала: fixxxer
switch - кака
кстати, да - единственное, что меня зацепило ;)
 
Leonid
да, именно скобки на одной строке. я думал меня неправильно понять невозможно.
тебя все еще невозможно понять правильно.

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

Для первого случая (если говорить о строке, на которой находится скобка), код должен выглядеть вот так:
PHP:
foreach ($array as $val) {
  if ($val == $c1) {
    $array2[] = intval($c1);
  } else {
    $array3[] = intval($c1);
  }
}
закрываящая скобка находится в той же позиции, что и открывающий оператор. Понять, где находится закрывающая скобка, очень легко.
 
Автор оригинала: Активист
Функция должна быть размером столько, сколько ей нужно для обработки входных данных. Функция применяется исключительно для выполнения действий множество раз
где ты такое вычитал или как к этому пришел? Все книги говорят не более 20 строк и функция должна делать только одну и только одну вещь. При чем тут сколько раз она вызвается?
 
Но, несмотря на несущественность повода, топик плучился на редкость полезный. Поскольку увидеть обсуждение кода, отличного от
$result = mysql_query(...
while ($row = ...
случается довольно редко.
 
>>Функция применяется исключительно для выполнения действий множество раз

mysql_connect обычно вызывается 1 раз. почему это выделено в функцию?
 
itprog
т.е. твое лучше чем
А какой смысл в таких классах? и так понятно что этот класс рассылает мыла (из его названия), имхо от того что класс будет выглядеть как
Код:
классРассылающийМыла {
     выбранныеЮзеры = юзеры->выбратьЮзеров();
     отправитьВыбраннымЮзерам(выбранныеЮзеры);
}
Да это коротко и читается, но нафига такое чтение, если даже из названия класса понятно, что для того чтобы отправить мыла нужно выбрать юзеров, а потом отправить им мыла.
А вот чтобы внести какие-то правки, или выяснить, где косяк получается, тебе нужно будет скакать по куче методов и классов, в которых еще вложенные методы и классы, и это дело еще и в разных файлах может быть. Так что я лично не вижу здесь удобства...
 
Удобство возникает не от того, что ты что-то как-то раскидал. А от работы с объектами, а не с кусками кода. Без OOD, конечно, толку немного. Но когда осознаешь, что ты вообще по сути имеешь дело ТОЛЬКО с объектами, возвращаться назад совсем не хочется =)
 
fixxxer
> mysql_connect обычно вызывается 1 раз
Простите, конечно, но в связьке, Master + Slaves x X вы предлагаете что, засунуть код коннекта в mysql_query?

> Все книги говорят не более 20 строк
Засунуть эту бесовскую книгу в печь. Требую цитаты и автора.
 
>> откуда бы дергал метод наследника
>Можно с примером кода, не могу уловить ход мысли.
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 в одном случае при получении данных, во-втором при передаче
 
*****
но к сожалению. наводит на мысль, что всё же проще без ООП :(
 
fixxxer
Полностью согласен с
> Удобство возникает
Но дробить классы типа
> не более 20 строк
Ахинея чистой воды.
 
Классы по 20 строк? Где я это говорил? Класс может быть и в 1 строку и в дофига, если это соответствует обязанности класса.

А про mysql_query я намекал на то, что функция/метод это прежде всего API, и мыслить надо удобством API (как внутреннего так и внешнего), а не тем что там где дублируется или нет.
 
fixxxer
Не надо в дофига, позязя. Видел я один на 6К строк. Я содрогаюсь при мысли о том, сколько он денег обсчитывает.
 
Автор оригинала: vovanium
itprog

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

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