Я занимаюсь техническим обслуживанием / развитием многослойного проекта Spring 3.0. Клиент представляет собой сложное приложение RCP, вызывающее некоторые методы Spring Beans из уровня обслуживания (менеджеров) на сервере на основе RMI.
У меня есть несколько огромных методов в менеджерах, некоторые из них занимают более 250 строк. Вот пример: (я опущен код для ясности)
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public Declaration saveOrUpdateOrDelete(Declaration decla, List<Declaration> toDeleteList ...){
if (decla.isNew()){
// create from scratch and apply business rules for a creation
manager1.compute(decla);
dao1.save(decla);
...
}else if (decla.isCopy() {
// Copy from an other Declaration and apply business rules for a copy
...
}else {
// update Declaration
...
}
if (toDeleteList!=null){
// Delete declarations and apply business rules for a mass delete
...
}
Первые 3 ветви являются взаимоисключающими и представляют собой единицу работы. Последняя ветвь (удаление) может происходить одновременно с другими ветвями.
Не лучше ли разделить этот метод на что-то более «CRUDy» для ясности и удобства обслуживания? Я думал о разделении этого бегемота на другие методы менеджера, такие как:
public Declaration create(Declaration decla ...){...
public Declaration update(Declaration decla ...){...
public Declaration copyFrom(Declaration decla ...){...
public void delete(List<Declaration> declaList ...){...
Но мои коллеги говорят, что это передаст сложность и бизнес-правила клиенту, что я потеряю преимущество атомарности и т. Д. Кто здесь?