[英]jpa inheritance and code reuse in service classes
我有一个父实体,Person和两个子实体:Caller和Employee。 这两个孩子共享许多字段,因此我使用单表策略和区分符列实现了JPA继承。到目前为止,一切都很好。 为了处理这些对象,我有一些服务类来处理数据库操作,其中我有如下方法:getCallerById(); 或getEmployeesByFirstName()。 同样,save()方法也位于这些服务类中。 问题是,当我想保存一名雇员或呼叫者时,我得到了很多重复的代码(用于所有共享属性),因此为了防止这种情况,我创建了第三项服务:PersonService()以处理常见问题功能。 但是现在我不知道如何使用此服务来重用尽可能多的代码。 也许在PersonService()中有类似
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");
//............
}
或您如何建议我处理此问题??? 谢谢
如果您的问题只是设置Person的100个commonProperties,则可以添加helper方法,例如
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.