Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多种方法,相同的内容_Java - Fatal编程技术网

Java 多种方法,相同的内容

Java 多种方法,相同的内容,java,Java,因此,我正在编写一些较旧的代码(几年前编写),我看到了一个改进它的机会。但我需要说明为什么我想更改现有代码,并且需要一个更好的理由“您不应该重复代码” 问题就在这里。。 我们有一个MessageSender类,用于将JMS消息发送到多个不同的队列。但是编写代码的人将相同的方法编写了11次,唯一的区别基本上是队列的名称 例如,当前代码如下所示 public void publishToQueue1(final Object messageContent, final Map<Stri

因此,我正在编写一些较旧的代码(几年前编写),我看到了一个改进它的机会。但我需要说明为什么我想更改现有代码,并且需要一个更好的理由“您不应该重复代码”

问题就在这里。。 我们有一个MessageSender类,用于将JMS消息发送到多个不同的队列。但是编写代码的人将相同的方法编写了11次,唯一的区别基本上是队列的名称

例如,当前代码如下所示

    public void publishToQueue1(final Object messageContent, final Map<String, Object> jmsHeaders,final Map<String, String> headers) throws JMSException {
    logger.debug("sending to queue1 - some message blah blah");
    publishMessage(esbJmsTemplate, queue1.getQueueName(), messageContent, jmsHeaders, headers);
}

public void publishToQueue2(final Object messageContent, final Map<String, Object> jmsHeaders,final Map<String, String> headers) throws JMSException {
    logger.debug("sending to queue2 - some message blah blah");
    publishMessage(jmsTemplate, queue2.getQueueName(), messageContent, jmsHeaders, headers);
}

public void publishToQueue3(final Object messageContent, final Map<String, Object> jmsHeaders,final Map<String, String> headers) throws JMSException {
    logger.debug("sending to queue3 - some message blah blah");
    publishMessage(jmsTemplate, queue3.getQueueName(), messageContent, jmsHeaders, headers);
}

public void publishToQueue4(final Object messageContent, final Map<String, Object> jmsHeaders,final Map<String, String> headers) throws JMSException {
    logger.debug("sending to queue4 - some message blah blah");
    publishMessage(jmsTemplate, queue4.getQueueName(), messageContent, jmsHeaders, headers);    
}

public void publishToQueue5(final Object messageContent, final Map<String, Object> jmsHeaders,final Map<String, String> headers) throws JMSException {
    logger.debug("sending to queue5 - some message blah blah");
    publishMessage(jmsTemplate, queue5.getQueueName(), messageContent, jmsHeaders, headers);
}

... more methods that look like this.. 
... and on..
... and on..
and on...
public void publishToQueue1(最终对象messageContent、最终映射jmsHeaders、最终映射头)引发JMSException{
debug(“发送到队列1-一些消息之类的”);
publishMessage(esbJmsTemplate,queue1.getQueueName(),messageContent,jmsHeaders,headers);
}
public void publishToQueue2(最终对象messageContent、最终映射jmsHeaders、最终映射头)引发JMSException{
debug(“发送到队列2-一些消息之类的”);
publishMessage(jmsTemplate,queue2.getQueueName(),messageContent,jmsHeaders,headers);
}
public void publishToQueue3(最终对象messageContent、最终映射jmsHeaders、最终映射头)引发JMSException{
debug(“发送到队列3-一些消息之类的”);
publishMessage(jmsTemplate、queue3.getQueueName()、messageContent、jmsHeaders、Header);
}
public void publishToQueue4(最终对象messageContent、最终映射jmsHeaders、最终映射头)引发JMSException{
debug(“发送到队列4-一些消息之类的”);
publishMessage(jmsTemplate,queue4.getQueueName(),messageContent,jmsHeaders,headers);
}
public void publishToQueue5(最终对象messageContent、最终映射jmsHeaders、最终映射头)引发JMSException{
debug(“发送到队列5-一些消息之类的”);
publishMessage(jmsTemplate、queue5.getQueueName()、messageContent、jmsHeaders、Header);
}
... 更多类似于此的方法。。
... 然后。。
... 然后。。
而且。。。
我想用一个更像这样的方法替换它,其中队列名称是参数的一部分

public class MessagePojo {
    private Object message content;
    private Map<String, Object> jmsHeaders;
    private Map<String, String> headers;
    private String queueName;
..setters and getters...
}

public void publishMessage(MessagePojo mpo) {
    publishMessage(mpo);
}
公共类MessagePojo{
私有对象消息内容;
私人地图管理员;
私有映射头;
私有字符串队列名称;
…二传手和接球手。。。
}
public void publishMessage(MessagePojo mpo){
公共信息(mpo);
}

除了DRI(不要重复你自己)之外,有没有人能建议一些设计/模式原则来摆脱旧代码(多个相同的方法)?

这有点像工厂模式,只是没有返回你正在引导到队列的类。你也可以看看责任链模式。你可以用一种方式来描述它,现有的代码非常容易出现错误,使用它时很容易出错,调用错误的方法并发布到错误的队列。通过将代码重构为更惯用、更清晰的代码,您可以降低产品未来的维护成本,从而降低开发人员在未来调试消息未显示在正确队列中的原因时花费的时间。开发人员是昂贵的,如果你可以节省公司的时间,否则他们会花费调试像这样的可怕代码,你正在节省金钱。我会考虑通过队列本身而不是队列名称,以避免“严格类型化”代码。卡尔,谢谢你的答复。我已经尝试过“可读性”、“调试”和“维护”方法,但没有成功。社区可以帮助你清楚地表达观点