так как вы реализуете классы и объекты, ваше решение будет ОО независимо от того, как вы раскладываете вещи - оно может быть не очень хорошо структурировано в зависимости от вашей ситуации / потребностей! ; -)
Что касается вашего конкретного вопроса, в некоторых случаях было бы целесообразно, чтобы validateUserName принадлежало классу User, поскольку каждый пользователь хотел бы иметь действительное имя. Или вы можете иметь класс утилиты проверки, предполагая, что другие вещи имеют имена, которые используют те же правила проверки. То же самое касается электронной почты. Вы можете разделить их на классы NameValidator и EmailValidator, что будет хорошим решением, если они будут использоваться часто. Вы также можете предоставить функцию validateUserName для объекта User, который только что вызвал метод класса утилит. Все это действительные решения.
Одна из самых больших радостей в OOD / OOP заключается в том, что когда дизайн правильный, вы знаете , что это правильно, потому что многие вещи просто выпадают из модели, которую вы можете сделать, что вы не мог сделать раньше.
В этом случае я бы создал классы NameValidator и EmailValidator, потому что вполне вероятно, что другие объекты будут иметь имена и адреса электронной почты в будущем, но я бы предоставил функции validateName и validateEmailAddress для класса User, потому что это обеспечивает более удобный интерфейс для бизнес-объектов для использования.
остальные пули «мы не хотим» верны; они необходимы не только для правильного наслоения, но и для чистой ОО-конструкции.
Слои и ОО идут рука об руку, основываясь на разделении проблем между слоями. Я думаю, что у вас есть правильная идея, но вам понадобятся некоторые служебные классы для общих проверок, представленные