Я нашель: PHP: <?php /******************************************************************** Model-View-Controller implementation according to POSA (Pattern-Oriented Software Architecture http://www.hillside.net/patterns/books/Siemens/book.html) ********************************************************************/ class HelloWorldController { private $model; function __construct($model) { $this->model = $model; } function handleEvent($args) { $this->model->setStrategy($args[2]); $this->model->addText($args[1]); } } class HelloWorldModel { private $text; private $observers = array(); private $strategy; function attach($observer) { $this->observers[] = $observer; } function getData() { $facade = new HelloWorldFacade($this->strategy); return $facade->getHelloWorld().$this->text."\n"; } function addText($text='') { $this->text = $text; $this->notify(); } function setStrategy($strategy) { $this->strategy = $strategy; } function notify() { foreach ($this->observers as $observer) { $observer->update(); } } } class HelloWorldView { private $model; function initialize($model) { $this->model = $model; $model->attach($this); return $this->makeController(); } function makeController() { return new HelloWorldController($this->model); } function update() { $this->display(); } function display() { echo $this->model->getData(); } } /********************************************************************* "Business logic" ********************************************************************/ class HelloWorld { function execute() { return "Hello world"; } } class HelloWorldDecorator { private $helloworld; function __construct($helloworld) { $this->helloworld = $helloworld; } function execute() { return $this->helloworld->execute(); } } abstract class HelloWorldEmphasisStrategy { abstract function emphasize($string); } class HelloWorldBangEmphasisStrategy extends HelloWorldEmphasisStrategy { function emphasize($string) { return $string."!"; } } class HelloWorldRepetitionEmphasisStrategy extends HelloWorldEmphasisStrategy { function emphasize($string) { return $string." and ".$string." again"; } } class HelloWorldEmphasizer extends HelloWorldDecorator { private $strategy; function HelloWorldEmphasizer($helloworld,$strategy) { $this->strategy = $strategy; parent::__construct($helloworld); } function execute() { $string = parent::execute(); return $this->strategy->emphasize($string); } } class HelloWorldStrategyFactory { static function make($type) { if ($type == 'repetition') return self::makeRepetitionStrategy(); return self::makeBangStrategy(); } static function makeBangStrategy() { return new HelloWorldBangEmphasisStrategy; } static function makeRepetitionStrategy() { return new HelloWorldRepetitionEmphasisStrategy; } } class HelloWorldFormatter extends HelloWorldDecorator { function execute() { $string = parent::execute(); return $string."\n"; } } class HelloWorldFacade { private $strategy; function __construct($strategyType) { $this->strategy = HelloWorldStrategyFactory::make($strategyType); } function getHelloWorld() { $formatter = new HelloWorldFormatter( new HelloWorldEmphasizer( new HelloWorld,$this->strategy)); return $formatter->execute(); } } $model = new HelloWorldModel; $view = new HelloWorldView; $controller = $view->initialize($model); $controller->handleEvent($_SERVER['argv']); ?>
Вот на что наткнулся! http://www.dangermouse.net/esoteric/piet/samples.html Hello World Pi --- Добавлено ---
@Fell-x27, https://php.ru/forum/threads/primery-rabochix-skriptov-v-oop-stile.58146/#post-467425 --- Добавлено --- @Fell-x27, оу, тут вторая страница есть. Не заметил, что ты уже выложил.
Ты сам себе протеворечишь. Ты видимо не знаешь в чем заключается архитектура сложных приложений. Никто не пишет говно ради говна трех строчек. Ни к селу ни к городу. Какой-то непонятный говно-классер писал, а почему ты это пишешь мне?, когда я выше тебе описал весь процесс. Я не люблю таких кто-так пишет. По этому ушел от этого, сделал динамику классу и контроллеру и все зашибись работает и хранится там где нужно и легко рутом меняется. Тебе хватит только того, что подменить не получится и работает независимо. Скорее ты не понимаешь и даже не читаешь. По большому счету это и нужно, а суперглобальные массивы последуют с костылями.
Ты не выебывайся, а расскажи то, о чем спросили. Если "подмена POST" для тебя - проблема, то твой предыдущий приступ самовосхваления через завуалированное унижение по поводу архитекторских способностей не стоит выеденного яйца, потому что обработка запросов должна всегда исходить из того, что в POST придут левые данные. Их никто не будет перехватывать и подменять на стороне сервера. Их тебе пошлют прямо как есть через сфабрикованный запрос. Далее. Подмена POST - это, наверное, самая идиотская опасность, которой надо бояться. Ты действительно веришь, что если у тебя на сервере заведется зловредный скрипт, то он начнет тебе пакостить, подменивая POST'ы? СЕРЬЕЗНО? Ни пароли сниффить, ни БД потрошить, ни бэкдоры загружать, а подменивать POST'ы? И если ты, вместо валидации данных по принципу "ожидание-реальность", и вместо CSRF, пишешь костыли, которые нужны для того, чтобы никто никто не мог на стороне сервера переписать содержимое запроса, то, в таком случае, не тебе указывать кому-то как архитектуру строить. Ах да. Вторая половина твоего ответа: Ответь еще на один вопрос - независимо от чего?
@igordata, Ладно каждый остался при своем мнение и это нормально. Ты изначально хвалишь своего пина, хотя мой std работает почти точно также, только я сделал для этого более гибкую и удобную структуру, чтобы проще можно было манипулировать файликами и их данными. @Fell-x27, Да с чего ты взял, что я тебе постоянно должен чего-то? Если в твоем мозгу нет ничего кроме POST, я тебе сочувствую. А свой характер можешь не показывать, я таких знаю много. Даже не удосужился прочитать про то, что нужно фильтровать. Ты только постом пользуешься? Прочитай про Filter
фиг с ним с моим пином. Ты так и не ответил ни на один вопрос. так что фиг с ними с вопросами, можно попробовать рассуждать логически. Если ты предлагаешь фильтрацию инпута, то значит, что она будет производиться по неким правилам. А правила эти заранее определить невозможно. Конец. Твоё предложение - дерьмо. --- Добавлено --- фильтр это полная хуета. Никакая "валидация имейла" не позволяет не то что валидировать имейл, но даже определить вообще, имеил ли это. Если конечно есть хотя бы собака и две буквы. Т.е. валидация имейла происходит через отправку на имеил письма с уникальной ссылкой. Остальное всё - шаманизм ебаный. Валидация и чистка всего остального инпута тоже лишена смысла. Если юзер чета прислал и хочет это в бд пихнуть - пихай правильно и тебе будет всё равно, что именно он прислал. Конец. Опять же твои решения не нужны.
@rodent90 ты скоро начнешь ловить страйки. Во-первых, ты полностью прокинул замечение касательно твоих страхов про уязвимость через подмену POST на строне сервера. Это прием демагога номер один, пожалуй. Игнорировать неудобную часть текста вместо аргументированного ответа, отстаивающего свою точку зрения. Нет контраргументов? Окей. Я трактую это как подтверждение своих слов и твое согласие с тем, что ты обосрался. Именно обосрался. Если бы ты вел диалог не с позиции Д'Артаньяна, окруженного известными личностями, я бы написал, что ты "согласился". Люди без болезненно опухшего ЧСВ, обычно, сами это признают. Не так давно закусился с @askanim, и в ходе дискуссии, с аргументами с двух сторон, пусть и на повышенных тонах, консенсус был найден и спор завершился принятием более подкрепленной точки зрения. Вот @askanim не съехал. Не переводил тему. И, в конечном счете не обосрался. Не унизил себя. И не получил никаких упреков. Если бы с его стороны аргументация была крепче, я бы поступил так же как он. С твоей же стороны вместо аргументации полилась демагогия. Значит, сказать по делу вовсе нечего. По этому, учитывая твою помпу, ты обосрался. Потому что ты с умным и пафосным видом несешь херню, за которую не держишь ответа. Держать ответ за свои слова - это долг любого, кто что-то постулирует. Не передо мной, а вообще. Это единственное, что разделяет понятия "слова" и "информационный шум". И это тоже один из приемов демагога - попытка перевода беседы в другое русло, желательно с фокусировкой на оппоненте. Третий прием демагога - приписать оппоненту слова, свойства, действия или мотивации, которые он не говорил, не проявлял, не описывал, и пытаться атаковать по ним. Используется как поддержка вышеописанного приема с отведением русла беседы. Но это не проканает. Итак, повторим. Ответь еще на один вопрос - независимо от чего работает твой костылепед?
На сервере может завестись зловредный говнокодер, считающий, что можно туда-сюда вертеть глобалами. @rodent90 же сделал свою прослойку, которая дает ему необходимый интерфейс и гарантии. Другое дело, что адепты ЧИСТОГО ПХП (с придыханием) обычно в итоге городят свои велосипеды, которые кроме них ни кто даже за деньги понимать не станет, вместо того что бы следовать стандартам, но это другое дело )
Пусть вертит, эта проблема на стадии разработки и отладки вылезет в итоге. Ты верно сказал, что велосипеды легко заменяются стандартами. НО, услышать доводы по этому поводу я хотел бы не от тебя, а от товарища Д'Артаньяна. Который, вместо оных перешел на опосредованные оскорбления и начал переводить тему. И, опять же, основной вопрос все равно висит над Товарищем Д'Артаньяном. Насчет независимости.
@Fell-x27, Еще раз повторяю, я тебе ничего не должен и не обязан. Уясни это раз и навсегда. Я лишь посоветовал архитектуру которая работает динамически и контролирует буфер, и файлики, и дает возможность определять структуры, и связи, и т.д. можно писать все в одном, а можно сделать логику и представление в виде структуры шаблона сайта, где шаблон - это сайт со всей реализацией, при смене шаблона можно создать новый сайт, а можно расширить текущий. Все просто. PHP-шаблонизатор. Каждый файл шаблона сайта - имеет соответствующий формат и может работать с буфером.
@rodent90, опять ты игнорируешь все ранее сказанное, опять зачем-то фокусируешь ответ на мне, опять переводишь тему в новое русло, вместо того, чтобы просто признать, что ляпнул херню, либо опровергнуть это, развернуто объяснив смысл сказанного. Но нет. Давай будем обмазываться пафосом и воткнем в мушкетерскую шляпу еще одно перо. Первый страйк.
Почему ты такой твердолобый? Ты привел хуйню, я тебе на эту хуйню, разумно ответил. @igordata не понравилось, его устраивает вариант своей разработки - логично и разумно тоже, как и с моей стороны (только я сделал динамику, а он пошел путем статики), ты скинул говно-классинг, похвалил его очень, очень и сдулся. При этом упорно двигаешь говна-трех-строк (БЕСПОЛЕЗЕН В ПРИНЦИПИ), следовательно ничего стоящего из этого не выйдет, так-как в принципе, ничего и не сделалось, архитектуры нет - есть просто стандартный шаблонизатор. Никакого стоящего сайта из этого не вышло (никакой парадигмы и принципов mvc, а о контроле можно забыть), ты обосрался, - и не этому нужно учить. - А по проектированию задачи. (что будет, как будет, с чем взаимодействует и по какому алгоритму работает). А ты тулишь свой " Я нашел! " стрем " - смотрите все на него.
Опять демагогия. Второй страйк. Итак, повторим. Ответь еще на один вопрос - независимо от чего работает твой костылепед?
@rodent90 на этом форуме демагогов ебут. Я писал, что фиг с ней с моей разработкой. Я там привожу контраргументы на твои идеи. Но ты не возражаешь. Ты продолжаешь гнать херню про то, что меня устраивает свой вариант. Это не честный способ вести диалог. Это плохо. Ты делаешь плохо. Это может иметь последствия.
@igordata, ты унылый хуеплет, мой дед войну прошел, с красным знаменем, а ты хуйню такую говоришь, идиот. Я не фига вам не должен, ничего не игнорил, если вы трудные, это ваши проблемы. Я не намерян терять на вас время. На таких бестолковых, по этому идите мимо, мне с вами не о чем беседовать, вы далекие. По этому ариведерчи!
Демагогическое бинго! Третий страйк. --- Добавлено --- Нам будет тебя не хватать. Хотя нет, не будет.
@Fell-x27, @romach, @igordata Когда я начинаю с вами спорить, тоже так смешно смотрюсь? ... я где-то слышал, что в споре рождается истина...