anonymous@RULINUX.NET~# Last login: 2024-12-23 21:18:39
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[php][patterns][KISS]Hello, World!

\Ъ[http://www.phppatterns.com/docs/design/hello_world_in_patterns]{

]
<?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']);
 
?>
 

}

Охбле.

Tux-oid(*) (2012-07-12 11:51:06)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20120615 Firefox/13.0.1 SeaMonkey/2.10.1

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [php][patterns][KISS]Hello, World! от Tux-oid 2012-07-12 11:51:06
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Именно за такую херню я ненавижу обьектное, я за деклассированный код.

anonymous(*)(2012-07-12 12:30:52)

Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от anonymous 2012-07-12 12:30:52
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Приведёшь деклассированную реализацию MVC для сравнения?

anonymous(*)(2012-07-12 13:32:05)

[#] [Добавить метку] [Редактировать] Ответ на: [php][patterns][KISS]Hello, World! от Tux-oid 2012-07-12 11:51:06
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Ну и нахрен тут фабрика, facade и декораторы, strategy и прочий хлам? Быдлокод какой-то, воняющий энтерпрайзом.

А ещё view создаёт контроллер, что есть бред.

anonymous(*)(2012-07-12 14:30:32)

Mozilla/5.0 (X11; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от anonymous 2012-07-12 14:30:32
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Так в чем и прикол. Апофеоз программистской мысли.

Tux-oid(*)(2012-07-12 14:34:32)
Отредактировано Tux-oid по причине "не указана"
Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20120615 Firefox/13.0.1 SeaMonkey/2.10.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от Tux-oid 2012-07-12 14:34:32
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

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

anonymous(*)(2012-07-12 14:46:23)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от anonymous 2012-07-12 14:46:23
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

интерфейс от интерфейса? это как?

Tux-oid(*)(2012-07-12 14:47:52)

Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20120615 Firefox/13.0.1 SeaMonkey/2.10.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от Tux-oid 2012-07-12 14:47:52
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Как "как"? По определению, вот как.

anonymous(*)(2012-07-12 14:51:41)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от anonymous 2012-07-12 14:51:41
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

лол.

Tux-oid(*)(2012-07-12 14:52:44)

Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20120615 Firefox/13.0.1 SeaMonkey/2.10.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от Tux-oid 2012-07-12 14:52:44
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Вот тебе и ЛОЛ. Ты формочки в этом своём двараза-ку-девелопыре как лепишь? Сначала делаешь формочку, потом функционал к ней прописываешь, небось. И Создаётся всё в том же порядке из главного окна, да? Или у тебя при запуске программы сначала в терминале стартует некий контроллер, который обрабатывает ввод от пользователя и и отображает его в подходящей формочке? А почему в веб-десигне должно быть всё через жопу?

anonymous(*)(2012-07-12 14:59:43)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от anonymous 2012-07-12 14:59:43
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

А что у тебя это формочку инициализирует? Или она таки создается сама-собой?

Tux-oid(*)(2012-07-12 15:06:49)

Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20120615 Firefox/13.0.1 SeaMonkey/2.10.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[php][patterns][KISS]Hello, World! от Tux-oid 2012-07-12 15:06:49
avatar
Скрыть

Re:[php][patterns][KISS]Hello, World!

Что _ты_ создаёшь чтобы она проинициализировалась? Всегда есть какой-то общий механизм инициализации, это не твой кастомный функционал ака контроллер.

anonymous(*)(2012-07-12 15:11:58)

Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!