
アレクセイ
19.08.2018
16:47:49
Units of measure - Edit: not currently on the horizon
Плакать хочется

Roman
19.08.2018
18:51:55
https://twitter.com/dnesteruk/status/1031041388861775872?s=09

Google

Roman
19.08.2018
18:54:18

アレクセイ
19.08.2018
18:54:49
У меня финансы, доллары марочки

Doge
19.08.2018
18:55:18

アレクセイ
19.08.2018
18:55:20
Но на самом деле я гораздо силнее хотел бы algebraic types в c#

Roman
19.08.2018
18:55:22

アレクセイ
19.08.2018
18:57:14
В частности могло бы быть, но например для нормального ddd чтобы не интежеры вокруг летали а orderId, fundId либо не просто стринг а cusip
с заменой инту я вывернулся через enum например
А со стрингами пока не знаю как быть
Всё слишком громоздко выходит
Я поэтому не понимаю этот холивар по поводу что лучше c# или f#, мне как программисту на с# совершенно очевидно что с# серьёзно отстает и спорить тут не о чем..

Bonart
19.08.2018
19:11:53

Aleksander
19.08.2018
19:12:48

Google

Bonart
19.08.2018
19:12:50

アレクセイ
19.08.2018
19:13:53
Нет.

Bonart
19.08.2018
19:14:56
Вот DU - да, опа
Option - тот приходится делать как Option<Class, RefOption>. Уже хреновато, но иначе будет оверхед

アレクセイ
19.08.2018
19:17:15

Bonart
19.08.2018
19:18:23
Без оверхеда по памяти вообще

アレクセイ
19.08.2018
19:19:05
Это не с# )

Bonart
19.08.2018
19:20:03

アレクセイ
19.08.2018
19:20:50
Что это? Класс, структура? Заголовок какой-то?
В f# я бы написал “type CustomerId = CustomerId of int”
И всё.

Bonart
19.08.2018
19:29:30

アレクセイ
19.08.2018
19:30:14
Конечно можно на всё классов насоздавать

Bonart
19.08.2018
19:30:50

Google

アレクセイ
19.08.2018
19:32:47
Я наверное чего-то не понимаю
Где слово struct
Где поле
Где мног фигурных скобочек
Где перегруженные операторы сравнения
Где касты к инту
Где касты из инта
Или мне всегда через точку доступаться?

Doge
19.08.2018
19:34:18

アレクセイ
19.08.2018
19:35:28
Во что? И зачем. Можно в int наверное обобщить ?я не спец в ф#. Так, учусь

Bonart
19.08.2018
19:54:58
Я наверное чего-то не понимаю
Тебе полное определение типа прямо в телегу надо? Зачем? Просил простой способ описать Id для сущности - такой способ для C# есть. Да, структуры описываются многословно, но для обощенной структуры это делается один раз. Во всех прочих местах будет Id<Order, int> и все.

アレクセイ
19.08.2018
20:30:09
Ну вот так вот и «легко». Полное определение на f# я в телегу кинул и ничего.

Roman
19.08.2018
20:32:51

Doge
19.08.2018
20:33:34

Roman
19.08.2018
20:37:19

Friedrich
20.08.2018
04:11:38

アレクセイ
20.08.2018
04:15:12
Как?
enum FundId {};
enum CustomerId {};
Это намного изящнее чем городить классы или структы, зато имеем проверки компилятором и без проблем поднимаем инты из базы обычным кастом. (И обратно укладываем)
Для всеразличных спешл кейсов можно делать так
enum CustomerId
{
BillGates = 1564,
VladimirP = 26863
}
…
If(customer==CustomerId.BillGates)
{…}
Со стрингами пока ничего такого не придумал

Ayrat
20.08.2018
04:23:07

Google

Friedrich
20.08.2018
04:23:55
Я видел такое, и мне чёт не очень нравится.
1) Конструктор бы туда кастомный добавить, а то конструирование через каст выглядит стрёмно
2) Увы, не поддерживаются по-настоящему интересные типы идентификаторов навроде Guid

アレクセイ
20.08.2018
04:26:04
Имхо срам.
О чем и речь. Но это лучше чем непонятные инты по всей логике летающие
F# мне нужен

Friedrich
20.08.2018
04:26:36
(в моём ближайшем интерпрейзе все айдишники в базе всегда делают из гуидов, int / long — скорее исключение)

Roman
20.08.2018
04:29:12
В финансах большая часть айди хранится уже десятки лет. Тогда гуидов не было.

アレクセイ
20.08.2018
04:29:44
Именно так. Причём даже там где есть натуральный ключ.

Friedrich
20.08.2018
04:31:26
class MyDuck : Id<MyDuck, long> или типа того.

アレクセイ
20.08.2018
04:32:52

Friedrich
20.08.2018
04:33:26

Roman
20.08.2018
04:33:42

Friedrich
20.08.2018
04:33:56
Множественное наследование что ли? Или что?
У сущности обычно один уникальный (в пределах подобных сущностей) идентификатор :(

Roman
20.08.2018
04:34:34
Типа форейн ключи

Friedrich
20.08.2018
04:34:44
Ну то есть поля?
А они тут при чём?

Google

Roman
20.08.2018
04:35:25
Я так понял под коллекцией имелись ввиду поля
Не праймари ключ

Friedrich
20.08.2018
04:35:43
class MuTrade {
SomeEntityId Id1 {get;set}
OtherEntityId Id2 {get;set}
}
Нифига не громоздко, и красиво, и правильно выглядит. Тут всё ок с полями.
Пример про DeleteByIds я понял и согласен, что там определение будет самую малость громоздким, хотя на мой взгляд нормально
А, хм, если смотреть пример с Id<TEntity, TId>, то я не знаю, как правильно объявлять поля-ключи от других сущностей :(
Кажется, никак? Просто тупо int OtherEntityId?

Roman
20.08.2018
04:37:28
С фшарпом проблем нет. Он действительно хорошо решает
На цшарпе проще стринги и инты

Friedrich
20.08.2018
04:38:05

Roman
20.08.2018
04:38:10
Но error prone

Roman
20.08.2018
04:46:59
Привет!
И тебе привет, бот

Doge
20.08.2018
06:00:03