Я полагаю, что проблема, с которой вы сталкиваетесь, заключается в возможности взглянуть на вызов метода и узнать, какой аргумент получает какое значение. Это пагубная проблема в языке, подобном Java, в котором отсутствует что-то вроде аргументов ключевых слов или хэшей JSON для передачи именованных аргументов.
В этой ситуации шаблон Builder является полезным решением. Это больше объектов, всего три, но это приводит к более понятному коду для проблемы, которую вы описываете. Таким образом, три объекта в этом случае будут такими:
- Вещь : сущность с состоянием, обычно неизменяемая (т.е. только получатели)
- ThingBuilder : фабричный класс, создает сущность Thing и устанавливает ее значения.
- ThingDAO : необязательно для использования шаблона Builder, но отвечает на ваш вопрос.
Взаимодействие
/*
ThingBuilder is a static inner class of Thing, where each of its
"set" method calls returns the ThingBuilder instance being worked with
while the final "build()" call returns the instantiated Thing instance.
*/
Thing thing = Thing.createBuilder().
.setToday("2012/04/01")
.setName("Example")
// ...etc...
.build();
// the Thing instance as get methods for each property
thing.getName();
// get your reference to thingDAO however it's done
thingDAO.save(thing);
В результате вы получаете именованные аргументы и неизменный экземпляр.