Хорошей практикой является то, что системная запись должна иметь проверку, чтобы убедиться, что согласованность поддерживается. Итак, в вашем сценарии вход вашей системы - это серверная часть веб-приложения. Таким образом, вы должны иметь подтверждение на этой стороне. Позвольте мне привести вам пример, скажем, я создаю инструменты автоматизации, которые отправляют данные в ваше веб-приложение, и тогда пользовательский интерфейс не задействуется, тем не менее, если инструмент не предоставляет firstName, он не сможет записать данные.
Из вашего объяснения кажется, что ваше веб-приложение также содержит сервисный уровень, но это будет гораздо более очевидно, когда ваша система будет разделена на сервисный уровень и веб-приложение (как тупой пользовательский интерфейс) только для сбора пользовательской информации.
Теперь вам все еще нужно (или, по крайней мере, лучше) поставить валидацию пользовательского интерфейса, а также упомянутое вами для лучшего взаимодействия с пользователем. Не следует размещать валидацию пользовательского интерфейса, чтобы действительно запретить пользователям оставлять поле пустым с точки зрения согласованности данных, поскольку сервисный уровень не (и не должен) разрешать пользователям в любом случае. Но это больше для лучшего пользовательского опыта (UX), поэтому пользователи получают более быструю обратную связь.
Иногда типы проверки, которые происходят в пользовательском интерфейсе и на уровне служб, похожи с точки зрения логики. Допустим, имя не должно быть пустым. Тогда может быть возможно поделиться логикой, как-то, но много раз, вы не можете выполнять проверки на стороне клиента, потому что вам нужны некоторые внешние данные, ресурсы, информация ... для проверки. Например, количество доступных товаров на складе не может быть меньше 10. В этом случае вы не можете иметь эту информацию, или если вы могли бы, это не имеет значения. Потому что вы должны пройти валидацию в части сохранения, которая, вероятно, изменится к тому времени, когда пользователь отправит форму.
Так что, если в этом сценарии у вас есть фиксация этих двух типов проверки, то лучше использовать проверку на стороне службы, а на стороне клиента вы также передаете информацию (асинхронно) в службу и возвращаете результат обратно. Что-то вроде этого решения на стороне службы . Если у вас есть смесь этих проверок в одном сценарии, то я бы даже не стал их разделять только на пользовательский интерфейс и проверки служб, поскольку всю проверку я бы перешел к службе.