Markus
Его подход был неплохим, но я просто поступаю иначе.
По моему мнению, вы уважаете OCP, исключая правила проверки, которые были приняты разумно. Используя эти правила валидации в конструкторе классов, вы предполагаете, что правила неизменны, верно?
Я бы не стал так делать, просто создал бы диаду методов, устанавливающую правила в качестве этого конструктора. Для меня было неясно, что произойдет, если правила проверки были нарушены. Мне нравится бросать исключения в пользовательский интерфейс, который обрабатывает как более вездесущие предупреждения.
Еще одна вещь, которая мне не ясна, это событие, которое вызывает эту проверку. было бы, когда сущность User была добавлена в хранилище или есть метод сущности, который бы это делал? Я возьму второй вариант, вызывающий метод isValidAuthentication (), выбрасывающий эти исключения.
Относительно зависимости сущности от хранилища, осмелюсь сказать, что это неправильно. Вы могли бы даже сделать сущность зависимой от него, потому что хранилище представляет собой набор объектов, что с этим не так? Тем не менее, на данный момент кажется очевидным, что проверка является службой. Поэтому, если мы поместим эти проверки в Службу, это устранит эту связь и снова применяет OCP. Вы согласны?
Большое объятие и успехов!