Ограничение или проверка? - PullRequest
1 голос
/ 13 ноября 2008

Я работаю с привязкой к данным Windows Forms, реализуя интерфейсы типа IDataErrorInfo. Чтобы это работало, объект домена (или бизнеса) может находиться в недопустимом состоянии. Фактически, объект домена должен сохранять недопустимое значение, поскольку пользователь ввел его, чтобы IDataErrorInfo работал правильно. Пока объект не сохранен в недопустимом состоянии, мы в порядке.

Однако, как показывает сюжетная линия, мне было интересно, есть ли разница между противопоказанием и проверкой. Первый запретил бы пользователю вносить изменения ВСЕ, последний - тип проверки, который я описал выше.

Позвольте мне объяснить - если у вас есть коллекция Person, а Person имеет свойство SSN. PersonCollection имеет ключ SSN, то есть в коллекции не может быть двух Persons с одинаковыми SSN. Если мы разрешаем временно недопустимое состояние для Person, мы вводим ситуацию, когда в коллекции есть два Persons с дубликатом SSN, хотя и временно. Это может привести к проблемам, когда другой объект, работающий с PersonCollection, ищет объект Person с дублированным SSN, получая два объекта.

Итак, мне кажется, что определенные типы проверок должны быть ограничениями, а не проверками (после изменения).

Мысли

1 Ответ

1 голос
/ 07 сентября 2009

Например, частью вашей проверки для Person должно быть правило, которое проверяет, что его SSN не является дубликатом (кстати: в случае дублирования, как узнать, какой из них прав? ?).

Если у вас возникли проблемы, поскольку ваш PersonCollection на самом деле является IDictionary с ключом SSN s, дождитесь подтверждения Person, прежде чем добавить его в коллекцию. Объект должен быть временно недействительным, чтобы вы могли это сделать.

Для получения дополнительной информации о проверке отметьте мой ответ на Бизнес-объекты, проверка и исключения .

...