Пишу сюда, с просьбой дать совет как правильно перестроить уже написанное.
С чем работаем:
Подключаемся к сайту и скачиваем исходный код заявки. В исходном коде при помощи регулярок достаем нужную информацию, среди которой будут пути к файлам для скачивания и ID-сообщений, исходный код которых нужно также скачивать с сайта и вновь парсить.
Что сделано:
Имеется 4 класса: Менеджер (Manager), Заявка (Bid), Общие функции (General), Внешние функции (External).
1) В классе Manager я подключаю через require_once файлы с остальными классами.
Здесь происходит первичное подключение к сайту через curl, скачивание исходного кода заявки и передача его для парсинга в класс Bid, скачивание сообщение и передача их для парсинга в класс Bid, скачивание файлов.
А также множество таких функций, цель которых получить не всю пропарсенную заявку, а только конкретный её элемент, например только владельца:
public function owner() {
return $this->owner;
}
Структура класса такова:
class Manager extends Bid {
function __construct($login, $password, $url) {
...
}
public function getBid($bidId) {
...
return Bid::__construct($bidId, $bidSrc);
}
public function owner() {
return $this->owner;
}
...
}
2) Класс Bid предназначен для парсинга переданного в его конструктор исходного кода заявки и присвоение найденного результата к protected переменным. Также в конструкторе мы обращаемся в класс Manager, чтобы он скачал сообщения для дальнейшего парсинга.
Структура класса:
class Bid extends General {
protected $BidId;
protected $owner;
...
private $bidSrc;
function __construct($bidId, $bidSrc) {
$this->bidId = $bidId;
$this->bidSrc = $bidSrc;
$this->getOwner();
...
$this->messagesSrc = Manager::getDownloadMessages();
$this->getEmail();
...
}
protected function getOwner() {
$resOwner = array();
if (preg_match_all('/<label>Владелец:<\/label>[^>]+<p[^>]+title=([\'"])?((?(1).+?|[^\s>]+))(?(1)\1)/', $this->bidSrc, $resOwner)) {
$this->owner = $resOwner[2][0];
return true;
} else {
$this->owner = 'failed';
return false;
}
}
...
}
3) Класс General содержит общие функции, одни из которых предназначены для класса Manager (для работы с файлами), а другие для класса Bid (например, перевод даты в формат timastump и прочее).
Структура класса:
class General extends External {
function __construct() {
}
protected function dateToTimestamp($resDateCreation) {
...
}
...
}
4) Класс External содержит функции написанные не мной, например сохранение массива в файл, транслитерация русских букв в латиницу и прочее. Данные функции могут использоваться как классом Manager, так и классом Bid.
Структура класса:
class libExternal {
protected function translit($name) {}
...
}
В фирме также имеются php-программисты, но отвлекать их от работы нельзя. Хотя, одному более-менее лояльному дал посмотреть свой код, так он сказал, что чуть ли всё ошибочно. Так он заявил, что я не понимаю для чего нужно наследование, раз использую такую цепочку наследований. Тем более, что тут наследованием и не пахнет.
Сказал, что если я захочу использовать класс Bid отдельно, то из-за $this->messagesSrc = Manager::getDownloadMessages(); сделать этого не смогу. Что объектная модель не гибкая. Например, если я захочу получить только список файлов для скачивания, а не скачивать их, то этого сделать не смогу, так как не предусмотрено и мне придется лезть в твой класс и вносить изменения, а представь, что сделать я этого не могу.
Посоветовал переделать все так, чтобы от пользователя скрывалась вся техническая сторона (подключение к сайту, парсинг, скачивание файлов), но пользователь не ограничевался бы в возможностях по манипуляции с полученными данными. Что называть классы как "Общие функции" и "Внешние функции" глупо.
Вот прошу Вас дать советы, как было бы правильно перестроить код с точки зрения ООП.
Понятно, допустим я наследование уберу, но как я буду передавать в другой класс собранные ID сообщений для их скачивания и обратной передачи их исходного кода в класс парсинга.
Спасибо за любые советы.