[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Design Patterns
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Ron
Цитата (twin @ 15.09.2017 - 20:20)
как Ron, и говорить потом, что декоратор без yo-yo, это не декоратор.

Ну глупость про yo-yo, допустим ты говоришь, а не я. Классическая подмена тезиса
Цитата
Подмена тезиса состоит в том, что спорщик строит своё доказательство на предположении, что оппонент сделал некоторое (обычно слабое или неверное) утверждение, создавая у невнимательных зрителей (а иногда даже у оппонента) ощущение, будто он действительно сделал такое утверждение. Обычно это достигается многократным повтором.


Цитата (twin @ 15.09.2017 - 20:20)
А я и пытаюсь разобраться.

Нет, ты пытаешься всем доказать что прав, причем используя нехорошие техники из демагогии.

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

Цитата (twin @ 15.09.2017 - 20:20)
И скажи мне теперь, чем это лучше, чем так:

Тем, что в ОС не только кнопки! biggrin.gif Ну понял теперь? <:-)

Цитата (twin @ 15.09.2017 - 20:20)
Не понятно, зачем это делать специально, используя совершенно неприемлимые примеры, как делает Ron.

Требую уточнений! Какие это неприемлимые примеры? =)

chee
twin, а сейчас представь, что фабрика инжектируется в объект, а не инициируется как у тебя в коде, вопросы еще будут?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Arh
twin
Цитата
Это ты адаптер описал. Фабрика тут ваще не при делах.

Я ничего не адаптировал, ты наверное не внимательно посмотрел.

//$factory = new FactoryOne(); // один набор решений
$factory = new FactoryTwo(); // альтернативный набор решений

$objectKuKu = $factory->getKuKuClass(); // решение из второго набора
$objectYoYo = $factory->getYoYoClass(); // решение из второго набора


А вообще я чёт не могу придумать настоящий пример для веб, ни разу не приходилось так извращаться. Разве что переключение между сервисами.

Допустим есть сервис который авторизирует через slack $SlackOauth; и посылает личные сообщения $SlackMessage;
И есть такой же с VK. $VkOauth и $VkMessage;

//$Service = new Vk();
$Service = new Slack();

$Oauth = $Service->getOauthClass(); // Вернёт SlackOauth с общим интерфейсом SocialOauth
$Message = $Service->getMessageClass(); // Вернёт SlackMessage с общим интерфейсом SocialMessage
$Message->send('user_id', 'Здрасти');


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (Ron @ 15.09.2017 - 18:24)
Ну глупость про yo-yo, допустим ты говоришь, а не я. Классическая подмена тезиса
Э, нет. Никакой подмены. Я говорю, вернее спрашиваю, конкретные вещи. Конкретные. С кодами. А вот ты отвечаешь словесами, либо не отвечаешь вообще. Что касается подмены понятий, так ты делаешь это чаще. Как вот тут к примеру:
Цитата (Ron @ 5.09.2017 - 13:39)
Угу, подобными выборочными нарезками телевизионщики могут поменять смысл на противоположный. Наверняка видел на ютюбе этот прикол, там коротенькое видео, поэтому легко видно. Пользуясь твоей логикой тоже конспект.
Это можно сделать, только если нет ссылки на первоисточник, и нельзя проверить истинность. А у меня источник был, значит это конспект. А ты развил демагогию. smile.gif

Я несколько раз спросил про yo-yo, ты проигнорировал. Давай еще раз, если требуешь уточнений. Прямо процитирую:
Цитата (twin @ 9.09.2017 - 17:26)
Я вообще слабо представляю себе, для чего нужна такая последовательность:

$decorator = new TextHello(new TextSpace(new TextWorld(new TextEmpty())));

Это можно решить в одном декораторе. Как раз у тебя это и есть антипаттерн "излишняя сложность", сродни длинному наследованию. А то и вообще Yo-yo.
Вот параллельное декорироваие имеет смысл, если нужны разные объекты, либо промежуточные результаты.

Поясни смысл твоей "веревки".

Цитата (twin @ 10.09.2017 - 12:34)
Вопрос в том, чем цепочка декораторов лучше цепочки наследований. У них очень похожие проблемы. Я повторюсь, не вижу пока применения вот такому коду:

$decorator = new TextHello(new TextSpace(new TextWorld(new TextEmpty())));

Зачем много декораторов, если можно все сделать в одном. Или параллельно.

Цитата (twin @ 11.09.2017 - 12:23)
Ты объясни смысл этой веревки:

$decorator = new TextHello(new TextSpace(new TextWorld(new TextEmpty())));

Я бы понял еще пример, как в GoF'e, где в промежуточные объекты передаются данные. И то с большооооой натяжкой. Но ту то... Самый вопиющий антипаттерн Yo-yo.


В каждом вопросе конкретный код. Еще раз уточню, чтобы ты голословно не обвинял меня в демагогии.
Антипаттерн yo-yo гласит:
Цитата
In software development, the yo-yo problem is an anti-pattern that occurs when a programmer has to read and understand a program whose inheritance graph is so long and complicated that the programmer has to keep flipping between many different class definitions in order to follow the control flow of the program.


