
Dmitry
13.12.2017
17:05:08
ну и это тоже, вообще больше композиции меньше наследования ;) другое дело, что композиция тоже потребует рефакторинга скорее всего, если заранее не запланировали

Alexander
13.12.2017
17:06:56
рефакторинга любой код потребует, как по мне

Dmitry
13.12.2017
17:15:57
ну как раз наследование с ненарушенным LSP по сути рефакторинга не потребует

Google

Anton
13.12.2017
18:40:29

Dmitry
13.12.2017
18:41:25
я Алексею, как раз про понимание LSP

Anton
13.12.2017
18:41:45
сори я думал ты спрашиваешь

Konstantin
13.12.2017
19:43:36
почему при использовании в модыксе рево formit с аджакс оберткой я указываю &successMessage=Сообщение успешно отправлено
а во всплывающем сообщении написано совсем иное при успешной отправке


Евгений
13.12.2017
19:49:59
смотри, был у тебя car, он принимал любой setspeed.... и ты не парился вообще, и везде делал ->setSpeed(); а потом появился heavycar и ты сидишь, думаешь... а как же сделать так,что бы нельзя было ставить ->setSpeed(250).... в принципе, любое, что придумаешь - скорее всего нарушит LSP. Кинишь исключение - но у тебя код, который раньше работал со спорткаром не ожидает исключение - программа просто упадет... проигнорируешь - тоже плохо, тебе скорость изменили, а ты не бе не ме... в принципе, можешь на ->setSpeed(250) поставить внутри $this->_speed = 80... но тут опять же, зависит от того, как объект используется, например, ты поставил скорость 250 и знаешь, что приедешь в город через час (посчитал), а реально - не приедешь, ибо реальная скорость 80
Как справляться? рефакторить, например ;)
Переопределить метод setSpeed родителя, когда делаешь потомка и поставить ограничение на скорость

Dmitry
13.12.2017
19:50:38

Евгений
13.12.2017
19:52:27

Dmitry
13.12.2017
19:53:18
но твой другой код, который вызывает setspeed не ждет исключения... никто не ждет.. в итоге программа падает

Dmitry
13.12.2017
19:54:12
вероятно нужно вводить свойство $maxSpeed и каждому наследнику его указывать, т.е. потребуется рефакторинг родительского класса в том числе

Евгений
13.12.2017
19:54:36
А не родитель

Dmitry
13.12.2017
19:55:09

Dmitry
13.12.2017
19:56:55
я правильно понимаю что принцип о том, как правильно расширять логику, а не как проектировать родительские классы на все случаи жизни?

Google

Евгений
13.12.2017
19:57:15
А если потребуется гоночный болид?

Dmitry
13.12.2017
19:57:39
там в примере про SportCar и было
суть одна

Dmitry
13.12.2017
19:58:30
принцип о том, что неверное использование наследования приводит к проблемам ;)

Sergey
13.12.2017
20:53:37
а не все подряд

Dmitry
13.12.2017
20:54:19
одно другому не противоречит ;)

Sergey
13.12.2017
20:55:18
эт да
тут Алан кей недавно в блоге Бугаенко проходил и вещал за то что наследование не очень хорошо к слову) буквально вчера)

Dmitry
13.12.2017
20:57:51
ну против наследования за композицию я вообще давно слышу... несколько лет точно ;)
если у нас есть extended от неабстрактного класса - с большой вероятностью будут проблемы... но в общем, теория не всегда совподает с жизнью ;)

Sergey
13.12.2017
20:59:23

Dmitry
13.12.2017
21:00:46
ну я имею ввиду массовые источники.. форумы всякие, хабр тот же. Книжки хорошо, только кто их читает... единицы ;)

Sergey
13.12.2017
21:01:11
может кому интересно будет) смакота в комментах
там неплохой экскурс в историю
> Note that inheritance can be really useful in very narrow uses, such as refinement. The problem with it in most languages that have it — including Smalltalk-80 — is that you can do too many things with it, and this destroys the ability to reason about what you get when you do inherit.

Andrew
13.12.2017
21:19:40
о, свеженькое :)

?
14.12.2017
01:27:36
PHP RFC: Namespace-scoped declares
https://wiki.php.net/rfc/namespace_scoped_declares

Anton
14.12.2017
03:47:36
Наследование - это жесткая зависимость одного класса от другого.

Google

Dmitry
14.12.2017
06:58:46
Всем привет. Подскажите, использование очередей предполагает некое распараллеливание задач на исполнителей. А как узнать, что общая задача выполнена? Пример, парсер нескольких источников. Разбрасываем источники на 3-4 исполнителя. Каким образом (кроме как смотреть состояние очереди) можно узнать, что задача выполнена и можно приступать к обработке результатов?

Ivan
14.12.2017
07:03:18
Писать в конце выполнения куда-то статус.
В GEARMAN можно так http://php.net/manual/en/gearmanclient.addtaskbackground.php ( setCompleteCallback при выполнении каждой отдельной задачи) , а в $gmc->runTasks() он сам дожидается

Dmitry
14.12.2017
07:06:32

Dmitriy
14.12.2017
07:07:28
сохраняй куда-нить результаты работы

