Der Ort, an dem ich arbeite, versucht, einige Grundregeln zu etablieren, und die Debatte, die wir derzeit führen, sind lokale Bibliotheken und Webservices zur Wiederverwendung von Code. Web-Services scheinen in den meisten Unternehmen die beliebteste Wahl zu sein, und genau darauf tendieren die meisten Entwickler hier.
Ich kann einfach nicht erkennen, wie Sie Webdienste für eine ernsthafte Arbeit effektiv nutzen können. Wie kann ich mehrere Serviceabrufe sicher ausführen, wenn ich keine Transaktion verwenden kann?
Angenommen, ich habe einen Cron-Job, der Kunden aus unserer Datenbank abruft, die eine bestimmte Bedingung erfüllen, über die sie benachrichtigt werden müssen. Sie erhalten ein Fax, eine E-Mail und ein Ticket, um das Problem intern zu verfolgen. Das sind 3 verschiedene Serviceaufrufe, die für jeden Kunden in einer for-Schleife stattfinden würden.
Wenn dort irgendwo ein Fehler auftritt, wird möglicherweise ein Fax und eine E-Mail an den Kunden gesendet, aber kein Ticket erstellt. Oder schlimmer noch, dieser Cron-Job kann einen Fehler enthalten, der dazu führt, dass er jedes Mal zum gleichen Zeitpunkt fehlschlägt und denselben Kunden wiederholt per E-Mail benachrichtigt. Wenn die Bibliotheken alle lokal wären, könnte alles einfach in eine Transaktion eingebunden werden, und all das würde nicht passieren. In diesem Beispiel verwenden wir jedoch Webdienste.
Beachten Sie, dass die E-Mail- und Faxmethoden die Daten tatsächlich in datenbankgestützte Warteschlangentabellen einfügen, die wiederum von einem separaten Cron-Job-Prozess verarbeitet werden. So können die Aufrufe der Dienstmethoden "E-Mail senden" und "Fax senden" bei Bedarf nebenwirkungsfrei abgebrochen werden.
Eine Option besteht darin, diesen gesamten Codebaustein in den Webdienst selbst einzufügen, sodass der Webdienst selbst die Methoden zum Erstellen von E-Mails, Faxen und Tickets in einer Transaktion aufruft. Aber dann erstellen wir eine Webservice-Methode nur für die Verwendung einer Transaktion. Es gibt keinen gültigen Grund, warum wir diese Methode jemals von irgendwo anders als in diesem einen Cron-Skript aufrufen müssten.
Wie würden Sie generell mit dieser Methode umgehen?