@Fsharp_chat

Страница 511 из 772
Pavel
13.03.2018
10:04:38
В этом и кайф, ты не можешь "прост)))" проигнорить кейсы, ты их должен игнорить в явном виде

У тебя общий тип будет - Animal (или как назовешь)

Pavel
13.03.2018
10:05:51
Если кличек кошек хочешь из последовательности: animals |> Seq.choose (function Cat name -> Some Name | _ -> None)

Google
Pavel
13.03.2018
10:07:25
Evgeniy
13.03.2018
10:11:16
?‍?
13.03.2018
10:12:01
match duValue with | Cat name -> prinfn "Cat with name %s" name | Dog size -> printfn "Dog of size %n" size
Нет, нет. У меня есть слот, в него кладётся структура, которая будет попадать в ветку DU "слот", нужно match типа структуры сделать, для определения каким конструктором DU воспользоваться. Как раз выражения typeof я не видел (их примеры) для F#, как это сделать?

Pavel
13.03.2018
10:12:56
ну есть хелперы, которые позволяют имя получить

?‍?
13.03.2018
10:18:33
Через match и :?
| :? (<help>что тут?</help>) as banana -> Some Slot.Fruit banana

?‍?
13.03.2018
10:25:44
Имя типа.
| :? (Banana) as banana -> Some Slot.Fruit banana Спасибо за наводку. Сравнение типов на F# быстрое? Каким образом происходит сравнение?

Vladimir
13.03.2018
10:57:01
Проблема наследования в том, что DU описывает набор всех возможных кейсов, а наследование - позволяет расширять.
Интересную тему подняли полиморфизм vs матчинг) Думаю есть кейсы, когда одно явно лучше, а есть и когда второе

Pavel
13.03.2018
10:57:20
Да, несомненно

Но полиморфизм - это про поведение, а не про данные

Vladimir
13.03.2018
10:58:40
ну и матчинг когда от типа зависит разное поведение - это тоже про него

Google
Pavel
13.03.2018
10:59:44
Это сложный вопрос, где должно быть поведение, рядом с данными, или снаружи.

Мне понятнее, когда оно снаружи

Чистые функции, вот это все.

Vladimir
13.03.2018
11:01:44
я вот сейчас делаю CQRS с обработкой сообщений, там как раз та же проблема - приходят сообщения из кафки и надо по типу понять что делать. Пока матчинг справляется, но когда добавится 100500 разных типов, это же будет беда)

Vladimir
13.03.2018
11:05:07
сделал интерфейс IMessage там поле строковое ActionType, по нему делаю матчинг

Vasily
13.03.2018
11:05:54
Не, так тоже не надо

Лучше на атрибутах, если предполагается множество обработчиков

Vladimir
13.03.2018
11:07:57
А не, вру, матчинг сделал по названию топика, на каждый топик свой тип, но в типе поле ActionType и по нему еще один матчинг)

Pavel
13.03.2018
11:08:00
((dynamic)handler).Handle((dynamic)cmd) ?

Vasily
13.03.2018
11:08:48
что именно на атрибутах?
По факту матчинг

Vladimir
13.03.2018
11:08:50
((dynamic)handler).Handle((dynamic)cmd) ?
да, да) вот такого страха и хотелось избежать))

Pavel
13.03.2018
11:09:04
А меня сейчас форсят именно так писать ж(

Vladimir
13.03.2018
11:09:26
так это же Microsoft best practice по написаню микросервисов)

Pavel
13.03.2018
11:09:38
Vladimir
13.03.2018
11:09:39
видели их супер проект с cqrs?

Pavel
13.03.2018
11:09:47
Видели, плакали. Еще тогда, когда CQRS было модно, в 2009м что ли смотрел, или 2010м

Google
Siarhei
13.03.2018
11:11:20
да, да) вот такого страха и хотелось избежать))
я вообще не так выезжал в этой ситуации

Vasily
13.03.2018
11:11:58
Короче, главная проблема там, имхо - заматчить тип сообщения на процессор

Pavel
13.03.2018
11:12:21
пиши дайнамик, рантайм разберется!

?‍?
13.03.2018
11:13:08
Pavel
13.03.2018
11:13:18
не ссы, главное!

Ляжет - перезапустим, у нас кубернетес же

(ц) мой куратор

Ладно, пора обедать.

Pavel
13.03.2018
11:28:15
Siarhei
13.03.2018
11:45:36
а как?
https://github.com/Happi-cat/Untech.Practices/blob/develop/Src/Untech.Practices.CQRS/Dispatching/Dispatcher.cs

у меня короче есть ICommand & ICommandHandler<ICommand> и есть CommandHandlerInvoker<TCommand, TCommandHandler> ну а дальше MakeGenericType - cache invoker ну и поиск хэндлера через IoC

если в диспетчере сделать методы женериками, то GetType махнулся бы на typeof НО тут вопрос использования, typeof может факапить если где-то кто-то сможет создать инст ICommand и присвоить не в ConcreteCommand a в BaseCommand и в женерик попадёт не тот T

Vladimir
13.03.2018
11:52:24
спасибо) это правда очень похоже на решение с dynamic =) а где код по десериализации сообщений перед диспатчем?

