我正在为至少5个具体实现设计一个通用的Service
接口。现在所有这些服务都需要不同类型的输入。我想创建一个Param
类来保存参数,这样接口可以保持通用。但是,对于某些实现,某些字段将不被使用。我还想过用Map
来保持我的参数,但这也不好(无处不在的演员和if-elses)。另外,我想要做的是使用静态方法Service.responseAsPerFirstImplementation(p1, t1, i1)
等创建一个类。但是,这种方式编码并不好。请建议我应该如何设计模块化设计,灵活性与参数的可变性?
编辑: 是不是这样做的好方法?
public class Client {
public static void main(String[] args) {
System.out.println(Services.response(new UserParam(1, new Date())));
System.out.println(Services.response(new PatternParam("core")));
}
}
答案 0 :(得分:1)
我认为问题的核心是你的参数是来自某些" generic",非结构化的源类似HTTP请求参数或命令行参数还是某些结构化源 - 我会在你知道的地方放置一个Swing表单提前你有哪些UI元素。
如果是"泛型"您必须将这些参数转换为服务可以处理的参数。您可以手动或使用某些库/框架执行此操作。例如,您可以使用注释来描述HTTP请求及其参数如何映射到控制器/服务/方法:
@RestController
@RequestMapping("/trainRun")
public class TrainRunController {
@RequestMapping(value = "/{year}/{month}/{day}/{trainNumber}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public TrainRun getTrainRun(@PathVariable Integer year, @PathVariable Integer month, @PathVariable Integer day,
@PathVariable String trainNumber) { ... }
}
与命令行参数类似 - 您可以使用像args4j这样的东西将CLI参数首先映射到Java对象,然后适当地调用您的服务。
希望这有帮助。