Java Spring, работа с доменными объектами

Я создаю веб-приложение Spring MVC, которое использует JPA/Hibernate для хранения объектов. У меня есть вопрос, который относится к объектам домена и как их правильно использовать. Есть несколько доменных объектов с зависимостями. Примером может быть сущность Company, которой назначен объект Region.

Диаграмма отношений E-R

У меня есть простой вспомогательный класс, который я вызываю из контроллера, задача которого - прочитать 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 или подобным, то есть это сам сервис, и в него можно добавить другой сервис.

Другие вопросы по тегам