Siarhei
13.03.2018
11:56:35
спасибо) это правда очень похоже на решение с dynamic =) а где код по десериализации сообщений перед диспатчем?
ну динамик в моём случае не решил бы вопрос где найти хэндлер (сборка/тип) и пришлось бы MakeGeneric юзать в любом случае, просто что добавивь HandlerInvoker экономлю на кол-ве вызовов makeGeneric а десериализация уже зависит от того где юзать ? в pet-project-е у меня месседж формируется в api исходя из query/body параметров (т.е. route -> concrete command)

Vladimir
13.03.2018
11:58:34
у меня просто задача стоит - как десереализовать месседж в concrete command)

Siarhei
13.03.2018
11:59:20
ну если они прилетают все на один эндпоинт то либо через Type либо через attribute какой

Vladimir
13.03.2018
12:00:42
так а куда аттрибут вешать? надо писать кастомный десериализатор который по одному из филдов месседжа подбирает тип с каким-то навешенным атрибутом?

Siarhei
13.03.2018
12:02:01
если аттрибут то да, кастомный десериализатор который будет искать все ICommand с этим аттрибутом и искать тот единсвенный в котором нужное имя/текст/содержимое

Vladimir
13.03.2018
12:09:25
Ну вот если мало команд, то тут матчинг гораздо лучше, никаких интерфейсов, рефлексий и неопределенности) Но до каких пор он лучше это вопрос конечно открытый

Google
Siarhei
13.03.2018
12:11:06
ну когда мало комманд - да, а что если мы потом захотим объединить модули с разными конекстами в которых независимые комманды в один прожект (т.е. под крышу одного API проекта)

Vladimir
13.03.2018
12:12:22
делаем один матчинг сверху который определяет модуль)

в этом кстати преимущество матчинга - можно делать дерево матчингов, а не пытаться определить сразу же

Alex
13.03.2018
12:12:56
Ого. Потрясно!
Правда?) Я вот наткнулся потом на Rezoom.SQL подумал, что наверное не актуально уже будет https://github.com/rspeele/Rezoom.SQL

только вот это смущает: (query |> QueryAsync <| connection)
Issues всегда открыты для предложений и не только :3

Siarhei
13.03.2018
12:13:32
делаем один матчинг сверху который определяет модуль)
а как примерно родительский матчинг будет выглядеть?

Vladimir
13.03.2018
12:14:14
одни команды пусть начинаются с Team1. другие с Team2. (типа такого)

Andrew
13.03.2018
12:14:34
Issues всегда открыты для предложений и не только :3
Увы, я очень плохо знаю F#, поэтому даже с трудом понимаю, что именно делает данная строка

Alex
13.03.2018
12:15:31
Все равно что QueryAsync query connection Я тоже довольно плохо его знаю, как видно наверное :D

Andrew
13.03.2018
12:17:37
наверное был бы смысл сделать сигнатуру QueryAsync connection query, чтобы частично применить соединение и дальше уже закидывать только запросы

Siarhei
13.03.2018
12:18:25
одни команды пусть начинаются с Team1. другие с Team2. (типа такого)
ну да, есть смысл, но в этом случает под один DU комманды не объединишь, ведь так?

Vladimir
13.03.2018
12:19:29
ну да, есть смысл, но в этом случает под один DU комманды не объединишь, ведь так?
Ну они изначально разделены же. Поэтому наверное смысла под один объединять особо и нет

Alex
13.03.2018
12:25:55
Что именно ?)

Siarhei
13.03.2018
12:26:24
ну подсветка ошибок в sql + выведение типов

Alex
13.03.2018
12:29:51
по мне так классно, не надо писать все эти модели, как в случае с dapper'ом и нет такой генерации как с EntityFramework'ом. К сожалению не завелось под .net core так, что не пробовал пока

Pavel
13.03.2018
12:40:20
А есть что-то найтивное для Cosmos DB кроме sagan?

Google
Evgeniy
13.03.2018
15:44:19
https://twitter.com/sforkmann/status/973579236928901121

Most
13.03.2018
15:54:27
джва года ждал эту фичу)

Roman
13.03.2018
16:02:06
А почему нужны доп действия для этого?

в целом-то ок, все же

Evgeniy
13.03.2018
16:18:39
Igor
13.03.2018
17:34:41
https://twitter.com/sforkmann/status/973579236928901121
А если там циклические ссылки?

Evgeniy
13.03.2018
17:36:09
А если там циклические ссылки?
Должен ошибку кинуть. Я еще не проверял.

Fill
13.03.2018
17:39:34
Кто-нибудь применял F# в гейм деве?

в любом, мне тут просто пришёл в голову интересный сценнарий, думаю вот совместить приятное с приятным

Evgeniy
13.03.2018
17:41:02
У нас с @fvnever есть пара идей, но мы нифига не пишем.

Fill
13.03.2018
17:41:34
Что за идеи? Я имею ввиду, какие технологии можно использовать?

?‍?
13.03.2018
17:41:51
Fill
13.03.2018
17:42:42
MonoGame
Что на ней можно сделать?

в двух словах?

?‍?
13.03.2018
17:42:58
MonoGame
Забудьте, это старьё. Назовите причину, почему упал на них взор, мб есть альтернатива

Страница 511 из 772