我正在使用Java生成JCL。我有四种添加数据定义语句的方法。一个接受字符,一个接受字符串,一个接受数组(字符串),另一个没有第二个参数。
public void addDD (String label, char classChar) //Generates: SYSIN DD SYSOUT=[classChar]
public void addDD (String label, String dataset) //Generates: SYSIN DD DSN=[dataset]
public void addDD (String label) //Generates: SYSIN DD DUMMY
public void addDD (String label, String datasets[]) //Generates: SYSIN DD *
// DSN=[datasets[0]],
// DSN=[datasets[1]]我担心的是,这些方法不仅仅接受不同的参数类型;整个方法都会根据类型的不同而变化。如果是字符串,则需要"DSN=“。如果是字符,则需要"SYSOUT=“。同时,我不希望客户端担心在每个场景中使用不同的方法名称。
我当前的设计是被认为是糟糕的实践还是良好的实践?
发布于 2013-10-29 03:39:48
这些决定在一定程度上总是与品味有关。
在这种情况下,我宁愿更改方法名称,因为它们确实做了一些不同的事情。大多数时候,像这样的重载方法只是为了方便:使用char或String变量主要意味着char将被转换为字符串,并且效果将是相同的,这与您的示例中的情况不同。
这样做可能还有其他原因(使用反射来找到正确的方法),但在这种情况下,我建议编写清晰的Javadoc来描述这些方法实际所做的事情,以避免混淆。
发布于 2013-10-29 03:49:06
您所做的是非常危险的--您指望addDD(String, char)的调用者读取addDD(String, String),然后发现他不应该使用javadoc。
选项1:重命名方法:addDDSysout()、addDDDsn()等。
Option2:只需使用一个方法即可实现所有这些功能:
addDD(String label, String... args)并且确保你可以处理任何抛给它的东西--参数中没有字符串,单个字符串,多个字符串,单个字符等等。
发布于 2013-10-29 04:53:47
我不得不承认,这些事情往往是品味的问题。但我不确定其他响应者是否理解JCL DD语句的意义。因为根据你的问题领域我不同意他们的观点。
我喜欢你的设计。我不鼓励使用不同的方法名。这基本上就是TSO对FILE(xxx)和DSN(xxx)所做的事情,我一直很讨厌它。虽然您的方法在输入读取器流中产生不同的“结果”,但这些差异是由JCL的语法强制的。更具体地说,他们不做不同的事情。从根本上说,您是在向批处理作业声明数据源/接收器。不要让你的用户学习4种不同的方法。
https://stackoverflow.com/questions/19643489
复制相似问题