
Aleh
25.11.2016
21:03:03
или не очень немного

Dmitriy
25.11.2016
21:03:23

Sergey
25.11.2016
21:03:40

Google

Aleh
25.11.2016
21:03:48
предлагает отказаться от процедурщины, но не объясняет чем его код не процедурщина и чем она поможет

Dmitriy
25.11.2016
21:03:50

Aleh
25.11.2016
21:04:13
я за едой смотрел

Sergey
25.11.2016
21:04:21

Aleh
25.11.2016
21:04:28
еще не посмотрел
я вот object thinking не читал

Roman
25.11.2016
21:04:33
BaseParser - просто с потолка

Aleh
25.11.2016
21:04:40
поэтому вчера решил наверстать упущенное)

Sergey
25.11.2016
21:05:05

Roman
25.11.2016
21:05:22
в наследниках

Sergey
25.11.2016
21:05:31
то есть ты можешь сделать их... protected?

Roman
25.11.2016
21:05:34
в родителе возвращают false

Google

Roman
25.11.2016
21:05:53
lf
да

Sergey
25.11.2016
21:06:01
окей, идем дальше
можешь хотя бы примерно описать что на входе
html какой-то?

Roman
25.11.2016
21:06:32
да
страницы допустим авито

Sergey
25.11.2016
21:06:45
окей
дальше

Roman
25.11.2016
21:06:52
ну абстрактно совсем

Sergey
25.11.2016
21:06:55
что они возвращают? всегда bool или еще чего?

Dmitriy
25.11.2016
21:07:03
это главный вопрос
class Modul{
public function getUrlRedirect(){
// тут чтото
}
// и 5 других функций
}
class Pocket extends Modul{
} Это нормально? или как тогда сделать модульную систему без extends . Что бы я с генерировал модуль и он уже отдавал базовые данные

Roman
25.11.2016
21:07:07
3 детекста всегда бул

Aleh
25.11.2016
21:07:21

Sergey
25.11.2016
21:07:24

Roman
25.11.2016
21:08:14
возвращает массив

Dmitriy
25.11.2016
21:08:30

Sergey
25.11.2016
21:08:31
то есть это не детектор, это экстрактор

Google

Roman
25.11.2016
21:08:36
да

Sergey
25.11.2016
21:08:40
да
interface Detector
{
public function detect(string $html): bool;
}
interface Extractor
{
public function extract(string $html): array;
}

Aleh
25.11.2016
21:10:27
POJO это то, где нет инкапсуляции :)))

Sergey
25.11.2016
21:10:43

Roman
25.11.2016
21:11:38
тогда лучше абстрактый класс

Sergey
25.11.2016
21:11:54

Aleh
25.11.2016
21:12:04
хотя второй чувак за сеттеры топит

Sergey
25.11.2016
21:12:05
но интерфейсы норм? на вход html на выход либо bool либо данные

Aleh
25.11.2016
21:12:08
странные они короче

Roman
25.11.2016
21:12:12
абстрактные методы обязательны к реализации

Sergey
25.11.2016
21:12:23

Roman
25.11.2016
21:12:28
придется имплементить постоянно

Aleh
25.11.2016
21:12:30

Sergey
25.11.2016
21:12:48

Roman
25.11.2016
21:13:30
если в первый интерфес поместить 3 метода детека, то наверно да

Sergey
25.11.2016
21:13:39
а теперь ход конем
....рано написал... 2 минутки

Roman
25.11.2016
21:13:53
но нужно чтоб 4 метод возвращал не пустой массив
Extractor

Google

Sergey
25.11.2016
21:14:37
ну "не пустой массив" это тогда делай какой-то тип вроде Result
https://gist.github.com/fesor/fc298d4a97eb7d27858f0668f237a79a
удобно тестить, удобно расширять
юзаешь всегда только то что нужно

Dmitriy
25.11.2016
21:16:54
напиши ТЗ
Есть проект, его дадача отпрашивать огромное кол-во api.
Постоянно нужно пилить новые коннекты.
Проект разделен на модули . У каждого модуля свои параметры авторизации, настройки. Один сервис требует логин пароль, а другой настройки подключения.
Получается EDA.
Вот как тут правильно создать структуру архитектуру. что бы я мог за мину установить базовый модуль. и начать работать с другим api .

Sergey
25.11.2016
21:17:14
> Проект разделен на модули . У каждого сервиса
уже неконсистентность требований
> У каждого сервиса свои параметры авторизации, настройки. Один сервис требует логин пароль, а другой настройки подключения.
сделай интерфейс Connector

Fayozjon [CybernatiC]
25.11.2016
21:17:41
Вы опять ту тему начали?))

Sergey
25.11.2016
21:17:45
и пихай в класс конкретную реализацию
полиморфизм!

Admin
ERROR: S client not available

Roman
25.11.2016
21:17:48
согласен, спс за конкретику

Sergey
25.11.2016
21:18:20
export interface Extractor {
(html: string): Array;
}
и тогда
можно будет вместо ажно целого класса тупо юзать функции
но это typescript, ненастоящий язык
в php для структутизации кода у тебя только классы...
а потому приходится сильно больше писать что бы было норм

Roman
25.11.2016
21:22:02
можно было в твоем примере использовать trait с 3 методами детекторов, и имплементить Extract

Google

Sergey
25.11.2016
21:22:23

Roman
25.11.2016
21:22:33
зато не нужное писать 3 класса
для реализации детектов

Sergey
25.11.2016
21:22:44
тебе IDE сгенерит 80% кода
ленивый

Dmitriy
25.11.2016
21:22:52

Sergey
25.11.2016
21:22:59
зато потом тотальный контроль над ситуацией
мноооого маленьких классов
не облее двух экранов длиной
(без читерства в виде 24" вертикально стоящих экрана)

Roman
25.11.2016
21:23:44
final для этих классов нельзя использовать
может быть ситация, когда парсер наследует парсер
немного расширяя его

Sergey
25.11.2016
21:24:15
сделаешь новый класс
вместо того что бы наследоваться

Roman
25.11.2016
21:24:27
но это скорее исключительные ситуации

Fayozjon [CybernatiC]
25.11.2016
21:24:28
Да вернулись к той теме

Roman
25.11.2016
21:25:04
сделаешь новый класс
классы будут повторять код
не очень хорошо

Sergey
25.11.2016
21:25:56
но это скорее исключительные ситуации
final class ExtendedMyExtractor implements Extractor
{
private $base;
public function __construct(Extractor $base)
{
$this->base = $base;
}
public function extract(string $html): string
{
$result = $this->base->extract($html);
// do something with result
return $result;
}
}
это называется декорация

Dmitriy
25.11.2016
21:27:10
@fes0r что почитать о минусах наследования ?

Sergey
25.11.2016
21:27:36
http://www.javaworld.com/article/2073649/core-java/why-extends-is-evil.html