2011-09-19 54 views
0

我有一个父实体Person和两个子实体:Caller和Employee。这两个孩子分享了很多领域,所以我实现了JPA继承与单个表策略和鉴别器列。到目前为止这么好。 为了处理这些对象,我有一些处理数据库操作的服务类,我有如下方法:getCallerById();或getEmployeesByFirstName()。 save()方法也在这些服务类中。问题是,当我想保存一个雇员或一个调用者时,我得到了很多重复的代码(对于所有共享属性),所以为了防止这个我创建了第三个服务:PersonService()以处理常见功能。但是现在我不知道如何使用这个服务来重用尽可能多的代码。 也许在PersonService()有类似jpa继承和服务类中的代码重用

public Boolean save(Person p){ 
    if (p instanceOf Caller){ 
     Caller c = new Caller(); 
     c.setCallerSpecificProperty("XXX"); 
    } 

    if (p instanceOf Employee){ 
     Employee c = new Employee() 
     c.setEmployeeSpecificProperty("YYY"); 
    } 

    c.setOtherCommonParameter("ccc"); 
    //............ 
} 

或你怎么劝我来处理这个问题??? 感谢

回答

1

,如果你的问题只是设置100个commonProperties的人,你可以添加的辅助方法,说

protected Person setCommonProperties(Person p){ 
p.setFoo(foo); 
p.setBar(bar); 
... 
p.setWhatever(blahblah); 

return p; 
} 

在parentService(PersonService你的情况)

而在你的子(例如CallerService),

boolean save(){ 
    Caller caller = new Caller(); 
    caller = setCommonProperties(caller); 
    caller.setCallerPropertyA(...); 
    caller.setCallerPropertyB(...); 

    ... 

    //save caller 
return true or false; 
    } 
+0

感谢肯特,这确实是一个很好的和简单的想法。我想我没有为树木播种木材:)。漂亮而优雅的解决方案 –