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

fixxxer

К.О.
Партнер клуба
korchasa

Я очень сомневаюсь, что у этого класса в 6к строк можно четко выделить одну обязанность, и он не берет на себя слишком многое. :)
 

Активист

Активист
Команда форума
fixxxer
Не, я это просто добавил. Автор про 20 срочек жжот здесь

> и одним надо слать одно а другим другое .. и как тогда быть?

Вызвать нужный метод объекта агрегатора клиентов, передав нужные параметры, или же дополнить класс юзеров зделав его базовым. Пример плохой, из пальца.
 

korchasa

LIMB infected
fixxxer
Обязанность у него одна, и имя ему Billing :D

Активист
Там написано про функцию.
 

Активист

Активист
Команда форума
> мыслить надо удобством API
А кто спорит? Именно так.

Кстати, я думаю DOM - идеальный ООП пример.

-~{}~ 28.10.10 20:28:

korchasa
и имя ему Billing

Это не ооп, функциональное программирование обернутое в класс.

-~{}~ 28.10.10 20:28:

korchasa
Да, там написано про функцию, но до этого тот же автор писал аналогичное про методы.
 

fixxxer

К.О.
Партнер клуба
korchasa

гы-гы :D

-~{}~ 28.10.10 15:29:

Активист

arghhhhhhhh процедурное!!1111яидиот
 

Активист

Активист
Команда форума
fixxxer
Прет?)

-~{}~ 28.10.10 20:32:

korchasa
> $this->$method_name();
Вот это вообще как-то не кошерно, совсем не ооп.
 

zerkms

TDD infected
Команда форума
Активист
Не прёт :) Таки процедурное, а не функциональное :)
 

Активист

Активист
Команда форума
Еще я не могу понять, почему в этом треде не дифференцируются понятия класса и объекта, словно, класс и объект это одно и тоже .

-~{}~ 28.10.10 20:36:

zerkms
Давно не писал процедурного проекта, забыл уже ))))
 

Фанат

oncle terrible
Команда форума
AmdY
но к сожалению [топик] наводит на мысль, что всё же проще без ООП
Смотря что проще.

Я недавно имел беседу на эту тему и сформулировалось вот что
(не претендую на истинность, это просто размышления):

ООП, в моём представлении - это попытка упростить управление системой, усложнив её саму.

ООП ведь появилось не от балды. Это попытка как-то объять необъятные объемы кода. Попытка в очевидном направлении - мы так поступаем так всегда. Абстрагируемся от деталей, масштабируем изображение.

Из этого постулата уже вытекают разнообразные следствия.

Следствие: ООП - это write-only подход. В парадигме ООП ошибку проще (и правильнее!) исправить не в корне, а в ветках, сделав новую, с исправленным методом.

пример:
На стаковерфлоу вопрос, как избежать сообщения об ошибке о deprecated функции get_magic_quotes_gpc в Кохане.
Ответ: ни в коем случае не правьте в коде, унаследуйте класс, и в нем переопределяйте все, что хотите.
Сама идеология ООП заставляет нас не думать о том, что в корнях, что внутри, не оглядываться назад, а смотреть вперед.
Разумеется, у такого подхода есть недостатки. Наследованные классы наслаиваются друг на друга, как краска на скамейке. И в какой-то момент начинают отслаиваться...

Следствие: Любая иерархия классов - это уже новый язык. Со своей документацией, соглашениями, идеологией. Это уже не РНР! Именно поэтому в данном топике так много споров: все говорят на разных языках.

Следствие: программа, написанная без ООП, всегда будет "проще" - проще в восприятии, понятнее окружающим - она написана на "всеобщем" языке.

Следствие: как всякий опасный инструмент двойного действия (упрощение через усложнение), ООП всегда будет черезвычайно сложно в применении и прорждать случаи неправильного использования, усугубленные идеологией: поклонник некоего подхода всегда будет подсознательно закрывать глаза на недостатки и выпячивать достоинства, причем даже не перед другими в первую очередь, а для себя - в использовании.
 

fixxxer

К.О.
Партнер клуба
>> Вот это вообще как-то не кошерно, совсем не ооп.

Почему? Потому что все книги по Design Patterns написаны на примере C++/Java, где такое невозможно? ;)
 

korchasa

LIMB infected
*****
Почти со всем согласен, но:
1. Термин write-only, ИМХО, не совсем корректен. write-only это perl, который часто невозможно прочитать. Тут же читать относительно просто. Другое дело, что расширение поведения, действительно идет вниз, а не заменой блоков "внутри".
2. Программа без ООП проще только до определенного момента, пока ее можно удержать в голове. Дальше ты все равно начнешь плодить абстракции. И уже не важно будут они в виде ооп или в виде процедур.
 

Активист

Активист
Команда форума
*****
В точку. Поэтому, появляется необходимость в документировании всего и вся как в самом коде, так и в вики внутри группы разработчиков.

fixxxer
> $this->$method_name();

Потому что это не метод объекта, это хня (о его магическом действие будет знать только разработчик), такой вот ООП - в ступор вгонит любого (не ооп это!). Я даже не смогу задокументировать метод в где этот код ни интерфесом ни чем, ибо мне как разработчику неизвестно, какого результата ждать, что он возвратит, засунуть обертку для уменьшения кода мы получаем большую проблему.

Подобный код выносится в логические операции, тот же иф и всеми ненавистный switch.
 

craz

Нестандартное звание
*****
в данный момент как раз открыта статья
http://www.maxkir.com/sd/designDead_RUS.html

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

Или в же в противном случае, ООП начинают писать и усложнять не следуя принципам ХР.

Таким образом в первом случае меняют то, что надо перепроектировать и переписать, или во втором случае делают не нужные потуги при написании, не делая рефакторинга, об этом у вас сказано
Следствие: ООП - это write-only подход. В парадигме ООП ошибку проще (и правильнее!) исправить не в корне, а в ветках, сделав новую, с исправленным методом
В следствии чего надо все таки сделать выводы и тогда ООП будет не врагом, а другом.
 

korchasa

LIMB infected
Активист
Ну что ты докопался до кошерности то? Ну замени это командой. В бою Соглашение vs Дублирование все равно победит первое, ибо хоть и требует затрат на начальном этапе, но не требует их во время изменений.
 

korchasa

LIMB infected
vovanium
Так это же анти-ООП. Должно быть семество классов, имплементирующих один интерфейс :)
 

fixxxer

К.О.
Партнер клуба
>> Подобный код выносится в логические операции, тот же иф и всеми ненавистный switch.
PHP:
#1)

switch ($action) {
    case 'foo':
        return $this->doFoo();
    case 'bar':
        return $this->doBar();
    default:
        throw new InvalidArgumentException;
}

#2) 

$handlers = array(
    'foo' => 'doFoo',
    'bar' => 'doBar',
);

if (isset($handlers[$action])) {
    $method = $handlers[$action];
    return $this->$method();
} else {
    throw new InvalidArgumentException;
}
Чем хуже то?
 

itprog

Cruftsman
fixxxer
1) лучше, код читается проще и сразу понятно что он делает. во 2) приходится туда сюда глазами бегать чтобы понять что за $handlers и откуда берется $method / $action
 
Сверху