Java Spring, работа с доменными объектами
Я создаю веб-приложение Spring MVC, которое использует JPA/Hibernate для хранения объектов. У меня есть вопрос, который относится к объектам домена и как их правильно использовать. Есть несколько доменных объектов с зависимостями. Примером может быть сущность Company, которой назначен объект Region.
У меня есть простой вспомогательный класс, который я вызываю из контроллера, задача которого - прочитать XML-файл с URL-адреса, проанализировать его содержимое и вернуть новый класс объектов Company на основе этого содержимого.
class MyCustomHelper {
MyCustomService myCustomService;
//I have to pass myCustomService to be able to fetch existing Region entities from db
public MyCustomHelper(MyCustomService myCustomService){
this.myCustomService = myCustomService;
}
public Company createCompanyObjectFromUrl(){
//I get these values via xml parser in the app
String name = "Company name";
String address = "Address of a company";
Integer regionId = 19;
//Create new instance of entity and fill it with data
Company company = new Company();
company.setName(name);
company.setAddress(address);
//Assign already existing region to new Company
Region region = this.myCustomService.findOneRegion(regionId);
company.setRegion(region);
return company;
}
}
Этот подход работает, но я не знаю, является ли он правильным или неправильным по замыслу. Если бы мой объект Company был только простым объектом без каких-либо зависимостей, было бы легко создать новую компанию и установить для нее только значения String и Integer. Но это не так.
Я также должен создать связь с существующим регионом при создании новой компании. Я сделал это, передав служебный объект в конструктор моего помощника, который выбирает существующий регион из базы данных.
Как только новая Компания передается обратно контроллеру, ей присваиваются некоторые другие атрибуты, а затем она сохраняется в базе данных.
У меня такое ощущение, что это не очень хороший подход (передача экземпляра Service во вспомогательный класс). Может быть, было бы лучше создать некоторый объект DTO в помощнике, вернуть его обратно в контроллер и затем сопоставить его с объектом Domain.
Или это просто нормально?
1 ответ
Я думаю, что myCustomHelper на самом деле лучше называть ImportService или подобным, то есть это сам сервис, и в него можно добавить другой сервис.