@oop_ru

Страница 564 из 785
Sergey
20.03.2018
07:26:36
cqs, юху :D
ну простите, CQS Мэйер сформулировал еще в 80-х. И не он его по сути выдумал)

Bohdan
20.03.2018
07:27:06
Sergey
20.03.2018
07:27:18
ты юзаешь то, что по сути является лишь надстройкой над идеями которые появились в начале 70-х (а если пишешь на джаве - в 60-х)

Google
Sergey
20.03.2018
07:27:40
ничего принципиально ногово с тех пор не появилось, сам знаешь... и это печально)

https://ru.wikipedia.org/wiki/The_Mother_of_All_Demos - почитай и поплачь)

https://www.youtube.com/watch?v=yJDv-zdhzMY

можешь даже посмотреть))

tldw: презентация концепции мыши, графических интерфейсов, word processor, видеоконцеренции, гипертекст.... и все это примерно за 20 лет до того как хоть что-то из этого получило распространение...

Bohdan
20.03.2018
07:33:39
уже на вики глянул

грустненько

хотя вон AR вкатывается

который нормальный :D

ну и VR с ним хотя это просто по причине возросших мощностей

Артур Евгеньевич
20.03.2018
08:08:46
по поводу архитектуры - архитектура это всегда наличие ограничений, которые призваны дать какую-то характеристику. Гексагональная архитектура - про направление зависимостей и инверсию зависимости. Это дает тебе гибкость в плане изоляции бизнес правил от инфраструктуры. Если тебе это надо - можешь туда смотреть. Если тебе надо организовать какую-то децентрализацию - можно другие ограничения рассматривать. Ну и т.д. Если мы попробуем выстроить аналогию между знакомыми тебе ООП штуками и экторами.... представь себе систему, простенькую... есть объект представляющий какую-то сущность. Например сделаем простенький todo список. В языках типа Java и в целом наследующих объектную модель всяких там симмул и C++, у тебя будут объекты на каждый список, будут объекты для каждого элемента списка и ты будешь работать как бы с ними. Будешь просить добавить новую тудушку в список, можешь просить "Завершить" конкретный элемент списка и т.д. В этом примере "объект" является не более чем границей зоны ответственности на уровне рантайма. То есть у тебя есть "внутри" и "снаружи", есть другие объекты с которыми нам надо взаимодействовать. В языках типа Erlang за "границы" отвечают микротреды. То есть это такие вот штуки на уровне рантайма которые позволяют тебе изолировать состояние. На каждый список будет тред, который отвечает только за список. Для работы отдельными элементами и их деталями мы можем сделать свои треды.... по треду на каждый агрегат (штуки учавствующие в бизнес транзакции). Ну и все это обменивается сообщениями. Теперь важный момент отличающий "вызов метода объекта" от "отправки сообщений" - наличие мэйлбоксов. То есть наш "эктор" отправляет сообщение другому, и все сообщения являются асинхронными по своей природе. Отправил сообщение и все. Положил его в мэйлбокс эктору а эктор как освободится почитает. Он может тебе прислать какой-то результат и положить уже в мэйлбокс первого эктора и т.д. Это решает вопрос синхронизации действий. Ну и так как "общих данных между экторами нет" - нет необходимости хоть что-то лочить (мэйлбоксы можно тоже лок-фри сделать). У тебя в целом получается полностью неблокируемая система. Для телекомов это вообще было смертельно важно потому именно в этом контексте эрланг и развивался.
А в чем отличие от bus тоже самое я кладу в маилбокс(шину) сообщение(команду или ивент) и тоже не знаю че там будет

Sergey
20.03.2018
08:09:08
ну и шина это шина, это не мэйлбокс. Она может быть входом в мэйлбок (через очереди задач например)

Google
Sergey
20.03.2018
08:09:49
по сути задача шины именно в том что бы "спрятать" эту деталь реализации

абстракция для отправки команд. Но с "запросами" она не помогает вообще никак

вообще на модель выполнения таких "процедурных" языков как java или C++ все это не так уж естественно ложится

ну то есть очень много надо сверху навернуть инфраструктуры. В языках типа эрланг или того же смолтока все это было весьма прозрачно

