
Pavel
13.03.2018
10:04:38
В этом и кайф, ты не можешь "прост)))" проигнорить кейсы, ты их должен игнорить в явном виде
У тебя общий тип будет - Animal (или как назовешь)

Pavel
13.03.2018
10:05:40

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

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

Evgeniy
13.03.2018
10:12:58

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

Evgeniy
13.03.2018
10:19:34

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

Evgeniy
13.03.2018
10:25:56

Vladimir
13.03.2018
10:57:01

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 разных типов, это же будет беда)

Siarhei
13.03.2018
11:02:20

Vasily
13.03.2018
11:04:40

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) ?

Vladimir
13.03.2018
11:08:20

Vasily
13.03.2018
11:08:48

Vladimir
13.03.2018
11:08:50

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

Vasily
13.03.2018
11:09:24

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

Vladimir
13.03.2018
11:40:32

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

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

Siarhei
13.03.2018
12:13:32

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

Andrew
13.03.2018
12:14:34

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

Alex
13.03.2018
12:18:49

Vladimir
13.03.2018
12:19:29

Siarhei
13.03.2018
12:23:15

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 так, что не пробовал пока

Vladimir
13.03.2018
12:31:56

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

Roman
13.03.2018
14:05:27

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

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
Что за идеи? Я имею ввиду, какие технологии можно использовать?

Evgeniy
13.03.2018
17:41:48

??
13.03.2018
17:41:51

Fill
13.03.2018
17:42:42
в двух словах?

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

Evgeniy
13.03.2018
17:43:13

Артём
13.03.2018
17:43:42