1. PHP / Говнокод #18727

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    class Order_OrderProcessorBuilder
    {
        /**
         * @param $processorName
         * @return Order_Abstract_OrderAbstract
         */
        private static function createOrderProcessor($processorName)
        {
            $processorClassName = 'Order_Types_'.ucfirst($processorName);
            return new $processorClassName;
        }
    
        /**
         * @param $builderName
         * @param Order_Abstract_OrderAbstract $orderProcessor
         * @return Order_Abstract_BuilderAbstract
         */
        private static function createOrderBuilder($builderName, Order_Abstract_OrderAbstract $orderProcessor)
        {
            $builderClassName = 'Order_Builders_'.ucfirst($builderName);
            return new $builderClassName($orderProcessor);
        }
    
        /**
         * @param Order_Abstract_BuilderAbstract $orderBuilder
         * @return Order_Director
         */
        private static function createDirectorClass(Order_Abstract_BuilderAbstract $orderBuilder)
        {
            return new Order_Director($orderBuilder);
        }
    
        /**
         * @param $orderTypeName
         * @return Order_Abstract_OrderAbstract
         */
        public static function build($orderTypeName)
        {
            /** @var Order_Abstract_OrderAbstract $orderProcessor */
            $orderProcessor = self::createOrderProcessor($orderTypeName);
            /** @var Order_Abstract_BuilderAbstract $orderBuilder */
            $orderBuilder = self::createOrderBuilder($orderTypeName, $orderProcessor);
            $director = self::createDirectorClass($orderBuilder);
    
            $director->construct();
            return $orderBuilder->getResult();
        }
    }

    Вот такая у нас есть прослойка, которая работает с паттероном "строитель", честно говоря недавно понял зачем она нужна, не знаю.. Как вам решение? Код не мой

    Запостил: proweber1, 16 Сентября 2015

    Комментарии (18) RSS

    • Читать с выражением:
      OrderProcessorBuilder

      Order Builder,
      create Processor
      Order Builder,
      do construct
      Order Builder,
      create Director
      Order Builder,
      get result
      Ответить
    • > недавно понял зачем она нужна, не знаю
      При чтении этого комментария у меня случилась ошибка компиляции.
      Ответить
      • Не, ну серьезно
        Ответить
      • Код то говно?
        Ответить
        • Билдером там и не пахнет, ощущается лёгкое амбре фабрики. Идея, кмк, - откровенное Г.
          Ответить
        • Одно только "new $className" - говно уровня эвала.
          Ответить
          • Это реально то, что я думаю? Создаем экземпляр класса с именем из переменной?
            Ответить
            • Именно.
              Ответить
              • Из той же оперы: двойные баксы.

                $var = "s";
                // s = 1
                $$var = 1;
                Ответить
                • http://govnokod.ru/18661
                  Ответить
                  • Три бакса работают как 2*2 бакса?
                    Ответить
                    • Не будем усложнять. Три бакса — это три бакса.

                      Пусть
                      $a = 'b';
                      $b = 'c';
                      $c = 'd';
                      $d = 'e';


                      Тогда
                      $$a ≡ $b;
                      $$$a ≡ $$b ≡ $c;
                      $$$$a ≡ $$$b ≡ $$c ≡ $d;
                      $$$$$a ≡ $$$$b ≡ $$$c ≡ $$d ≡ $e;
                      Ответить
                      • и после этого ты типа не питух?
                        Ответить
                      • > Не будем усложнять. Три бакса — это три бакса.

                        Отчего же, давайте введём формализм усложним. Для удобства заменим доллар трансформацией deref : Ref -> Ref, возвращающей ссылку на область памяти, соответствующую имени, содержащемуся во входной ссылке. Транформация не определена, если во входной ссылке находится не строка.

                        Определим операцию * как композицию функций. Нетрудно доказать, что композиция функций ассоциативна. Это означает, что скобки в выражениях композиции можно ставить как угодно.
                        $$$x
                        (definition of deref)
                        == deref (deref (deref x))
                        (definition of *)
                        == (deref * deref * deref) x
                        (associativity of *)
                        == (deref * deref) * (deref x)
                        (associativity of *)
                        == deref * (deref * deref) x

                        Итого, три бакса это:
                        1) три бакса
                        2) 1 бакс + 2 бакса
                        3) 2 бакса + 1 бакс
                        4) 1 бакс + 1 бакс + 1 бакс
                        исключительно ради лулзов, разумеется
                        Ответить
    • > Как вам решение? Код не мой
      1. Научись отвечать за свой код.
      Ответить
    • - Спасибо, - я уткнулся носом ему в плечо, ощущая запах его одеколона.
      Ответить

    Добавить комментарий