这更多是关于 Java 而不是 Dropwizard;但我在 Dropwizard 中有两个资源: CustomerResource和ApiResource.
有CustomerResource一种createCustomer方法基本上可以创建一个新客户。当ApiResource第三方调用其中的方法时,它也会创建一个新客户,所以这让我想到了重复代码和解决它的最佳方法。我有几种方法;但首先这里是为了更清晰的类。
@Path("/internal")
public class CustomerResource{
private DBDao dbDao;
private AnotherAPI api;
//constructor for DI
public Response Create(@internalAuth CustomerPojo customerPojo) {
//logic to validate customerpojo
//logic to ensure user isn't a duplicate
//some other validation logic
//finally user creation/saving to DB
Return response.ok(200).build();
}
}
@Path("/external")
public class ApiResource{
private DBDao dbDao;
private AnotherAPI api;
//constructor for DI
public Response Create(@ExternalAuth PartialCustomerPojo partialCustomerPojo) {
//logic to validate PartialCustomerpojo
//supplement partialCustomerPojo
//logic to ensure user isn't a duplicate
//some other validation logic
//finally user creation/saving to DB
Return response.ok(200).build();
}
}
因此,两个主要区别是端点的调用方式(身份验证)和提供的有效负载。
我考虑删除重复代码的方法是创建一个新的具体类,该类从两个资源中获取共性,并且每个资源都实例化一个像这样的新类。
public class CommonClass{
private DBDao dbDao;
private AnotherAPI api;
//constructor for DI
public boolean Create (CommonPojo commonPojo) {
//logic to validate customerPojo
//logic to ensure user isn't a duplicate
//some other validation logic
//finally user creation/saving to DB
Return response.ok(200).build();
}
}
现在在里面CustomerResource,ApiResource我只是这样做。
CommonClass commonClass = new CommonClass(dbDao, api);
//create a new instance customerPojo or CommonPojo and call
commonClass.create(customerPojo);
这听起来像是一个好策略吗?除了重复之外,还有其他问题吗?这两个资源方法也不能在同一个类中。任何最佳实践将不胜感激。
郎朗坤
噜噜哒
当年话下
相关分类