@oop_ru

Страница 634 из 785
Roman
04.05.2018
22:12:28
И интероп с жсом только через примитивы => а это строки и eval

Sergey
04.05.2018
22:12:43
И интероп с жсом только через примитивы => а это строки и eval
в прочем ничем не отличается от getType в рантайме)

Roman
04.05.2018
22:13:32
Ну типа инфраструктурная штуковина для инфраструктурных штуковин. Нормальный такой, полноценный рефлекшон.

Google
Sergey
04.05.2018
22:16:59
я вообще не понимаю о чем ты, причем тут примитивы, интерроп и т.д. сто пудово уже сделали что-то типа тех же тайпингов для тайпскрипта

что бы невилировать недостаток информации о типах

ну и да - мне c# как язык хоть и нравится, но все же мне кажется что мы ниочем говорим просто. Потому удачи, и я все

Roman
05.05.2018
06:38:45
Зачем типы в рантайме?
Для инфраструктурных штук. Например, берёшь класс, достаёшь информацию о типе, оттуда достаёшь информацию о реализуемых интерфейсах и регистрируешь в IoC контейнере данный класс как реализацию всех этих интерфейсов. Или мой случай. Я обработчики команд и запросов помечаю всякими разными интересными атрибутами, например [RunInTransaction], и если у обработчика стоит данный атрибут - я автоматом прикручиваю ему декоратор, который заверенёт его вызов в транзакцию. Банально меньше кода ведь писать))

Quantum Harmonizer
05.05.2018
07:41:18
Товарищи, есть ли нормальный способ пропатчить (как HTTP PATCH) DTO в статическом языке? Как это правильно написать?

Charles
05.05.2018
07:41:21
вот я читаю вас и думаю как обойтись без instanceof но судя по всему никак

Quantum Harmonizer
05.05.2018
07:42:08
надо бы удалить instanceof из языка ;)

Charles
05.05.2018
07:42:22
ок, если удалим - как тогда

можно даже подобие утиной типизации делать и по содержимому понимать что за сущность пришла, но это хрень

и вообще патчить DTO хз, я думал они неизменяемые. типа если тебе нужно что-то изменить то делай новый DTO

Google
Quantum Harmonizer
05.05.2018
07:43:27
ок, если удалим - как тогда
я не читал тред) ща поищу начало

Charles
05.05.2018
07:43:35
или декорируй его, кстати

Quantum Harmonizer
05.05.2018
07:43:50
или декорируй его, кстати
чорт, это офигенно

Charles
05.05.2018
07:44:18
ну вот варик)

Quantum Harmonizer
05.05.2018
07:44:28
единственное что, если декорировать декорированный, то количество данных в памяти будет расти

допустим, по сети постоянно приходят патчи

Charles
05.05.2018
07:45:43
ну типа у тебя рест и прям пач приходит прям хттпшный

Quantum Harmonizer
05.05.2018
07:46:33
допустим, каждую секунду приходит патч для одного и того же объекта

неиспользуемые поля утекут

Charles
05.05.2018
07:48:20
ну блин, держи его в редиске и делай периодически персист чтоб память не трогать из прилаги, как вариант. стильно модно современно. или объект потом активно юзается всем кем ни попадя? у него логика вообще есть?

Quantum Harmonizer
05.05.2018
07:48:46
короче, приблизительное решение: interface Item { // properties } class InMemoryItem { constructor(property values) constructor(copyFrom: Item) } class PatchedItem(private val patch: Json, private val fallback: Item)

Dmitry
05.05.2018
07:48:58
или декорируй его, кстати
прошу прощения что влез, объясните глупому что здесь подразумевается?

Charles
05.05.2018
07:49:38
прошу прощения что влез, объясните глупому что здесь подразумевается?
вот прям в вики кину ссыль, не серчай - https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

короче вместо наследования используешь композицию

и ассоциациями включаешь в объект то чего ему не хватает в каком-то кейсе

по ссылке, по значению.... это уж как язык позволяет и как там принято

Dmitry
05.05.2018
07:50:27
понял благодарю

Google
Dmitry
05.05.2018
07:51:24
короче, приблизительное решение: interface Item { // properties } class InMemoryItem { constructor(property values) constructor(copyFrom: Item) } class PatchedItem(private val patch: Json, private val fallback: Item)
ну впринципе это первое что приходит в голову, блин тут тестами все покрывать придется, много логики получается, или не прав?

Quantum Harmonizer
05.05.2018
07:52:08
а у вас там что, конструктор можно перегрузить?о_О
Пример на Kotlin, можно кучу конструкторов, как и в Java.

Quantum Harmonizer
05.05.2018
07:52:22
зависть
А где нет?

Charles
05.05.2018
07:52:30
JS))

там другие техники

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

