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
Отправлено: 19 Февраля, 2013 - 15:49:49
Post Id



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


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


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




в очередной раз с толкнулся с не совсем понятным для себя моментом
а именно:
имеем некий класс (набор методов) для обработки неких данных (получить, сохранить, ...)

по причине своей "лени" и не желанию запоминать ключи для assoc массива есть желание возвращать на запросы объекты, но не stdObject. а чет более формальное, тоесть свой класс для данных
и вот тут вопрос
тоесть у меня есть (будет, еще не написан) класс со статическими методами для получения данных, и класс объекты которого будут возвращаться предыдущим, классом,
логически это дело все относится к одному и тому же, но хотелось определиться разделять эти классы или слепить в одно целое, и почему?

больше интересует почему.
 
 Top
NoPaper
Отправлено: 19 Февраля, 2013 - 18:36:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


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




DlTA пишет:
тоесть у меня есть (будет, еще не написан) класс со статическими методами для получения данных, и класс объекты которого будут возвращаться предыдущим, классом,
логически это дело все относится к одному и тому же, но хотелось определиться разделять эти классы или слепить в одно целое, и почему?

Зачем эти static? Думаю, я правильно понял:
PHP:
скопировать код в буфер обмена
  1.  
  2. $do = new ToDoSmth();
  3. $r1 = $do->Action('delete');  //"Result: delete"
  4. $r2 = $do->Action('create');  //"Result: create"
  5.  
  6. var_dump($r1->Get());
  7. var_dump($r2->Get());
  8.  
  9. class ToDoSmth{
  10.  public function Action($param){
  11.   //Что-то делаем
  12.   //...
  13.   //Возвращаем результат
  14.   return new Result($param);
  15.  }
  16. }
  17.  
  18. class Result{
  19.  private $resultate;
  20.  public function __construct($in){
  21.   $this->resultate = 'Result: '.$in;
  22.  }
  23.  public function Get(){
  24.   return $this->resultate;
  25.  }
  26. }
  27.  


Если методы класса Result будут статическими, будет сохранен результат последней выполненной операции. Как предложенный мною вариант, возвращать класс result с хранимыми в нем данными. А вообще это извращение какое-то, лень, конечно, двигатель прогресса, но лучше лишний раз постараться, чем потом изобретать подобные 'костыли'.

(Отредактировано автором: 19 Февраля, 2013 - 18:42:27)

 
 Top
DelphinPRO
Отправлено: 19 Февраля, 2013 - 20:37:31
Post Id



Активный участник


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


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




DlTA, я так делаю иногда. когда возвращаемый массив с большим количеством постоянных ключей.
Исключительно ради удобства - автокомплит в IDE.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 19 Февраля, 2013 - 23:06:44
Post Id


Активный участник


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


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




Достаточно одного класса с фабричными методами. Как бонус - возможность статических методов доступа к приватным членам класса - удобно для инициализации и заполнения данными.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DlTA
Отправлено: 20 Февраля, 2013 - 09:00:21
Post Id



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


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


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




NoPaper, честно говоря слабо понимаю в чем выгода между моим статиком и вашем заоболоченым статиком, где то там в теории возможен вариант что это дело будет как то иначе юзаться, но ваш вариант серавно требует исползование текстовых ключей, их конеш можно заменить на объявленные константы,
но в итоге это такой ком получается ...
(Добавление)
DelphinPRO, "так" это по примеру NoPaper?
(Добавление)
caballero пишет:
Достаточно одного класса с фабричными методами.

я конеш еше плаваю в патернах,
но на сколько знаю "фабричный метод" это метод возвращающий однотипные объекты на основе входного параметра (-ров)

эсли это так, то встает только один вопрос. чеб его не сделать статическим, в моем случае бону не бонус.
 
 Top
DelphinPRO
Отправлено: 20 Февраля, 2013 - 09:26:54
Post Id



Активный участник


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


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




DlTA пишет:
DelphinPRO, "так" это по примеру NoPaper?

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

PHP:
скопировать код в буфер обмена
  1. class DataClass {
  2.   public $prop1;
  3.   public $prop2;
  4. }
  5.  
  6. class SomeClass {
  7.   /**
  8.    * @return DataClass
  9.    */
  10.   public function SomeMethod(){
  11.     $o = new DataClass();
  12.     $o->prop1 = 1;
  13.     $o->prop2 = 2;
  14.     return $o;
  15.   }
  16. }


таким образом, при наборе
PHP:
скопировать код в буфер обмена
  1. $data = $SomeClassObject->SomeMethod();
  2. $data->

после стрелки я получаю подсказку IDE о имеющихся ключах.

(Отредактировано автором: 20 Февраля, 2013 - 09:27:49)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DlTA
Отправлено: 20 Февраля, 2013 - 10:11:43
Post Id



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


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


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




в общем да, но мне кажется не логичным разбивать это дело на 2 класса, так как это все относится к единой сущности (в моем случае)

на данный момент решил статическим методом делать выборку, а методы редактирования находятся в каждом конечном объекте
 
 Top
caballero
Отправлено: 20 Февраля, 2013 - 11:26:59
Post Id


Активный участник


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


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




Цитата:
я конеш еше плаваю в патернах,
но на сколько знаю "фабричный метод" это метод возвращающий однотипные объекты на основе входного параметра (-ров)

это естественное упрощение паттерна Фабрика. Параметры даже не обязательны. Класический пример - синглетон, который создает экземпляр класса с посмощью фабричного статического метода. Кстати - пример преимущества фабричнызх методов - мы можем создать обхект с приватным конструктором. А по другому никак - frend классы есть только с С++.

(Отредактировано автором: 20 Февраля, 2013 - 11:27:37)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DlTA
Отправлено: 20 Февраля, 2013 - 12:16:49
Post Id



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


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


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




caballero пишет:
мы можем создать обхект с приватным конструктором.
)))) о де извращение, интересно глянуть на архитектуру где без этого никак.
 
 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