아래에서는 사용 양식에서 지속성 계층으로의 데이터 흐름을 소개합니다. 그러나 어떤 객체가 MVC의 어떤 레이어에서 사용 가능해야하는지, 그리고 MVC의 다른 레이어간에 데이터가 어떻게 전송되어야하는지에 대해 의문을 가지십시오. 아래에 게시 된 코드는 Spring 프레임 워크의 코드입니다.다른 MVC 계층 간의 데이터 흐름
이제 우리는 사용자가 입력 한 양식 데이터를 보유하고있는 DTO (데이터 전송 개체) PatientForm
을 가지고 있습니다.
public class Patient {
private int id;
private String name;
private String medicineOne;
private String medicineTwo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMedicineOne() {
return medicineOne;
}
public void setMedicineOne(String medicineOne) {
this.medicineOne = medicineOne;
}
public String getMedicineTwo() {
return medicineTwo;
}
public void setMedicineTwo(String medicineTwo) {
this.medicineTwo = medicineTwo;
}
}
PatientForm
은 데이터를 전송하지 않고, 제어부
PatientController
에 전달하지만, 서비스 계층
PatientService
형태로 전달된다. Pesistent 엔티티
Patient
에 DTO의 데이터 서비스 계층에
@PostMapping("/patient/addpatient")
public ModelAndView addPatient(@ModelAttribute("patientform") PatientForm patient){
patientService.addPatient(patient);
return new ModelAndView("redirect:/");
}
PatientService
실제 전송이 이루어진다.
할까요
Controller layer
또는Service layer
데이터를 전송 DTO에서 영구 엔티티 :public void addPatient(com.hp.view.form.PatientForm patientForm){ String medicineOneName = patientForm.getMedicineOne(); Medicine medicineOne = medicineService.findByName(medicineOneName); if(medicineOne == null){ medicineService.save(new Medicine(medicineOneName)); medicineOne = medicineService.findByName(medicineOneName); } String medicineTwoName = patientForm.getMedicineTwo(); Medicine medicineTwo = medicineService.findByName(medicineTwoName); if(medicineTwo == null){ medicineService.save(new Medicine(medicineTwoName)); medicineTwo = medicineService.findByName(medicineTwoName); } List<Medicine> medicines = new ArrayList<>(); medicines.add(medicineOne); medicines.add(medicineTwo); Patient patient = new Patient(); patient.setName(patientForm.getName()); patient.setMedicine(medicines); patientRepository.save(patient); }
여기에 위의 흐름에 따라 내 질문은?
컨트롤러에서 데이터 전송이 수행되면 모델 엔터티가 컨트롤러 계층에 선언됩니다. 데이터 전송이 서비스 계층에서 수행되면 DTO가 서비스 계층에서 선언됩니다. 다음 중 어느 것이 좋습니다?
내 서비스 계층에 내 엔터티 개체 인스턴스를 구체화했습니다
Patient
. 이것이 문제를 일으키고 Spring Contianer가 Entity Bean을 관리하도록해야합니까?
봄Patient patient = new Patient();