Quantum Harmonizer
05.05.2018
07:53:35
я перерос reflection и делаю всё, чтобы этого не допустить)

Charles
05.05.2018
07:53:46
я прост в свое время что-то делал на рефлексиях в пыхе и оно превратилось в метафизическое непонятное нечто

Quantum Harmonizer
05.05.2018
07:54:09
рефлекшн использую только как костыль чтобы исправить косяки библиотек, код которых мне недоступен

Charles
05.05.2018
07:54:12
код шредингера епт)

Dmitry
05.05.2018
07:54:14
ребят спасибо большое за помощь всем хорошего дня

Quantum Harmonizer
05.05.2018
07:54:49
скажи еще раз, у тебя какая цель?
получать пропатченный объект

Google
Charles
05.05.2018
07:56:32
А зачем пыхе рефлексия? Он же динамический, $obj->$anyField
ччтоб изваращаться и получать код гибкий как сопли

Quantum Harmonizer
05.05.2018
07:57:20
я прост в свое время что-то делал на рефлексиях в пыхе и оно превратилось в метафизическое непонятное нечто
тащемта в динамических языках объекты мало чем отличаются от хэш-таблиц, с которыми можно делать вообще всё что угодно $original = new SomeObj(); $patch = clone $original; $patch->$patchedField = $patchValue;

Charles
05.05.2018
07:57:35
тебе объекты твои в рантайме нужны полностью? или то что прихожит с патчем не сильно надо

Charles
05.05.2018
07:58:40
ну вот есть у тебя допустим 10 полей у объекта. приходит патч на еще 3 каких-то поля не вхожих в эти 10, расширяющих его. потом в логике эти 3 поля участвуют?

или можно их куда-нить в кэш скинуть и доставать lazy при необходимости?

считай что у тебя основной объект в рантайме это таблица фактов и патчишь ты как будто таблицу измерений

или так не пойдет?

Charles
05.05.2018
07:59:32
ааа

Quantum Harmonizer
05.05.2018
07:59:49
сруктура объекта строго статическая, конечно же

Charles
05.05.2018
08:00:29
да блин хз, делай там декоратор

не знаю как правильно еще)

Quantum Harmonizer
05.05.2018
08:00:52
+ copy constructor, я понял. спасибо :)

Dmitry
05.05.2018
08:01:25
Charles
05.05.2018
08:01:40
ты еще поспрашивай, мож я херню сказал, рили

в любом случае я бы не сильно используемые поля хранил бы не в памяти и грузил их по факту необходимсоти lazy load, это вот точно

Quantum Harmonizer
05.05.2018
08:03:20
гениально
Если это сарказм, то я не понял)

Google
Charles
05.05.2018
08:03:37
?

Dmitry
05.05.2018
08:03:54
не не, все реально правильно

оно многие проблемы решит

только писать дофига :-(

Charles
05.05.2018
08:04:13
кодогенерация.
слишком тяжело, тут таких задач нет. там по сути вопрос как понять какая сущность приходит не через instnaceof всего лишь

Quantum Harmonizer
05.05.2018
08:04:32
ситуации с instanceof в ФП решаются discriminated union / sealed class-ами, в ООП — паттерном visitor, но контекста я не знаю, может и не помочь

Sergey
05.05.2018
08:07:04
слишком тяжело, тут таких задач нет. там по сути вопрос как понять какая сущность приходит не через instnaceof всего лишь
ну я и говорю - весь вопрос какая информация о типах тебе доступна при сборке проекта что бы устранить необходимость спрашивать потом в рантайме.

Charles
05.05.2018
08:07:36
схема такая. есть несколько сущностей таких как пользователь, заказ, рейс с его статусами (изменился гейт например или самолет на посадку зашел) и т.п. как только происходят изменения (пользователь создан и в его сущности появился код конфирмации и он confirmed: false, читай это состояние) - мы либо прям напрямую инжектим сервис нотификаций в эти сервисы, либо отправляем все на IPC и хавают изменения все интересующиеся, в том числе сервис нотификаций. и вот ему (сервису нотификаций) приходит - создай нотификацию с аргументами - data: any, template: стринга

надо понять какая сущность пришла в data: any и желательно без instnaceof чтоб не подвязываться именно на ООП (есть тема потом переписать нафиг на FRP без ООП)

сборка там чисто номинально потому что надо транспилить TS в JS, по сути - всё

Charles
05.05.2018
08:09:45
ну я собственно поэтому и спросил как правильно, сам думаю что можно как угодно)))

энамы есть

если захочу через нативный жс могу поиграться с Symbol

Quantum Harmonizer
05.05.2018
08:10:12
есть надёжный свитч/матчинг по ним?

Charles
05.05.2018
08:10:22
в смысле надежный???

чтоб в рантайме не выкинул чего?

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