使用不同类型的参数java设计服务

时间:2016-11-07 17:53:51

标签: java

我正在为至少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")));
    }

}

1 个答案:

答案 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对象,然后适当地调用您的服务。

希望这有帮助。