我有一个ProductService方法接口findByCriteria.该方法具有空的参数的,像一个长长的清单productName,maxCost,minCost,producer等等.
我通过引入参数对象重构了这个方法.我创建了类SearchCriteria,现在方法签名如下所示:
findByCriteria (SearchCriteria criteria)
Run Code Online (Sandbox Code Playgroud)
我认为这些实例SearchCriteria只是由方法调用者创建的,并且只在findByCriteria方法内部使用,即:
void processRequest() {
SearchCriteria criteria = new SearchCriteria ()
.withMaxCost (maxCost)
.......
.withProducer (producer);
List<Product> products = productService.findByCriteria (criteria);
....
}
Run Code Online (Sandbox Code Playgroud)
和
List<Product> findByCriteria(SearchCriteria criteria) {
return doSmthAndReturnResult(criteria.getMaxCost(), criteria.getProducer());
}
Run Code Online (Sandbox Code Playgroud)
所以我不想创建一个单独的公共类SearchCriteria并将其放入ProductServiceInterface:
public interface ProductService {
List<Product> findByCriteria (SearchCriteria criteria);
static class SearchCriteria {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这个界面有什么不好的吗?你SearchCriteria上课的地方在哪里?
我觉得看起来不错。它清楚地表明 是专门SearchCriteria与 s 一起使用的ProductService。
然而,有些人会认为嵌套类看起来有点奇怪,并声称这将是一种过度设计,并且包范围在大多数情况下都足够好,包括这种情况。
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |