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

Sergey
04.05.2018
22:12:43

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

Google

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

Roman
04.05.2018
22:18:45

andretshurotshka?❄️кде
05.05.2018
04:45:06
Зачем типы в рантайме?

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

Quantum Harmonizer
05.05.2018
07:49:21

Charles
05.05.2018
07:49:38
короче вместо наследования используешь композицию
и ассоциациями включаешь в объект то чего ему не хватает в каком-то кейсе
по ссылке, по значению.... это уж как язык позволяет и как там принято

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

Google

Charles
05.05.2018
07:50:51
нзчт

Dmitry
05.05.2018
07:51:24

Charles
05.05.2018
07:51:40
а у вас там что, конструктор можно перегрузить?о_О

Quantum Harmonizer
05.05.2018
07:52:08

Charles
05.05.2018
07:52:16

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
ребят спасибо большое за помощь всем хорошего дня

Charles
05.05.2018
07:54:44

Quantum Harmonizer
05.05.2018
07:54:49

Google

Charles
05.05.2018
07:56:32

Quantum Harmonizer
05.05.2018
07:57:20

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

Aleh
05.05.2018
07:57:46

Quantum Harmonizer
05.05.2018
07:58:02

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

Quantum Harmonizer
05.05.2018
07:59:25

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, это вот точно

Sergey
05.05.2018
08:02:51

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


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


Quantum Harmonizer
05.05.2018
08:09:25

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

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

Charles
05.05.2018
08:10:22
в смысле надежный???
чтоб в рантайме не выкинул чего?