Форум
.NET
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, gandjustas, Вы писали: G>Здравствуйте, vaa, Вы писали: vaa>>Вообще о валидацию много копий сломано, vaa>>но общая идея: парсить, а не валидировать vaa>>или еще как принцип [url=https://fsharpforfunandprofit.com/posts/designing-with-types-making-illegal-states-unrepresentable/]"Making illegal states unrepresentable"[/url] vaa>>т.е. для arg1 и arg2 если они логически связаны создать valueobject и в конструкторе проверить валидность, а дальше уже передать нормальный объект vaa>>или в нем сделать статик метод подобный тому что выше и сделать конструктор приватным, чтобы не выкидывать исключений из конструктора. G>Я тут задумался о реальном примере G>Предположим веб-сервис перевода между счетами в банке G>Принимаем на вход G>[cs] G>record Transaction(string From, string To, decimal Amount) G>[/cs] G>1) Хотим чтобы номера счетов соответствовали формату, а сумма была положительная, это легко делается атрибутами: G>[cs] G>record Transaction([RegularExpression(...)]string From, [RegularExpression(...)]string To, [RangeAttribute(...)]decimal Amount) G>[/cs] G>2) Хотим чтобы номера счетов были разными G>[cs] G>record Transaction([RegularExpression(...)]string From, [RegularExpression(...)]string To, [RangeAttribute(...)]decimal Amount): IValidatableObject G>{ G> public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) G> { G> if (From == To) G> { G> yield return new ValidationResult("From and To are same", new[] { nameof(From), nameof(To) }); G> } G> } G>} G>[/cs] G>3) Хотим чтобы счета при конструировании были существующими. G>Это атрибутами уже не сделаешь, да IValidatableObject в данном случае так себе решении, так как надо в базу сходить. G>Более того проверка счетов уже часть БЛ, и полученные атрибуты счета будут использоваться в дальнейшем для логики перевода. G>То есть примерно тот случай, про который пишет топикстартер. G>Стоит ли в данном случае изнутри БЛ кидать ArgumentException? Нужно ли в таком случае выдавать 400 клиенту? Или это уже 500 ошибка?
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …