2016-11-07 83 views
1

我正在设计一个用于至少5个具体实现的常见Service接口。现在所有这些服务都需要不同类型的输入。我想创建一个Param类来保存参数,以便界面可以保持通用。但是对于某些实现来说,其中一些字段将不被使用。我也想过使用Map来保存我的参数,但这也不是很好(到处都是演员和if-elses)。另外,我想到的是用静态方法Service.responseAsPerFirstImplementation(p1, t1, i1)等创建一个类。但是,这种方式不是很好的编码。请建议我应该如何在模块化设计,灵活性与参数变化之间进行设计?具有不同类型参数的设计服务java

编辑: 低于这样做的好方法?

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

为什么你想要一个通用接口呢? – lexicore

+0

以免将实现暴露给客户端。我想使用从'Services'类中获得'Service'实例的方法(以支持实例缓存等) – GurV

+1

但是为什么一个* common *接口? – lexicore

回答

1

我认为,问题的核心是,如果你的参数是来自于一些“通用”,非结构化sourcelike 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对象,然后适当地调用你的服务。

希望这会有所帮助。

相关问题