我想编写一个Java类,以特定的方式为多租户系统包装另一个类:
示例:
拿这个现有的课程:
MyService{
public List<Product> getProducts(Account filterWithUseraccount);
public List<Purchase> getPurchases(Account filterWithUseraccount, Date fromDate, Date tillDate);
public List<Category> getCategories(Account filterWithUseraccount, Category parentCategory);
}
我想创建这个新类,但方法应该是&#34;自动生成&#34;:
MyTenantOrientedService{
// Assign an account which will be used to call all MyService methods
private Account filterWithUseraccount;
// The service being wrapped
private MyService myService;
public List<Product> getProducts(){
return myService.getProducts(filterWithUseraccount);
}
public List<Purchase> getPurchases(Date fromDate, Date tillDate){
return myService.getPurchases(filterWithUseraccount, fromDate, tillDate);
}
public List<Category> getCategories(Category parentCategory){
return myService.getCategories(filterWithUseraccount, parentCategory);
}
}
正如您所看到的,MyTenantOrientedService中的方法与MyService中的方法相同,只是参数&#34; Account filterWithUseraccount&#34;永远不会使用,可以从私有财产中获取。
这是一个简单的例子,但想象一个有很多方法的类,这使得创建包装函数变得非常繁琐。这是很多代码重复,很容易创建bug。
我相信使用AOP或其他设计模式可能存在解决方案,但我无法弄清楚哪个。
答案 0 :(得分:2)
您的IDE会为您处理此类任务。
例如,您可以在 MyTenantOrientedService 中添加 MyService 类型的成员变量,然后在Eclipse上右键单击MyTenantOrientedService,然后单击&#34; Source - &GT;生成委托方法&#34;
它正在为您应用Delegation Pattern。