Vor ein paar Monaten habe ich angefangen, in einem neuen Projekt zu arbeiten, und als ich den Code durchgesehen habe, habe ich die Menge der verwendeten statischen Methoden gemerkt. In ihnen sind nicht nur Utility-Methoden collectionToCsvString(Collection<E> elements)
, sondern auch viele Geschäftslogiken enthalten.
Als ich den Verantwortlichen nach den Hintergründen fragte, sagte er, es sei ein Ausweg aus der Tyrannei des Frühlings . Um diesen Denkprozess dreht sich etwas: Um eine Methode zur Erstellung von Kundenbelegen zu implementieren, könnten wir einen Service haben
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Nun, der Typ sagte, dass er es nicht mag, Klassen unnötigerweise von Spring verwalten zu lassen, da dies die Einschränkung auferlegt, dass Client-Klassen selbst Spring Beans sein müssen. Am Ende wird alles von Spring verwaltet, was uns ziemlich zwingt, prozedural mit staatenlosen Objekten zu arbeiten. Mehr oder weniger, was hier angegeben ist https://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
Anstelle des obigen Codes hat er also
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Ich könnte bis zu dem Punkt argumentieren, dass Spring es nach Möglichkeit vermeiden sollte, unsere Klassen zu managen, aber ich sehe nicht den Vorteil, dass alles statisch ist. Diese statischen Methoden sind auch zustandslos, also auch nicht sehr OO. Ich würde mich mit sowas wohler fühlen als
new CustomerReceiptCreator().createReceipt()
Er behauptet, dass statische Methoden einige zusätzliche Vorteile haben. Nämlich:
- Einfacher zu lesen. Importieren Sie die statische Methode und wir müssen uns nur um die Aktion kümmern, nicht um welche Klasse.
- Ist natürlich eine Methode frei von DB-Aufrufen, also leistungsmäßig günstig; und es ist eine gute Sache, es klar zu machen, so dass der potenzielle Client in den Code gehen und dies überprüfen muss.
- Einfacheres Schreiben von Tests.
Ich habe jedoch das Gefühl, dass etwas nicht ganz in Ordnung ist, daher würde ich gerne einige erfahrene Entwickler dazu hören.
Meine Frage ist also, was sind die potenziellen Tücken dieser Art der Programmierung?
static
Methode ist nur eine normale Factory-Methode. Die Statisierung von Factory-Methoden ist aus einer Reihe von zwingenden Gründen die allgemein anerkannte Konvention. Ob die Fabrikmethode hier angemessen ist, ist eine andere Sache.