Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: отделение вывода

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: а как у вас?
DlTA
Отправлено: 28 Апреля, 2014 - 15:50:29
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




подскажите как у вас организовано формирование отчетов/бланков и т.д.

типовая задача, формирование бланка заказа на основе списка товаров
бланков у нас 3 варианта (для каждого из поставщиков)
сейчас это как то так:
PHP:
скопировать код в буфер обмена
  1. $listGoods = gelListGoods();
  2. foreach($listGoods as $goods){
  3.   if(/* проверяем что для поставщика 1 */){
  4.     /* на основе товара формируем вывод под данный бланк 1*/
  5.   }
  6.   if(/* проверяем что для поставщика 2 */){
  7.     /* на основе товара формируем вывод под данный бланк 2*/
  8.   }
  9. // ...
  10. }



с патернами проектирования я еще на ВЫ сильно не пинайте)

предполагаю реализовать по шаблону фабличного метода

то есть примерно должно получиться:
PHP:
скопировать код в буфер обмена
  1. $oBlankCreater = null;
  2. switch($blankType){
  3.         case 1: $oBlankCreater = CBlCre1(); break;
  4.         case 2: $oBlankCreater = CBlCre2(); break;
  5.         default: $oBlankCreater = CBlCre3(); break;
  6. }
  7.  
  8. echo $oBlankCreater->blank($listGoods);


так вот вопрос, а у вас как?

(Отредактировано автором: 28 Апреля, 2014 - 15:51:47)

 
 Top
tato
Отправлено: 30 Апреля, 2014 - 09:02:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




предположим есть массив с данными бланков:


1. вариант
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. // Вариант с методами
  3. class Factory
  4. {
  5.  
  6.     private
  7.         $_type,
  8.         $_params;
  9.    
  10.     public function __construct( $type, $params )
  11.     {
  12.         $this->_type = $type;
  13.         $this->_params = $params;
  14.     }
  15.  
  16.     public function create()
  17.     {
  18.         $method = '_create' . ucfirst( $this->_type );
  19.        
  20.         if( method_exists( __CLASS__, $method ) )
  21.         {
  22.             $this->$method();
  23.         }
  24.         else
  25.         {
  26.             throw new Exception( 'fail' );
  27.         }
  28.     }
  29.  
  30.     private function _createTest()
  31.     {
  32.         print_r( $this->_params );
  33.     }
  34.  
  35. }
  36.  
  37. $factory = new Factory( $blank['type'], 'test string' );
  38. $factory->create(); // напечатает тестовую строку
  39.  


2.вариант
PHP:
скопировать код в буфер обмена
  1. // Вариант с классами
  2. class Factory
  3. {
  4.  
  5.     private
  6.         $_type,
  7.         $_params;
  8.  
  9.     public function __construct( $type, $params )
  10.     {
  11.         $this->_type = $type;
  12.         $this->_params = $params;
  13.     }
  14.  
  15.     public function create()
  16.     {
  17.         $class = ucfirst( $this->_type ) . 'Creator';
  18.        
  19.         if( class_exists( $class ) )
  20.         {
  21.             return new $class( $this->_params );
  22.         }
  23.         else
  24.         {
  25.             throw new Exception( 'fail' );
  26.         }
  27.     }
  28.    
  29. }
  30.  
  31. $factory = new Factory( $blank['type'], 'test string' );
  32. $creator = $factory->create(); // вернет объект TestCreator


-----
просто ?: сложно
 
 Top
DlTA
Отправлено: 30 Апреля, 2014 - 10:31:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




tato пишет:

1. вариант
2.вариант

насколько я понял теорию, то примером абстактной фабрики есть вариант 2, а вариант 1 это пример фабричного метода, так?
 
 Top
tato
Отправлено: 30 Апреля, 2014 - 10:46:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




Да, но это пример одной из реализации, принцип у всех один.
По итогу надо определиться, что Вы хотите на выходе, какой-то класс или результат.
Я за классы, т.к. можно прикрутить интерфейсы, далее где-то например есть метод print( Creator $creator ) уже не запихнеш "не то". Т.е. у нас в любом случае получается новый тип данных и Мы с ним работаем.

С методами проще и если не предпологается дальше что-то мудрить, то лучше их использовать.


-----
просто ?: сложно
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB