스프링 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
반응형