Артур Евгеньевич
20.03.2018
08:28:45
Т.е я отпавляю запрос в майлбокс, и жду что мне кто то на него ответит?(не зная кто) Это мне напоминает медиатор уже

Sergey
20.03.2018
08:29:35
дальше занимаешься своими делами

очень похоже на события

но немного с другой целью

Артур Евгеньевич
20.03.2018
08:30:46
а ответ я как получу? Т.е парарллельно пока я занимаюсь своими делами слушаю что-то типо порта? Или после того как свои дела завершу проверя, не случилось ли чего, что может быть овтетом?

Sergey
20.03.2018
08:30:58
я ссылки почитать дал - читай и разбирайся. И не пытайся связать это с паттернами типа медиатора и тд. Это чуть другая модель вычислений с точки зрения разруливания конкурентности. Цели разные у подходов. Абсолютно разные.

а ответ я как получу? Т.е парарллельно пока я занимаюсь своими делами слушаю что-то типо порта? Или после того как свои дела завершу проверя, не случилось ли чего, что может быть овтетом?
перечетай еще раз то полотнище что я написал, перейди по ссылке на публикацию и разберись с вопросом. И потом подискутируем.

а ответ я как получу? Т.е парарллельно пока я занимаюсь своими делами слушаю что-то типо порта? Или после того как свои дела завершу проверя, не случилось ли чего, что может быть овтетом?
в этом и соль - это не нормально что тебе там что-то ждать надо. Если у тебя пайплайн построен - второй эктор по завершению может тебе отправить сообщение.

Общение, а не приказы.

короч разбирайся и еще раз повторю - экторы это в большей степени про взаимодействие и конкуренцию. Про рантайм. Не пытайся примешивать к этому шины там всякие, медиаторы и т.д. потому что.... ну это мелкие штуки и они больше про то что происходив в коде, организация кода, а не рантайма

Roman
20.03.2018
08:52:38
а ответ я как получу? Т.е парарллельно пока я занимаюсь своими делами слушаю что-то типо порта? Или после того как свои дела завершу проверя, не случилось ли чего, что может быть овтетом?
Можно послать синхронный запрос (call) в gen_server, тогда отправитель на своей стороне начинает ждать ответа именно на это сообщение. Сообщения имеют уникальные id. Это как сделано в erlang. Можно просто послать запрос и не дожидаться ответа. Это будет асинхронный запрос

Roman
20.03.2018
08:55:44
а как в этом плане получить нужные данные? т.е как команды асинхронно работают в этом плане понятно, а вот именно запросы?
Послать синхронный request с запросом нудных данных и ждать response. Возможно, я не до конца понял вопрос

Артур Евгеньевич
20.03.2018
08:57:04
То есть наш "эктор" отправляет сообщение другому, и все сообщения являются асинхронными по своей природе. Отправил сообщение и все. Положил его в мэйлбокс эктору а эктор как освободится почитает. Он может тебе прислать какой-то результат и положить уже в мэйлбокс первого эктора и т.д.

Мне пока непонятен порядок проверки маилбокса

Google
Bohdan
20.03.2018
08:57:41
ну эктор себе работает там, захотел - проверил

освободился, точнее

Артур Евгеньевич
20.03.2018
08:58:05
вот я послал запрос асинхронный и и мне нужен результат, но вы говорите что я не должен ждать результат. В моем понимании ждать == првоерять свой маилбокс

Roman
20.03.2018
08:58:14
Процесс последовательно разгребает mailbox. Обработал одно сообщение, перешел к следующему

Дмитрий
20.03.2018
08:59:09
"Последовательность" — сугубо опциональна

Если актор умеет читать и реагировать на все сообщения сразу то его в этом ничто не ограничивает

Sergey
20.03.2018
09:00:22
Roman
20.03.2018
09:01:17
вот я послал запрос асинхронный и и мне нужен результат, но вы говорите что я не должен ждать результат. В моем понимании ждать == првоерять свой маилбокс
В erlang, если использовать gen_server, то для получения ответа от синхронного запроса, отправитель начинает слушать сообщение с таким же id, с которым он отправил request.

Не обязательно, чтобы все акторы общались только асинхронно, это же с ума можно сойти

