Size: a a a

2020 June 09

PD

Prunkles Dreemurr in F# Chat
Shub Niggurath
домен может пользоваться функциями домена. потому что домен - это твоя бизнес логика, а бизнесу глубоко все равно, где хранится твой юзер, хранится ли он вообще, исполняется ли это кодом или кто-то валидирует логику на листочке
Отлично. Я полностью согласен с данным утверждением. И что же я сделал? Я использовал доменное правило в какой-то части программы, в каком-то другом слое, чтобы придать коду чуть больше соответствия с бизнес правилами, чем было до этого. В чём проблема?
источник

VK

Vladislav Khapin in F# Chat
Prunkles Dreemurr
Или только домен может пользоваться функциями домена? Спрашивается, а смысл тогда?
В том что нет деталей реализации
источник

SN

Shub Niggurath in F# Chat
Prunkles Dreemurr
Отлично. Я полностью согласен с данным утверждением. И что же я сделал? Я использовал доменное правило в какой-то части программы, в каком-то другом слое, чтобы придать коду чуть больше соответствия с бизнес правилами, чем было до этого. В чём проблема?
проблема здесь не конкретно в том, что ты использовал доменные функции за пределами доменного слоя. проблема в двух лишних слоях абстракции
источник

SN

Shub Niggurath in F# Chat
репозиторий пишется именно для того, чтобы абстрагировать детали хранения, а так же чтобы дать тебе гарантии, что из таблички "Юзер" будет приходить только Юзер
источник

SN

Shub Niggurath in F# Chat
а не "Склад"
источник

SN

Shub Niggurath in F# Chat
и этот юзер будет всегда валиден
источник

PD

Prunkles Dreemurr in F# Chat
Shub Niggurath
проблема здесь не конкретно в том, что ты использовал доменные функции за пределами доменного слоя. проблема в двух лишних слоях абстракции
Да, именно поэтому я пришёл, чтобы раскритиковали такой подход. Можно ли сравнить с вариантом, который я прислал позже, где "всё в одном?
источник

SN

Shub Niggurath in F# Chat
Prunkles Dreemurr
Да, именно поэтому я пришёл, чтобы раскритиковали такой подход. Можно ли сравнить с вариантом, который я прислал позже, где "всё в одном?
а это один и тот же код. то, что ты его поделил на разные функции, сути особенно не меняет
источник

SN

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

SN

Shub Niggurath in F# Chat
но реально вам это надо?
источник

SN

Shub Niggurath in F# Chat
в смысле, были проблемы в проде от того, что считанные из БД данные оказались невалидными?
источник

PD

Prunkles Dreemurr in F# Chat
Shub Niggurath
ну я конечно могу придумать ситуации, когда тебе таки надо валидировать на записи и на чтении
А что если будет невалидно? Является ли это исключетельной для исключений ситуацией?
источник

SN

Shub Niggurath in F# Chat
Prunkles Dreemurr
А что если будет невалидно? Является ли это исключетельной для исключений ситуацией?
а что если контроль четности в ECC не сработает? надо бы и на этот случай защиту предусмотреть, не?
источник

((

(fun () -> ()) in F# Chat
домен может быть собран из single case DU, и тогда надо будет дергать
источник

SN

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

PD

Prunkles Dreemurr in F# Chat
(fun () -> ())
домен может быть собран из single case DU, и тогда надо будет дергать
Так и есть
источник

SN

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

SN

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

((

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

PD

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