Теперь смотрим на твой пример из вики. Да, там нет наследования, но есть альтернатива, как пишется в GoF. И в примере проблемы yo-yo никуда не делись. Граф точно так же размазан по классам и приходится скакать туда-сюда, как преславутая игрушка.

Цитата (Ron @ 15.09.2017 - 18:24)
Тем, что в ОС не только кнопки!  Ну понял теперь? <:-)

Нет, не понял. Может я совсем тупой... Причем тут кнопки вообще. Я спрашивал не про кнопки, а про то, чем лучше получение объектов напрямую, чем через фабрику. Вернее даже не так. Я знаю ответ в целом. Я спрашивал именно про веб-технологии, и про пример на PHP.

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

Уточню, а то опять скажешь, что я демагог. Это касается только фабрики. Против билдеров я ничего не имею. smile.gif

Цитата (chee @ 15.09.2017 - 19:28)
twin, а сейчас представь, что фабрика инжектируется в объект, а не инициируется как у тебя в коде, вопросы еще будут?
Будут. Два.

1. В каком именно из кодов.
2. Чем все таки не устраивает контейнер, который так же инжектится.

Еще раз попробую, почему то никто не может понять простой вещи.

Фабрика полезна в десктопе. Это инструмент, который помогает разрешить задачу изменения работы программы ронтайм, в течении её исполнения. Когда невозможно предугадать, что и когда потребуется. Какие объекты, из какого семейства и в какой именно момент. Когда в процессе исполнения может понадобиться заменить один набор другим, либо использовать совместно. Либо вообще использовать lazy initialization, возложив заботу о выборе семейства и создании кнопок на пользователя. Выдав ему окно с выбором языка например. Вот он в окне тыкнет кнопку "русский", фабрика намолотит ему объектов на русском языке. Но программа то работала и ждала его решения. В веб никто ни кого не ждет.

Или еще лучше. Работаем с русским интерфейсом, подошел америкос - тык кнопку - все результаты на английском. Те, которые юзер уже успел набарагозить. В веб скрипт умирает после выдачи результата, нужно его снова запускать, если нужен другой интерфейс. И мы знаем, какой.

В веб-технологиях это все на виду, никакой неоднозначности. И никаких проблем заранее напихать в контейнер тех объектов, которые понадобятся для выполнения скрипта. Построенных либо билдерами, либо самим контейнером, если он крут. Заранее. Не в процессе исполнения, а в процессе инициализации. Потому что кнопку "русский" юзер может тыкнуть только заранее, перед началом работы скрипта, а не в тот момент, когда программа уже запущена.

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

Цитата (Ron @ 15.09.2017 - 18:24)
Нет, ты пытаешься всем доказать что прав, причем используя нехорошие техники из демагогии.
Чушь. Как я могу доказать то, в чем сам еще не разобрался. Вот с чего всё началось:
Цитата (twin @ 31.08.2017 - 07:55)
Любопытно, недавно писал статью про фабричные паттерны. И не нашел внятного объяснения, зачем нужен паттерн "фабрика" (хоть простая, хоть абстрактная) в веб. Но интересно не это. Интересно, что это почему то один из самых популярных паттернов. Вот и chee все три штуки притащил.

Может ты сможешь рассказать, для чего они нужны в сайтостроении. Не как устроены, а конкретно, для чего нужны.
Но конкретного ответа до сих пор нет. Покажите задачу (а лучше решение) где нужна именно фабрика и нельзя сделать проще.

Что касается моих "доказательств", тебе так просто кажется. Потому что я в рассуждениях опираюсь на факты. А ты льешь воду. Вот и кажется, что я что-то доказываю. Просто я не наблюдаю практических опровержений этим фактам. А пока они не опровергнуты, они остаются фактами и моими убеждениями. Опровергни, я поменяю убеждения. Я же согласился, что пример с эксепшеном, это прокси. Не вопрос.

Хочу сразу предостеречь, я не сравниваю фабрику, с контейнером. А тем более с реестром. Я знаю, что это паттерны из разных опер. Я не спрашиваю, чем один лучше другого. Я спрашиваю, чем применение одного лучше чем применение другого. И именно в веб. И именно на конкретных примерах. Теорию я знаю, будь она не ладна. Как применить теперь этот "багаж знаний", не ясно. А то получается чемодан без ручки. Тащить тяжело, а выкинуть жалко. smile.gif Теория без практики - пыль. Одна трата времени.

Потому и говорил, что практика приоритетнее. Если бы я увидел пример в коде, я бы знал, что это красиво и грамотно. И мне наплевать, как это называется. Узнал - хорошо. Не узнал - ничего страшного, все равно буду испльзовать. Хуже, когда знаешь теорию, но не можешь грамотно применить. Или применяешь по кривым примерам из вики. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.