Size: a a a

2020 June 09

SN

Shub Niggurath in F# Chat
(fun () -> ())
я так понял кипишь из-за DtoToDomain.user, и DU к тому что по-другому не собрать user-а
никакого кипиша. валидировать надо то, что приходит из неконтролируемых нами источников, например пользовательского ввода или фонтенда (жсникам вообще веры нет). БД к таким источникам не относится
источник

PD

Prunkles Dreemurr in F# Chat
Shub Niggurath
никакого кипиша. валидировать надо то, что приходит из неконтролируемых нами источников, например пользовательского ввода или фонтенда (жсникам вообще веры нет). БД к таким источникам не относится
Ага, вот как. Ну хорошо, звучит разумно. Запишем, учтём
источник

SN

Shub Niggurath in F# Chat
Prunkles Dreemurr
Ну хорошо. Если и убрать из приверов выше валидацию с парсингом, то код станет на ~1/3 меньше. Но тут существует ещё одна проблема. Функции из репозитория возвращают ридер от DbContext, а для логирования нужен ридер от AppEnv. Но AppEnv доступен только в app layer, а репозиторий находится в infrastructure layer, где AppEnv недоступен
это потому что ты пытаешься сделать функции чистыми в самом радикальном понимании этого понятия. это излишне строго
источник

PD

Prunkles Dreemurr in F# Chat
Shub Niggurath
это потому что ты пытаешься сделать функции чистыми в самом радикальном понимании этого понятия. это излишне строго
Да какая ж чистота. Логгеры грязнее некуда. Скорее правильнее сказать, что я пытаюсь удобным образом управлять зависимостями, избегая не столь надёжного IoC-а
источник

SN

Shub Niggurath in F# Chat
Prunkles Dreemurr
Ага, вот как. Ну хорошо, звучит разумно. Запишем, учтём
нет правил без исключений. если у вас используется shared DB - тогда ты не контролируешь БД, но тогда и проблему надо решать не валидацией. если решать такую проблему нормально не получается, то ни про какую "правильную" архитектуру речь тоже идти не может, тогда все средства хороши
источник

((

(fun () -> ()) in F# Chat
а скажем какая-нибудь ошибка на дубль как узнать? exn?
источник

SN

Shub Niggurath in F# Chat
(fun () -> ())
а скажем какая-нибудь ошибка на дубль как узнать? exn?
откуда у тебя возьмется дубль агрегата? у вас БД позволяет иметь два значения по одному ключу?
источник

SN

Shub Niggurath in F# Chat
Prunkles Dreemurr
Да какая ж чистота. Логгеры грязнее некуда. Скорее правильнее сказать, что я пытаюсь удобным образом управлять зависимостями, избегая не столь надёжного IoC-а
дело в том, что твой ридер так себе альтернатива IoC
источник

((

(fun () -> ()) in F# Chat
Shub Niggurath
откуда у тебя возьмется дубль агрегата? у вас БД позволяет иметь два значения по одному ключу?
а если без привязки к ddd? обычная база
источник

SN

Shub Niggurath in F# Chat
тебе необязательно использовать прям весь фреймворк, в небольших проектах ты можешь резолвить зависимости вручную, это пара строчек всего, особенно если все твои зависимости - клиент к БД, клиент к кафке
источник

YN

Yurii Nskyi in F# Chat
(fun () -> ())
а если без привязки к ddd? обычная база
это здравый смысл, а не ддд) иначе толку от первичных ключей в базе данных нет вообще
источник

SN

Shub Niggurath in F# Chat
(fun () -> ())
а если без привязки к ddd? обычная база
агрегат - это древовидная структура с ключом. если ты правильно организовал свой репозиторий, то в персистенсе любой агрегат хранится по ключу, тебе сама БД даст понять, что сущность уже существует. а репозиторий это представит на уровень выше определенным резалтом
источник

SN

Shub Niggurath in F# Chat
если это просто value object - то тогда вообще пофиг, у них чисто концептуально не существует дубликатов
источник

VS

Vladimir Shchur in F# Chat
Еще про асинксеки
 let x = e.MoveNext()
   let y = e.MoveNext()
   let z = e.MoveNext()
   [x;y;z]
   |> Async.Parallel
   |> Async.RunSynchronously
   |> Array.iter (fun result -> Console.WriteLine(result))

этот код одновременно выведет три одинаковых значения :(
источник

((

(fun () -> ()) in F# Chat
Shub Niggurath
агрегат - это древовидная структура с ключом. если ты правильно организовал свой репозиторий, то в персистенсе любой агрегат хранится по ключу, тебе сама БД даст понять, что сущность уже существует. а репозиторий это представит на уровень выше определенным резалтом
то есть репозиторий это TIn -> TOut и иногда TIn -> Result<TOut, TError>?
источник

((

(fun () -> ()) in F# Chat
без асинков?
источник

SN

Shub Niggurath in F# Chat
(fun () -> ())
то есть репозиторий это TIn -> TOut и иногда TIn -> Result<TOut, TError>?
ну я предпочитаю всегда 'a -> AsyncResult<'b, 'err>, потому что самый низкий уровень имеет сотни исключений, бОльшую часть из которых ты и не ожидаешь вовсе
источник

SN

Shub Niggurath in F# Chat
нормального способа отвязать async я не нашел
источник

SN

Shub Niggurath in F# Chat
ну в смысле, чтобы не превращать все приложение в синхронноее
источник
2020 June 10

阿曼 in F# Chat
Люди, а что насчёт работы по F#? Есть рынок? Или кто на работе пишет в основном на F#
Не СНГ!
источник