Я не знаю, что ещё могу сделать, чтобы помочь в продвижении контента, поэтому просто буду переживать за вас всей душой... Это очень важно и прекрасно. Спасибо за неимоверное количество пользы и показ всем нам, совсем зелёным, что такое правильная архитектура.
Созданный ValidationBehavior не будет работать при обновлении и удалении, т.к. он обрабатывает только те команды, которые реализуют интерфейс IRequest (работать будет только создание). Команды обновления и удаления реализуют IRequest. И ещё, вызывать валидацию лучше асинхронным методом ValidateAsync, т.к. в валидаторе может использоваться MustAsync и другие асинхронные методы
Да и вообще, у нас обработка запроса: контроллер (тут понятно) медиатор: класс CreateNoteCommand прилетает в CreateNoteCommandHandler - нормально, но уже вопросы насколько обязательно заполнение пропсов контекст: в CreateNoteCommandHandler создаем и сохраняем Note (залезли в контекст, начали действовать ограничения EntitytTypeConfigurations) передавая поля экземпляра CreateNoteCommand, в котором эти поля у вас обязательны, но они ведь могут быть необязательны. Тогда логично отметить необязательные пропсы в классе CreateNoteCommand (который по сути является DTO-шным) Это проблема. Кстати говоря, если говорить конкретно про обязательность полей, я не вижу смысла прописывать это в EntitytTypeConfigurations, ведь можно в самой модели Note сделать пропс nullable. Есть ли в этом какой то практический смысл или вы вынесли в EntitytTypeConfigurations просто для примера?
Вопрос. Мы используем валидаторы в слое application, можем ли мы пробросить валидации из слоя persistence? В этом есть смысл, ведь не нужно будет 1 дублировать валидации 2 волноваться о том, что мы какие то валидации забыли добавить в application ps речь об ограничениях сущностей базы entityttypeconfigurations
Спасибо за видео. Возник вопрос А можно ли как-нибудь через наследование сделать одинаковую валидацию для разных команд? Т.е. чтобы не было копипасты одного и того же кода, например .NotEmpty() и тд. А сделать это как-нибудь через base.MethodName() из класса родителя в классах наследниках?
такая ошибка выходит, народ помогите пожалуйста ''ValidationBehavior' does not implement interface member 'IPipelineBehavior.Handle(TRequest, RequestHandlerDelegate, CancellationToken)'
После добавления кода из этого видео происходит ошибка при запуске приложения: System.AggregateException: 'Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: FluentValidation.IValidator`1[Notes.Application.Notes.Queries.GetNoteList.GetNoteListQuery] Lifetime: Transient ImplementationType: Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator': A suitable constructor for type 'Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.) (Error while validating the service descriptor 'ServiceType: Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator Lifetime: Transient ImplementationType: Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator': A suitable constructor for type 'Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.)' и ещё одна: InvalidOperationException: A suitable constructor for type 'Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor. если удалить код из класса GetNoteListQueryValidator.cs то всё работает... Где собака зарыта, подскажите?
Спасибо за видео. При выполнении Get запроса localhost:44397/api/2.0/note при пустой базе выдает исключение Validation failed: -- UserId: 'User Id' не должно быть равно '00000000-0000-0000-0000-000000000000
Привет :) дело в том, что в BaseController UserId ставится как Guid.Empty для неавторизованных пользователей. Замените Guid.Empty на Guid.Parse("тут_некий_случайный_Guid_сгенерированный_где_то") и всё заработает.
Я не знаю, что ещё могу сделать, чтобы помочь в продвижении контента, поэтому просто буду переживать за вас всей душой...
Это очень важно и прекрасно. Спасибо за неимоверное количество пользы и показ всем нам, совсем зелёным, что такое правильная архитектура.
Спасибо вам большое за такой искренний, теплый и добрый комментарий! Это очень приятно и ценно для нас!
Один из самых полезных каналов по asp, который я находил
Благодарю
Идеальный плейлист.
Спасибо)))
NotEmpty() проверяет на null, на пустую строку, на white spaced, на не равенство default для типа и даже на пустую коллекцию. Спасибо за видео!
Созданный ValidationBehavior не будет работать при обновлении и удалении, т.к. он обрабатывает только те команды, которые реализуют интерфейс IRequest (работать будет только создание). Команды обновления и удаления реализуют IRequest. И ещё, вызывать валидацию лучше асинхронным методом ValidateAsync, т.к. в валидаторе может использоваться MustAsync и другие асинхронные методы
Спасибо.
Да и вообще, у нас обработка запроса:
контроллер (тут понятно)
медиатор:
класс CreateNoteCommand прилетает в CreateNoteCommandHandler - нормально, но уже вопросы насколько обязательно заполнение пропсов
контекст:
в CreateNoteCommandHandler создаем и сохраняем Note (залезли в контекст, начали действовать ограничения EntitytTypeConfigurations) передавая поля экземпляра CreateNoteCommand, в котором эти поля у вас обязательны, но они ведь могут быть необязательны. Тогда логично отметить необязательные пропсы в классе CreateNoteCommand (который по сути является DTO-шным)
Это проблема.
Кстати говоря, если говорить конкретно про обязательность полей, я не вижу смысла прописывать это в EntitytTypeConfigurations, ведь можно в самой модели Note сделать пропс nullable. Есть ли в этом какой то практический смысл или вы вынесли в EntitytTypeConfigurations просто для примера?
почему так мало просмотров!? это же кладезь
Спасибо
Вопрос. Мы используем валидаторы в слое application, можем ли мы пробросить валидации из слоя persistence? В этом есть смысл, ведь не нужно будет
1 дублировать валидации
2 волноваться о том, что мы какие то валидации забыли добавить в application
ps речь об ограничениях сущностей базы entityttypeconfigurations
Спасибо за видео. Возник вопрос А можно ли как-нибудь через наследование сделать одинаковую валидацию для разных команд? Т.е. чтобы не было копипасты одного и того же кода, например .NotEmpty() и тд. А сделать это как-нибудь через base.MethodName() из класса родителя в классах наследниках?
А можно ссылку на исходник в каждом в видео в описании добавить?
готово. под каждым видео были добавлены ссылки на код
такая ошибка выходит, народ помогите пожалуйста
''ValidationBehavior' does not implement interface member 'IPipelineBehavior.Handle(TRequest, RequestHandlerDelegate, CancellationToken)'
Сигнатуру метода проверь.
вы реализовали интерфейс IPipelineBehavior в классе ValidationBehavior ? судя по ошибке нет
Сигнатура метода Handle должна чуть отличаться от автора. (Все дело в порядке параметров)
@@Amir-xg4nn Спасибо, помог
Лучший канал по разработке на русском языке
Спасибо за такие слова!
if only it was in english hehe.
Hope one day it will be in English as well :)
После добавления кода из этого видео происходит ошибка при запуске приложения:
System.AggregateException: 'Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: FluentValidation.IValidator`1[Notes.Application.Notes.Queries.GetNoteList.GetNoteListQuery] Lifetime: Transient ImplementationType: Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator': A suitable constructor for type 'Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.) (Error while validating the service descriptor 'ServiceType: Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator Lifetime: Transient ImplementationType: Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator': A suitable constructor for type 'Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.)'
и ещё одна:
InvalidOperationException: A suitable constructor for type 'Notes.Application.Notes.Queries.GetNoteList.GetNoteListQueryValidator' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.
если удалить код из класса GetNoteListQueryValidator.cs то всё работает...
Где собака зарыта, подскажите?
Спасибо за видео. При выполнении Get запроса localhost:44397/api/2.0/note при пустой базе выдает исключение Validation failed: -- UserId: 'User Id' не должно быть равно '00000000-0000-0000-0000-000000000000
То же самое. Не удалось выяснить, в чём дело?
Привет :) дело в том, что в BaseController UserId ставится как Guid.Empty для неавторизованных пользователей. Замените Guid.Empty на Guid.Parse("тут_некий_случайный_Guid_сгенерированный_где_то") и всё заработает.
@@antonpudikov3990 верно, видео промежуточное планировалось что только атворизованные юзеры могут получать доступ к заметкам - логично