Но разработчики любят усложнять себе жизнь, job safety, наверное

Дмитрий
20.03.2018
09:06:02
Это без очередей

В этом суть

Sergey
20.03.2018
09:06:27
Не обязательно, чтобы все акторы общались только асинхронно, это же с ума можно сойти
так же не обязательно как делать так что бы все экторы общались только синхрнонно))) разница в том что в эрланге у тебя есть выбор (имея возможность отправить сообщение и зная его айдишку ты можешь организовать синхронное взаимодействие), а в java выбора особо нет)

Это без очередей
мэйлбокс по сути и есть маленькая очередь, нет?)

ключевое слово - маленькая. Очень маленький и простой примитив)

а не какая-нибудь там Enterprise Service Bus

Дмитрий
20.03.2018
09:08:19
Фича в том, что изначально у тебя нет никакого жестко заданного критерия, каким образом производить чтение мейлбокса

Google
Sergey
20.03.2018
09:08:25
но суть что в случае с SOA что в случае с экторами в целом остается неизменной... есть "хрени" и они взаимодействуют (message passing)

Дмитрий
20.03.2018
09:09:00
То есть механизм, который за раз захочет взять все сообщения что есть, не менее валиден чем тот, который будет брать по одному; короче предикат такой

Aleh
20.03.2018
09:45:35


Sergey
20.03.2018
09:46:37
гулп еще жив?)

Bohdan
20.03.2018
09:47:58
каждый день спрашивают во вью чатике

Panda
20.03.2018
09:48:08
А есть у кого может какой-то урок или посмотреть/почитать как правильно дизайнить апишки? Может, какие то практики лучшие, или "поваренная книга"

Bohdan
20.03.2018
09:48:12
"а есть ли темплейт под гулп?"

Sergey
20.03.2018
10:16:44
гулп еще жив?)
гулп в каком году стал модным, напомнить?)

Дмитрий
20.03.2018
10:17:16
gulp lana

Uiiuviiw
20.03.2018
10:54:00
гулп если а таск ранере,то конечно жив. альтернатив вроде и нет

Артур Евгеньевич
20.03.2018
22:14:17
Парни, перевожу одну старенькую статью и там столкнулся с таким высказыванием: The application domain model includes interfaces that define its relationships with the outside world in terms of application domain concepts (Cockburn calls these interfaces "ports"). These interfaces are implemented by objects that translate the application domain concepts onto an appropriate technical implementation (Cockburn calls these objects "adapters"). In a distributed system, each process has an application domain model that communicates to other process via ports and adapters. Что здесь понимается под процессом, как думаете? Разные экземпляры одного и того же приложения или разные(с разной кодовой базой) приложения) - то что мы зовем микросервисами щас

Bohdan
20.03.2018
22:16:07
второе явно

просто связывать инстансы одного приложения через порты и адаптеры нет смысла

никакого скейлинга, один оверхед

Mykola
20.03.2018
22:56:00
второе, но с поправкой на то, что это не обязательно "микросервисы" в теперешнем их понимании

это ближе к actor-model

f4rt~
20.03.2018
22:58:36
скиньте кто-то мою любимую картинку :)

про код на акторах

Sergey
21.03.2018
10:19:25
https://www.sicpers.info/2018/03/why-inheritance-never-made-any-sense/

Google
Bohdan
21.03.2018
10:41:08
прочитал раз, осознал процентов 15 из текста нужно перечитать

Aleh
21.03.2018
10:42:26
> This is fine, as long as you don’t try to also model the problem domain using the inheritance tree, but much of the OO literature recommends that you do by talking about domain-driven design ?

Bohdan
21.03.2018
10:45:53


Mykola
21.03.2018
10:50:29
> One monkey. One keyboard. Infinite possibilities.

именно да

это я о его прекрасном слоге

Bohdan
21.03.2018
10:51:00
войну и мир написать, например

сложненько он пишет, да

Mykola
21.03.2018
10:51:06
мог бы и человеческим языком писать, но нет же!

Bohdan
21.03.2018
10:51:31
еще, конечно, играет роль то, что тема тоже непростая, но тем не менее

Mykola
21.03.2018
10:52:14
но, если чесно, он днище

он путает понятия

Страница 564 из 785