Java Spring,使用Domain Objects

时间:2013-09-05 11:44:42

标签: java hibernate spring-mvc jpa domain-object

我正在构建一个Spring MVC Web应用程序,它使用JPA / Hibernate来存储对象。我有一个问题,它被认为是域对象以及如何正确使用它们。有一些域对象具有依赖项。一个示例可以是分配了Region实体的Company实体。

E-R relation diagram

我有一个简单的帮助器类,我从控制器调用,该任务是从URL地址读取XML文件,解析其内容并根据该内容返回新的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值将很容易。但事实并非如此。

创建新公司时,我还必须创建与现有Region的连接。我是通过在我的帮助器的构造函数中传递一个服务对象来完成的,它从数据库中获取一个现有的Region。

将新公司传回控制器后,会为其设置一些其他属性,然后将其保存到数据库中。

我感觉这不是一个非常好的方法(将Service实例传递给helper类)。也许在帮助器中创建某种DTO对象会更简洁,将其返回到控制器,然后将其映射到Domain对象。

或者它还可以吗?

1 个答案:

答案 0 :(得分:1)

我认为myCustomHelper实际上更好地命名为ImportService或类似的,即它本身就是服务,并且可以向其中注入另一个服务。