Eine große Menge von Parametern wie dies oft (aber nicht immer) ein Indikator, dass Sie ein Objekt verwenden könnte den Parametersatz darzustellen. Dies gilt insbesondere, wenn entweder:
Es gibt mehrere Methoden mit ähnlichen großen Parametersätzen, die mit einem einzigen Verfahren unter einem Parameterobjekt ersetzt werden können.
Die Methode aufgerufen wird create...
Also Ihr oben Code könnte werden (mein C verzeihen ++, ich bin ein Java-Entwickler):
class BuildVehicleBooking {
Long officeId;
Long start;
Long end;
String origin;
String destination;
String purpose;
String requirements;
Integer numberOfPassengers;
Booking createVehicleBooking() throws ServiceException { ... }
}
Dies ist die Builder Pattern . Der Vorteil dieses Musters besteht darin, dass Sie einen komplexen Satz von Parametern in Stücken erstellen können, einschließlich mehrerer Variationen darüber, wie die Parameter miteinander in Beziehung stehen, und sogar Parameter überschreiben, sobald neue Informationen verfügbar sind, bevor schließlich die Methode create
aufgerufen wird .
Ein weiterer potenzieller Vorteil ist, dass Sie eine verifyParameters
Methode hinzufügen können, die ihre Konsistenz überprüft, bevor Sie so weit wie creating
das endgültige Objekt gehen. Dies gilt in Fällen, in denen das Erstellen des Objekts nicht umkehrbare Schritte erfordert, z. B. das Schreiben in eine Datei oder Datenbank.
Beachten Sie, dass dies, wie bei allen Mustern, nicht in jedem Fall der Fall ist und in Ihrem Fall nicht zutrifft. Wenn Ihr Code einfach genug ist, kann es sein, dass dieses Muster es überbaut. Wenn der Code unordentlich wird, kann das Refactoring in dieses Muster eine gute Möglichkeit sein, es zu vereinfachen.
Leider glaube ich nicht, dass ich damit durchkommen kann, weil dies ein SOAP-Endpunkt für einen Web-Service ist, aber dennoch sehr informativ. – abarax
Sie können diese Technik sogar für Web-Services verwenden. Sie müssen Ihre Klasse serialisierbar machen und möglicherweise ein Schema implementieren, abhängig davon, was Sie zum Hosten von Web-Services verwenden (Axis benötigt zum Beispiel, dass ich glaube, während asp.net es für Sie behandelt) – Jeremy
Das Builder-Muster ist nützlich, guter Rat! Für die totale Weltherrschaft (Thread-Sicherheit), stellen Sie sicher, dass die create-Methode kopiert alle Parameter vor ihnen zu validieren. (Auch kleinere Tipps:. Verwenden Sie lange statt Lon, statt Integer int und Getter/Setter-Methoden zur Verfügung stellen) – volley