wildsam
Новичок
Есть вот такой небольшой симпатичный класс:
Одно плохо: инъекция практических однотипных конкретных реализаций одного интерфейса IResponceParser $firstLevelResponceParser, IResponceParser $secondLevelReponceParser в конструкторе.
Вопрос: как избавиться? Возможно с радикальной сменой реализации.
Спасибо!
PHP:
class Processor
{
// Класс прогружает с сайта элементы и их дочек.
const FIRST_LEVEL_URL = 'http://site.com/1.php';
const SECOND_LEVEL_URL = 'http://site.com/2.php?id=';
protected $_downloader;
protected $_storage;
protected $_firstLevelRepsonceParser;
protected $_secondLevelRepsonceParser;
// IDownloader реализует единственный метод get($url), IStorage - add($id, $name, $parentId), IResponceParser - parse()
public function __construct (IDownloader $downloader, IStorage $storage, IResponceParser $firstLevelResponceParser, IResponceParser $secondLevelReponceParser)
{
$this -> _downloader = $downloader;
$this -> _storage = $storage;
$this -> _firstLevelResponceParser = $firstLevelResponceParser;
$this -> _secondLevelResponceParser = $secondLevelResponceParser;
}
public function go()
{
$firstLevelResponce = $this -> _downloader -> get (self::FIRST_LEVEL_URL); // закачали весь файл
$firstLevelItems = $this -> _firstLevelResponceParser -> parse($firstLevelResponce); // получили array целевых данных
foreach ($firstLevelItems as $firstLevelItem) { // для каждого элемента...
$this -> _storage -> add ($firstLevelItem.id, $firstLevelItem.Name, 0) // добавили в хранилище (id, name, parentId)
$secondLevelResponce = $this -> _downloader -> get (self::SECOND_LEVEL_URL.$firstLevelItem.id); // закачали весь файл с дочерними элементами
$secondLevelItems = $this -> _secondLevelResponceParser -> parse($secondLevelResponce); // получили array целевых данных
foreach ($secondLevelItems as $secondLevelItem) { // для каждого элемента...
$this -> _storage -> add ($secondLevelItem.id, $secondLevelItem.Name, $firstLevelItem.id) // добавили в хранилище (id, name, parentId)
}
}
}
}
Вопрос: как избавиться? Возможно с радикальной сменой реализации.
Спасибо!