Блин, да оберните вы уже стрку в VO объявите интерфейс, и декорируйте его. Длинные веревки если что за фасад, он же проконтролирует валидные последовательности формата на промежуточном этапе. Ограничиваем возможности UI ради усиления валидности. А выращивать полноценный HTML форматтер со следованием спецификации задача не для развлечения.
chee, по хорошему да, но унаследуй его от View и посмотри на дамп объекта. Пример учебный, но основную мысль я выразил
_____________
Стимулятор ~yoomoney - 41001303250491
Цитата (twin @ 9.07.2019 - 15:30) |
2. Самое смешное, ты сделал попытку привести его к норме, то есть к наследованию интерфейса, а не реализации. Сам того не заметив. |
В том то и смысл нашего спора, что я не выхожу за рамки своих принципов. Насколько я знаю наследование интерфейса, это тоже наследование. И как бы это вообще не противоречит отстаиваемой мной позиции. Так что я не очень понимаю, что я должен замечать.
Цитата (twin @ 9.07.2019 - 15:30) |
Это еще больше усложняет систему, скатывая ее в раздутую иерархию, и, как следствие, в Yo-yo. |
Опять же, ты принимаешь желательное за действительное. Тебе хочется видеть в любой иерархии наследования проблему yo-yo.
Цитата (twin @ 9.07.2019 - 15:30) |
4. Вопрос о сложном форматировании повис в воздухе. Покажи, как это ты себе представляешь без нарушения принципа Лисков. |
Покажи на основе своего кода, что ты от меня хочешь, я так и не понял.
Цитата (twin @ 9.07.2019 - 15:30) |
5. Ровно как и вопрос о сильном зацеплении. Попробуй заменить render() на process(). Тебе придется править всех наследников. |
А зачем мне менять их на process? Если для меня это render. Не понимаю.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Вот у
Valick'а лучше получается. Правда мы делегирование обсуждали, но декорация тож годится. Важно что тут принцип наследования интерфейса и манипуляция объектами. Зависимостями, если угодно. А не дремучее наследоваение как таковое.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (Valick @ 9.07.2019 - 15:48) |
chee, по хорошему да, но унаследуй его от View и посмотри на дамп объекта. Пример учебный, но основную мысль я выразил smile.gif |
о декораторах и твину и мне известно. Вообще да, этот код, должен был сделан твином через декораторы, потому что он бы показывал все суть декомпозиции через делигирования. Но он же решил "stateless" контейнер с функциями забабахать.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (Ron @ 9.07.2019 - 15:47) |
Длинные веревки если что за фасад, он же проконтролирует валидные последовательности формата на промежуточном этапе. Ограничиваем возможности UI ради усиления валидности. |
тут я тебя перестал понимать
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 9.07.2019 - 11:51) |
Насколько я знаю наследование интерфейса, это тоже наследование. |
А вот и нет. Наследование интерфейса, это по сути имплементация. Просто не во всех языках есть интерфейс, как структурная единица.
Цитата (chee @ 9.07.2019 - 11:51) |
Тебе хочется видеть в любой иерархии наследования проблему yo-yo. |
Мне не хочется, но я вижу
Цитата (chee @ 9.07.2019 - 11:51) |
Покажи на основе своего кода, что ты от меня хочешь, я так и не понял. |
Сейчас покажу.
Цитата (chee @ 9.07.2019 - 11:51) |
А зачем мне менять их на process? Если для меня это render. Не понимаю. |
Потому что ты не один на белом свете. Мне не нравится render(), если я буду работать с твоим кодом, как мне быть?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (chee @ 9.07.2019 - 15:56) |
тут я тебя перестал понимать |
У формата есть спецификация, тот же HTML, нельзя блочный элемент помещать в инлайн, чисто как пример. Фасадом можно загрубить возможности формата ради валидного результата, я вот о чем. Создадим сильно упрощенную абстракцию над HTML. Ну то так, мысли вслух, не более.
У меня главная претензия к твину такая: зачем брать пример под декоратор, делать наикривейшую реализацию без оного и заявлять о каноническом "нашем" ООП? Каноническое ТвиноПЭ тогда уж.
![biggrin.gif](http://phpforum.su/html/emoticons/biggrin.gif)
Там ниже и вовсе смех, перечисляет "все должно быть объектом" по канонам, а сам прям тут же, абзацем выше, передает примитив во View, да еще и в качестве имени метода
Напомнило анекдот:
Цитата |
- Не понимаю, почему люди так восхищаются этим Карузо? Косноязычен, гугнив, поёт - ничего не разберёшь! - А вы слышали, как поёт Карузо? - Да, мне тут кое-что из его репертуара Рабинович напел по телефону.
|
только в данном случае непонимающий мужик и Рабинович одно и то же лицо, судя по тому коду.
Цитата (twin @ 9.07.2019 - 14:58) |
Мне не нравится render(), если я буду работать с твоим кодом, как мне быть? |
установить PHPStorm и рефактор ренейм в три клика?
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)
к тому же всегда есть паттерн фасад
P.S я уже не успеваю все сообщения читать))) долго вы еще будете в омуте ООП воду мутить))
_____________
Стимулятор ~yoomoney - 41001303250491
Цитата (Ron @ 9.07.2019 - 12:25) |
Там ниже и вовсе смех, перечисляет "все должно быть объектом" по канонам, а сам прям тут же, абзацем выше, передает примитив во View, да еще и в качестве имени метода |
Я же обозначил в топике, что это условно. Конечно примитив, не хотелось писать портянку. Вот вы всегда так, к мелочам придираетесь, а сути не хотите видеть. Я показывал отношения объектов, распределение обязанностей, суть делегирования, а они пристали к мелочам. :D
Цитата (Valick @ 9.07.2019 - 12:31) |
установить PHPStorm и рефактор ренейм в три клика? |
Да не в том дело, а в том, что это уже нарушение инкапсуляции. Прежде чем заменить, нужно найти проблему. А она есть. Вопрос не просто в названии метода, а в том, что он сам запутался в своей иерархии. Методу render() вообще нечего делать в форматерах, раз он во вьюшке задекларирован. Я уже не говорю, что он не реализован в классах FormatterItalic и FormatterBold, хотя наследует интерфейс Formatter. Это косяк. И если здесь пример простой, то в реале это может аукнуться.
Ну и нате вот совсем по канонам, именно вашим, хотя можно и по другому было бы, но опять придеретесь к мелочам. Это стопроцентное делегирование.
abstract class ViewBase
{
protected $formatter;
public function __construct(FormatterInterface $formatter)
{
$this->formatter = $formatter;
}
abstract public function render($text);
}
class ViewBold extends ViewBase
{
public function render($text)
{
return $this->bold($text);
}
public function bold($text)
{
return $this->formatter->bold($text);
}
}
class ViewItalicQuote extends ViewBase
{
public function render($text)
{
$text = $this->italic($text);
return $this->quote($text);
}
public function italic($text)
{
return $this->formatter->italic($text);
}
public function quote($text)
{
return $this->formatter->quote($text);
}
}
interface FormatterInterface
{
public function bold($text);
public function italic($text);
public function quote($text);
}
class HTMLFormatter implements FormatterInterface
{
public function bold($text)
{
return '<b>' . $text . '</b>';
}
public function italic($text)
{
return '<i>' . $text . '</i>';
}
public function quote($text)
{
return '<div style="padding:5px; border:1px solid">' . $text . '</div>';
}
}
class BBFormatter implements FormatterInterface
{
public function bold($text)
{
return '[В]' . $text . '[/В]';
}
public function italic($text)
{
return '[I]' . $text . '{/I]';
}
public function quote($text)
{
return '[MORE]' . $text . '[/MORE]';
}
}
$html = new HTMLFormatter;
$bb = new BBFormatter;
$text = "Hello, World!";
echo (new ViewBold($html))->render($text) . '<br>';
echo (new ViewItalicQuote($html))->render($text) . '<br>';
echo (new ViewBold($bb))->render($text) . '<br>';
echo (new ViewItalicQuote($bb))->render($text) . '<br>';
Жалко только времени было. :(
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.