Pull to refresh

Comments 33

UFO landed and left these words here
Просили же, писать об ошибках автору в личку! Имейте уважение к проделанной работе автора!
По первым впечатлениям похоже на Mediator ( sourcemaking.com/design_patterns/mediator ), который метит в God Object'ы ( en.wikipedia.org/wiki/God_object ).
не согласен, как меня, это (мой код) не на god object смахивает, а на очень узкое api
и еще — делать единственное ядро — не обязательно, возможна реализация простой передачи сообщений напрямую между обьектами, но я хочу полной независимости всех обьектов друг от друга
в class module_test_2 строка $this->connect(new slot('module_test_1.run', array($this, 'write'))); и отображает не зависимость модулей, я думал в идее должны попросить «Может кто-то дать мне последние 10 коментариев», а ядро должно само разобраться что или кого отдать :)

P.S комМентариев
это я для примера прописал, а вообще — любой модуль может послать сообщение module_test_1.run, не обязательно только module_test_1
Так я об этом и говорю, что вы явно обращаетесь к модулю.
Чем тогда отличается ваш метод от:

$mod = new module_test_1;
$mod->run();
О полной независимости друг от друга всех объектов мечтают все. Часто и много. Но это просто идеал не достежимый в концепции ООП. Какие-то связи у вас всё-равно останутся. Главный вопрос — как их реализовать? Из традиционных способов первыми на ум приходят Visitor, Mediator и Observer. Но у вас то, насколько я понимаю, получается что класс module_test_2 вообще напрямую знает о существовании класса module_test_1. Какая же это абстракция? Это злобный хардкодинг.

К тому же, как вы верно заметили, полная абстракция и не всегда обязательна. Например, если я хочу получить варианты цветов некого товара из корзины пользователя, то мне проще идти по пути «Корзина -> Товар -> Цвета», а не «Корзина -> Посредник -> Товар -> Посредник -> Цвета». Знать о товарах внутри себя — прямая обязанность корзины. Точно так же как и товар должен знать о своих цветах. Иначе не понятно, что они вообще делают в системе. Представляют набор функций-дёргалок, а вся логика зашита в ядро? Ну это и есть God Object.

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

>> любой модуль может послать сообщение module_test_1.run
Это вообще потенциальная дырка безопастности, т.к. безобидный модуль news сможет дёрнуть метод uninstall для какого-нибудь компонента. Я, конечно, утрирую, но если вы хотите наделить все объекты системы такими возможностями, то неплохо было бы ещё и позаботится о правах доступа.
спасибо за внятный коментарий, учту
Если я правильно понял основную идею, то это очень похоже на систему хуков, реализованную в Drupal.
Очень похоже на ООП, если в качестве ядра взять глобальное пространство имен.
UFO landed and left these words here
ок, тогда совет такой: завязывать с говнотворчеством и заниматься самообразованием, повышением профессионального уровня и расширением кругозора, а не скрещиванием ужа и ежа
UFO landed and left these words here
в предыдущем комментарии ссылки нет?
не понял к чему вы клоните, не вижу ничего общего, кроме, разве что, радикальности подходов
извинияюсь, уловил схожесть :) но этот способ как-то не по мне
Отличие — в скорости работы и методах дебага :)
для каких реальных задач это можно применить?
для реальных задач? да для всего. это еще один способ составления, проектирования приложения. у него нет ограничений, как и и стандартно-птинятого способа. очень похожий метод используется в проекте AGPsource Game Platform
еще один способ нужен тогда когда для решения задачи не устраивают существующие методики и способы. вот я и спрашиваю.
в какой реальной web-задаче это можно применить, и это действительно даст выигрыш в чемто?
выиграш должен быть в простоте добавления новых модулей, в простоте их использования, но, теоретически, это больше ресурсоемко… я сейчас обкатываю это все, у меня есть реализация самого простого ядра, тестирую, думаю… на хабр написал чтоб узнать мнения, послушать критику… думаю в скором времени все это будет нормально реализовано и все плюсы / минусы конкретно описаны
просто читая ваш пост, сложилось впечатление что ваша идея дала бы большой выигрыш в производительности и модульности в мультизадачной среде, в работе паралельных процессов…
в web-е такого практически не встречается. большинство приложений последовательны…
может ошибаюсь.
будут конкретные плюсы-минусы — публикуйте — обсудим )
UFO landed and left these words here
Мне, почему-то, тоже самое сразу же в голову пришло.
И вот такая ссылочка, на мой взгляд, будет поприятнее для первоначального знакомства.

components.symfony-project.org/event-dispatcher/
На картинке схема хуков для Друпал ;)
— Есть у кого значение переменной ххх?
— Да, конечно, держи.
— Да, конечно, держи.
— Да, конечно, держи.
— Да, конечно, держи.
— Да, конечно, держи.

Как выбирать? :) То есть, тут такие вопросы:
1) как объекту узнать, какая именно переменная ему нужна, если он независим от всех остальных?
2) как объекту выбрать значение, если ответов будет больше одного?

Полная независимость, имхо, не получится. Должны быть какие-то соглашения более-менее жесткие.
это действительно интересный вопрос, пока что я к единому решению не пришел, буду пробовать, испытывать, и скоро дам знать как я это решил, и код выложу, конечно
Опять комментарий самоотправился.
— А! В Windows, например, PostMessage, SendMessage. :)
Sign up to leave a comment.

Articles