169 похожих чатов

Всем привет. Появился вопрос относительно Value Object и валидации валидации в

нем.
Я хочу попробовать хранить валидацию о типе в самом VO. За рамками Hello World проекта, мы
натыкаемся на проблемы со сложностью валидации (иногда она совсем не в 2 строки) и вопросом о том,
как эту самую валидацию показать пользователю.

По теме информации с примерами маловато, а те, что есть очень простые, например валидация Email в 1 строку.
Для справки, вот так зенд валидирет email https://github.com/zendframework/zend-validator/blob/master/src/EmailAddress.php.

Собственно я в поиске подсказок, советов и удобного решения, пока пришел примерно к такому:

Api самого VO (скорее всего подмешиваем трейтом)


$emailValidation = Email::validation('my-data');

$emailValidation->isValid();
$emailValidation->getErrorCode();
$emailValidation->getErrorMessage();


Пример использования


$emailValidation = Email::validation($data['email']);

if ($emailValidation->isValid() === true) {
$email = new Email($data['email']);
} else {
$errors[] = $emailValidation->getErrorMessage();
}


Пример использования 2


try {

$email = new Email($data['email']);

} catch (\ValidationException $e) {

$errors[] = $e->getErrorMessage();

}


Возможно кто-то подскажет более интересные способы?

1 ответов

5 просмотров

не так. суть валидации VO в том что он не должен позволять тебе создать невалидный vo. А за валидацию данных пусть валидатор отвечает

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Есть предложения, как подобное можно упростить?
Hemul GM
12
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Карта сайта