스프링 DB 1편 - 데이터 접근 핵심 원리

ItemController 에서 save 로직 리팩토링

샐님 2023. 7. 24. 04:15
728x90
반응형

item 을 저장할때 기존로직은 아래 코드처럼 controller에서 item데이터를 생성해주고 있어서 유지보수나 관리차원에서 힘들 수 있다. 

 @PostMapping("/save")
    public String saveItem(@ModelAttribute("item") Item form, RedirectAttributes
            redirectAttributes, Model model) throws IOException {


        List<UploadFile> storeImageFiles = fileutils.storeFiles(form.getImageFiles());
        //데이터베이스에 저장
        Item item = new Item();
        // controller 에서 setter를 사용해서 추가하는 것보다는 
        // entity에 static 생성자 메소드를 생성해서 저장시키는 것이 좋음
        item.setItemName(form.getItemName());
        item.setDescription(form.getDescription());
        item.setPrice(form.getPrice());
       item.setUploadFiles(storeImageFiles);
       List<Color> newcolor = new ArrayList<>();
       List<Size> newSize = new ArrayList<>();
        //색상
        for(String o : form.getColors()){
            Color  co  = new Color(item,o);
            newcolor.add(co);
        }
        //사이즈
        for(String s : form.getSizes()){
            Size co  = new Size(item,s);
            newSize.add(co);
        }
        item.setColorList(newcolor);
        item.setSizeList(newSize);
        itemService.saveItem(item);
        log.info("saved item");
       // return "redirect:/admin/item/detail/"+savedItem.getId();
        return "redirect:/admin/item/list";
    }

그러므로 이부분에 setter부분을 최대한 없애고 저장하는 메서드는  entitiy에서 할수 있게 수정하는 것이 권장된다.

 //데이터베이스에 저장
        Item item = new Item();
        // controller 에서 setter를 사용해서 추가하는 것보다는 
        // entity에 static 생성자 메소드를 생성해서 저장시키는 것이 좋음
        item.setItemName(form.getItemName());
        item.setDescription(form.getDescription());
        item.setPrice(form.getPrice());
       item.setUploadFiles(storeImageFiles);
       List<Color> newcolor = new ArrayList<>();
       List<Size> newSize = new ArrayList<>();
        //색상
        for(String o : form.getColors()){
            Color  co  = new Color(item,o);
            newcolor.add(co);
        }
        //사이즈
        for(String s : form.getSizes()){
            Size co  = new Size(item,s);
            newSize.add(co);
        }
        item.setColorList(newcolor);
        item.setSizeList(newSize);
        itemService.saveItem(item);

Item.java 에서 createItem 메소드를 따로 생성해서 분리해준다.

,,,

@Entity
@Getter
@Setter
public class Item {
,,,
 // 생성 메서드 //
 public static Item createItem(Item item,List<UploadFile> files){
  Item newItem;
  newItem = item;
  newItem.setUploadFiles(files);

  List<Color> newColor = new ArrayList<>();
  List<Size> newSize = new ArrayList<>();
  //색상
  for(String o : item.getColors()){
   Color  co  = new Color(item,o);
   newColor.add(co);
  }
  //사이즈
  for(String s : item.getSizes()){
   Size co  = new Size(item,s);
   newSize.add(co);
  }
  newItem.setColorList(newColor);
  newItem.setSizeList(newSize);

  //파일
  newItem.setUploadFiles(files);
  return newItem;
 }
}

 

728x90
반응형