За последние 24 часа нас посетили 17902 программиста и 1611 роботов. Сейчас ищут 1437 программистов ...

правильное ООП

Тема в разделе "Решения, алгоритмы", создана пользователем GudGuy, 25 авг 2008.

  1. Anonymous

    Anonymous Guest

    Аггрегирование, или синглтон + ServiceLocatior pattern
     
  2. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    ОГРОМНОЕ СПАСИБО!!!!
    надеюсь что тепрь у меня всё будет гораздо прямее и логичней в коде=)
     
  3. Anonymous

    Anonymous Guest

    Еще лучше, если оно станет прямее и логичней в голове...
     
  4. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    Горбунов Олег
    собственно код я стараюсь именно оттуда и брать=)
     
  5. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    верный признак того, что с ооп-ом у вас не всё в порядке - наличие конструкций if :) декомпозируйте дальше!
     
  6. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    эм.. я что-то пропустил? :?
     
  7. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Ты что, наркоман? Я тебе аватару-фото дэвида блэйна удалил. буоагага
     
  8. Xerk

    Xerk Активный пользователь

    С нами с:
    5 окт 2007
    Сообщения:
    177
    Симпатии:
    0
    Адрес:
    Владивосток
    хм... видимо я чего-то не догоняю...

    http://wiki.agiledev.ru/doku.php?id=ooa ... _injection

    PHP:
    1. <?php
    2. class readerLocator extends locatorPiece {
    3.     private $reader;
    4.  
    5.     public function getReader() {
    6.         return $this->reader;
    7.     }
    8.  
    9.     public function setReader(IReader $reader) {
    10.         $this->reader = $reader;
    11.     }
    12. }
    13.  
    14. class writerLocator extends locatorPiece {
    15.     private $writer;
    16.  
    17.     public function getWriter() {
    18.         return $this->writer;
    19.     }
    20.  
    21.     public function setWriter(IWriter $writer) {
    22.         $this->writer = $writer;
    23.     }
    24. }
    25.  
    26. $locator = serviceLocator::getInstance();
    27.  
    28. $locator->addLocator(new readLocator());
    29. $locator->addLocator(new writeLocator());
    30.  
    31. $source = $locator->getReader();
    32. $destination = $locator->getWriter(); ?>
    как в объекте $locator возникают эти методы?
    $locator->getReader();
    $locator->getWriter();

    если эти методы изначально прописаны в классе serviceLocator, то для чего такой финт ушами с методом addLocator()?
     
  9. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Xerk
    Не уверен, но возможно, локаторов можно подцеплять несколько, типа связки. И когда ты обращаешься к сервисЛокатору, он последовательно опрашивает вложенные объекты. Графоманство все это, имхо :) Если вам нужна хорошая изоляция частей системы друг от друга - ну так сделайте событийную систему, как в Delphi. Намного проще и понятнее, чем все эти инжекторы-локаторы.
     
  10. Xerk

    Xerk Активный пользователь

    С нами с:
    5 окт 2007
    Сообщения:
    177
    Симпатии:
    0
    Адрес:
    Владивосток
    Эм, если я правильно понял - он ищет первый попавшийся вложенный обьект у которого есть метод, в данном примере getReader() или getWriter(), и вызывает этот метод?
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. class Locator ...
    3.     public function addLocator($locator) {
    4.          foreach ($locator->getMethods() as $method) { // get_class_methods
    5.              $this->methods[$method] = $locator;
    6.          }
    7.     }
    8.    
    9.     public function __call($method, $args) {
    10.         if (isset($this->methods[$method])) {
    11.             return $this->methods[$method]->$method;
    12.         }
    13.     }
    Сильно упрощая, получается как-то так.
     
  12. Xerk

    Xerk Активный пользователь

    С нами с:
    5 окт 2007
    Сообщения:
    177
    Симпатии:
    0
    Адрес:
    Владивосток
    примерно так я и думал...
    Что мне не понравилось - возможность случайного перекрытия методов...