Допустимо ли передавать экземпляры компоновщика из одного объекта в другой для добавления различных значений поля?
В приведенном ниже примере детали для создания экземпляра VacationPlan должны быть получены из нескольких мест (DateAdder и PlaceAdder). Организатор создает экземпляр компоновщика и передает его в качестве аргументов этим экземплярам «appender» и, наконец, выполняет вызов build ().
Пример:
public class Organizer {
private final DateAdder dateAdder;
private final PlaceAdder placeAdder;
private final VacationProviderSearch vacationProviderSearch;
public void organizeVacation() {
VacationPlan.Builder vacationPlanBuilder = VacationPlan.newBuilder();
vacationPlanBuilder = dateAdder.addDate(vacationPlanBuilder);
vacationPlanBuilder = placeAdder.addPlace(vacationPlanBuilder);
VacationPlan vacationPlan = vacationPlanBuilder.build();
List<Provider> providers = vacationProviderSearch.getProviders(vacationPlan);
// use providers to get the best vacation provider
}
}
Мы обсуждали этот подход на работе, и я утверждал, что этим индивидуальным дополнителям лучше принимать экземпляр не-строителя в качестве аргументов и возвращать соответствующий вывод в виде POJO.
Примерно так:
public void organizeVacation() {
VacationDateRange dateRange = dateProvider.getDateRange(userRequestJson);
String location = locationProvider.getLocation(userRequestJson);
VacationPlan vacationPlan = vacationPlanBuilder.newBuilder()
.startDate(dateRange.getStartDate())
.endDate(dateRange.getEndDate())
.location(location)
.build();
List<Provider> providers = vacationProviderSearch.getProviders(vacationPlan);
// use providers to get the best vacation provider
}
Это гарантирует, что в системе не будет изменчивых экземпляров. Какой из этих подходов лучше?