Ilya
14.12.2017
07:08:26
можно считать количество отправленных задач и количество выполненых, когда счётчик обнулится значит задачи выполнены

Ivan
14.12.2017
07:12:04

Dmitry
14.12.2017
07:12:26
ну то есть предложенный принцип следующий: я запускаю общую задачу парсинга по 10 источникам на 3 воркера. Выполнив задачу, воркер пишит в таблицу какую-то метку и успешность результата (с целью перевыполнить). Считаю кол-во меток. Если совпадет то можеет приступать следующий сервис к работе ... так?

Ilya
14.12.2017
07:16:19
перед добавлением задачи в очередь инкрементируешь счётчик, как задача выполняется декрементируешь его, и в цикле проверяешь не равен ли счётчик 0

Dmitry
14.12.2017
07:18:10

Ilya
14.12.2017
07:19:20
счётчик может быть в каком-нибудь редисе

Dmitry
14.12.2017
07:36:30
Вот интересный пример еще (последний коммент)
https://stackoverflow.com/questions/13861459/rabbitmq-wait-for-multiple-queues-to-finish

Victor
14.12.2017
07:50:00
Ребзя, такой оффтоп, должны ли микросервисы быть стейт-лесс ?

Sergey
14.12.2017
07:50:11
почему ты сделал такое предположение?
и где ты собрался в таком случае хранить стэйт

Victor
14.12.2017
07:51:46
Ну, если они будут иметь состояние на себе, тогда их не получиться горизонтально масштабировать

Sergey
14.12.2017
07:52:12
ммм.... то есть ты хочешь сказать что базу данных невозможно горизонтально масштабировать потому что в ней лежит стэйт?)

Victor
14.12.2017
07:53:08

Sergey
14.12.2017
07:53:32
вот у тебя есть микросервис пользователей, который отвечает за такие мелочи как регистрация, авторизация и т.д. У него своя база данных которая по сути имеет только таблички с профайлами, кредами и т.д.

Google

Sergey
14.12.2017
07:53:41
что тебе мешает масштабировать этот микросервис?
и что именно ты будешь масштабировать?

Яўген
14.12.2017
07:55:09
В вычислительной технике, протокол без сохранения состояния (англ. Stateless protocol) — это протокол передачи данных, который относит каждый запрос к независимой транзакции, которая не связана с предыдущим запросом, то есть общение с сервером состоит из независимых пар запрос-ответ[en].
Сергей, если ты хочешь хранить куки в микросервисе, то не стоит

Sergey
14.12.2017
07:55:46
если тебе важно с какой копией микросервиса ты говоришь - то да это будет проблемой
ps. хранить не куки а сессии

Яўген
14.12.2017
07:56:58
в общем, лучше всякий раз представляться, когда обращаешься к сервису

Maksim
14.12.2017
07:57:07
что значит "храните куки в микросервисе"?

Яўген
14.12.2017
07:57:35

Admin
ERROR: S client not available

Victor
14.12.2017
07:58:35
Вот я о том же, если говорить о базе, то как бы Ее можно реплицировать или сделать общей. Но вот как быть с локальным состоянием ?

Maksim
14.12.2017
07:58:54
зукипер спешит на помощь

Sergey
14.12.2017
07:59:05

Яўген
14.12.2017
07:59:32
это как обращение к БД, ты всякий раз должен ввести логин/пароль и новый запрос никак не зависит от предыдущих (опустим кэширование и блокировки)

Sergey
14.12.2017
07:59:44
масштабирование в этом случае ты можешь достичь за счет репликации и хранения пула соединений

Яўген
14.12.2017
08:02:11

Google

Sergey
14.12.2017
08:02:18
и еще один момент - как локальный стэйт мешает тебе масштабироваться? Ведь масштабирование стэйта подразумевает какой-либо вариант репликации и синхронизации данных

Яўген
14.12.2017
08:02:31
если, конечно, упаси б-г, не персистентное

Sergey
14.12.2017
08:03:00

Maksim
14.12.2017
08:03:00
эм, а что не так с персистентным?

Sergey
14.12.2017
08:03:16

Victor
14.12.2017
08:03:31

Sergey
14.12.2017
08:03:55

Яўген
14.12.2017
08:04:20

Sergey
14.12.2017
08:04:21
по smtp ходит в gmail и скачивает письма?

Яўген
14.12.2017
08:05:26
а сколько соединений у тебя при pconnect?

Sergey
14.12.2017
08:05:38

Яўген
14.12.2017
08:05:40
Трофимов приглашается

Victor
14.12.2017
08:06:33

Sergey
14.12.2017
08:06:49
если там только на чтение операция

Petr
14.12.2017
08:07:06
персистентное соединение - кот в мешке. надо четко понимать зачем вы его используете

Sergey
14.12.2017
08:09:00

Victor
14.12.2017
08:09:23
и в чем проблема с маштабированием?
Ну, вот создал я копию, и теперь нужно у пользователя опять попросить доступ что бы сервис мог работать. (Фактически сервис выполняет задачи в фоне по расписанию)

Sergey
14.12.2017
08:09:38

Victor
14.12.2017
08:10:23

Sergey
14.12.2017
08:10:46