Ich bin ein Fan von statischen Methoden in Java für zB in Util-Klassen. Aber unter einigen Kollegen habe ich einige Argumente gefunden, dass eine statische Methode niemals externe Ressourcen verwenden sollte. Aber niemand konnte erklären, warum es schlecht oder sogar gefährlich sein sollte. Der einzige Grund, den ich gefunden habe, ist, dass es schwierig sein kann, diese externe Ressource während des Tests zu verspotten. Aber ist das wirklich der einzige Grund?Warum nicht statische Methoden für externe Ressourcen verwenden?
Im Folgenden habe ich ein Beispiel für eine statische Methode. Ich würde gerne verstehen, warum es ein schlechter Ansatz sein sollte, um es mit statischen zu verwenden.
public class JmsUtil {
public static String sendBytesMessage(byte[] messageBytes) throws JMSException, NamingException {
String jmsMessageID = null;
Connection connection = null;
try {
Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ourfactory");
Queue queue = (Queue) context.lookup("ourqueue");
connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
BytesMessage bytesMessage = session.createBytesMessage();
bytesMessage.writeBytes(messageBytes);
messageProducer.send(bytesMessage);
jmsMessageID = bytesMessage.getJMSMessageID();
} finally {
if (connection != null) {
connection.close();
}
}
return jmsMessageID;
}
}
Mit freundlichen Grüßen
Mit statischen Methoden ist nichts falsch. Es hängt nur davon ab, was Sie brauchen. Es gibt fantastische Werkzeuge wie Apache Common, eigentlich StringUtils, die viele statische Methoden hat. Wenn Sie statische Dinge vortäuschen wollen, können Sie Powermock verwenden. Wie auch immer, diese Frage scheint für mich etwas unwichtig zu sein, da dies mehr wie eine auf Meinungen basierende Sache ist. –
'sendBytesMessage' ist in Ihrem Beispielcode nicht als 'statisch' markiert – tommyO
Statische Methoden machen es schwierig (oder unmöglich, wenn Sie nicht so etwas wie PowerMockito verwenden wollen), die externe Ressource in Tests nachzuahmen. Vielleicht lesen [Statische Methoden sind Tod zur Testbarkeit] (http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/). –