[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Немного моих наблюдений на тему ООП
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Ron
Блин, да оберните вы уже стрку в VO объявите интерфейс, и декорируйте его. Длинные веревки если что за фасад, он же проконтролирует валидные последовательности формата на промежуточном этапе. Ограничиваем возможности UI ради усиления валидности. А выращивать полноценный HTML форматтер со следованием спецификации задача не для развлечения. wink.gif

Valick
chee, по хорошему да, но унаследуй его от View и посмотри на дамп объекта. Пример учебный, но основную мысль я выразил smile.gif


_____________
Стимулятор ~yoomoney - 41001303250491
chee
Цитата (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. Не понимаю.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Вот у Valick'а лучше получается. Правда мы делегирование обсуждали, но декорация тож годится. Важно что тут принцип наследования интерфейса и манипуляция объектами. Зависимостями, если угодно. А не дремучее наследоваение как таковое.


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

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

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

user posted image
chee
Цитата (Valick @ 9.07.2019 - 15:48)
chee, по хорошему да, но унаследуй его от View и посмотри на дамп объекта. Пример учебный, но основную мысль я выразил smile.gif

о декораторах и твину и мне известно. Вообще да, этот код, должен был сделан твином через декораторы, потому что он бы показывал все суть декомпозиции через делигирования. Но он же решил "stateless" контейнер с функциями забабахать.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата (Ron @ 9.07.2019 - 15:47)
Длинные веревки если что за фасад, он же проконтролирует валидные последовательности формата на промежуточном этапе. Ограничиваем возможности UI ради усиления валидности.

тут я тебя перестал понимать

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 9.07.2019 - 11:51)
Насколько я знаю наследование интерфейса, это тоже наследование.

А вот и нет. Наследование интерфейса, это по сути имплементация. Просто не во всех языках есть интерфейс, как структурная единица.

Цитата (chee @ 9.07.2019 - 11:51)
Тебе хочется видеть в любой иерархии наследования проблему yo-yo.
Мне не хочется, но я вижу biggrin.gif

Цитата (chee @ 9.07.2019 - 11:51)
Покажи на основе своего кода, что ты от меня хочешь, я так и не понял.
Сейчас покажу.


Цитата (chee @ 9.07.2019 - 11:51)
А зачем мне менять их на process? Если для меня это render. Не понимаю.
Потому что ты не один на белом свете. Мне не нравится render(), если я буду работать с твоим кодом, как мне быть?

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

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

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

user posted image
Ron
Цитата (chee @ 9.07.2019 - 15:56)
тут я тебя перестал понимать

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

У меня главная претензия к твину такая: зачем брать пример под декоратор, делать наикривейшую реализацию без оного и заявлять о каноническом "нашем" ООП? Каноническое ТвиноПЭ тогда уж. biggrin.gif

Там ниже и вовсе смех, перечисляет "все должно быть объектом" по канонам, а сам прям тут же, абзацем выше, передает примитив во View, да еще и в качестве имени метода ph34r.gif

Напомнило анекдот:
Цитата
- Не понимаю, почему люди так восхищаются этим Карузо? Косноязычен, гугнив, поёт - ничего не разберёшь!
- А вы слышали, как поёт Карузо?
- Да, мне тут кое-что из его репертуара Рабинович напел по телефону.

только в данном случае непонимающий мужик и Рабинович одно и то же лицо, судя по тому коду. wink.gif

Valick
Цитата (twin @ 9.07.2019 - 14:58)
Мне не нравится render(), если я буду работать с твоим кодом, как мне быть?

установить PHPStorm и рефактор ренейм в три клика? smile.gif
к тому же всегда есть паттерн фасад
P.S я уже не успеваю все сообщения читать))) долго вы еще будете в омуте ООП воду мутить))

_____________
Стимулятор ~yoomoney - 41001303250491
twin
Цитата (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);
// Some methods
}

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>';


Свернутый текст
Жалко только времени было. :(


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

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

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

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

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