2016-05-03 3 views
1

Предположим, у меня есть объект Foo. У меня также есть FooBuilder, который должен использоваться для создания объектов Foo. Когда и где следует проверять данные объекта Foo?Проверка объекта с использованием шаблона строителя

Foo foo = new FooBuilder() 
    .withX("specific data for X") 
    .withY("specific data for Y") 
    .build(); 

Давайте добавим к уравнению, что проверка может содержать поиск в, например, базе данных. Должен ли строитель выполнить проверку внутри метода сборки? Или должен ли быть конкретный метод проверки в объекте foo? Или, может быть, валидация лучше всего полностью абстрагироваться от объекта Foo и FooBuilder?

ответ

2

В идеале не должно быть возможно создать недопустимый объект Foo. Поэтому наличие метода валидации в Foo - не лучший выбор.

Валидация должна быть выполнена как можно раньше. Это может быть в методе build() или, если возможно, еще раньше в методах настройки строителя.

Если вы должны поместить фактическую реализацию вашего валидатора в строитель или в отдельный класс, это зависит от его сложности. Если для этого требуются такие вещи, как поиск базы данных, как вы упомянули, вероятно, имеет смысл создать отдельный класс проверки.

Я хотел бы добавить, что строитель иногда считается антипаттерном, указывающим, что класс, вероятно, слишком сложный и должен быть разделен на несколько меньших классов.

Смежные вопросы