Я хотел бы проверить некоторые объекты. Проверка состоит из двух частей:
- проверка того, имеет ли пользователь право доступа к объекту (конкретные права уже рассчитаны и сохранены в логических значениях, максимум 4 роли)
- проверка, находится ли объект в определенном состоянии (из набора состояний)
У меня много правил (всего около 25), таких как приведенные ниже, которые необходимо проверить:
- isOwner && (status == 11 || status == 13 || status == 14)
- ! (IsOwner && isReceiver && status == 12)
- .....
У меня есть эти правила, распределенные по нескольким методам, 4 или 5 правил в методе.
Если правило не выполняется, другие правила не проверяются.
Мне нужно создать валидатор (или настроить уже созданный) в каждом методе, который использует эту валидацию.
Я ищу шаблон проектирования, который бы упростил построение структуры для проверки объектов. Моя цель - предоставить конкретные сообщения об ошибках. Например, если проверка не удалась, потому что у пользователя нет прав, я хочу сообщить ему / ей об этом. Если это не удалось из-за состояния объекта, то я хочу показать, что
.
Сначала я подумал о шаблоне декоратора. У меня есть объект обработчика сообщений об ошибках, который может быть украшен конкретными сообщениями об ошибках. Один декоратор будет проверять права пользователя, а другой - состояния. Но порядок, в котором я создаю свои объекты валидатора, не имеет значения, поэтому мощность шаблона декоратора не используется. (AFAIK это одно большое преимущество использования декоратора - смешивание украшений). Я думаю, что цепь может быть лучше для этого случая ...?!?! Какой вариант дизайна вы бы порекомендовали для этого сценария?