Es gibt ein großes Interesse an Service-orientierte Architektur (SOA) in meinem Unternehmen vor kurzem. Immer wenn ich versuche, mir vorzustellen, wie wir sie nutzen könnten, stoße ich auf eine mentale Blockade. Grob gesagt:
-
Die Objektorientierung besagt: "Daten und Methoden, die Daten manipulieren (Geschäftsprozesse), zusammenhalten";
-
Die Serviceorientierung besagt: "Behalte den Geschäftsprozess im Dienst und leite Daten an ihn weiter".
Frühere Versuche, eine SOA zu entwickeln, endeten mit der Umwandlung von objektorientiertem Code in Datenstrukturen und separaten Prozeduren (Diensten), die diese manipulieren, was ein Rückschritt zu sein scheint.
Meine Frage ist: Welche Muster, Architekturen, Strategien usw. ermöglichen das Zusammenspiel von SOA und OO?
Editar: Die Antworten "OO für Interna, SOA für Systemgrenzen" sind großartig und nützlich, aber das ist nicht ganz das, worauf ich hinauswollte.
Angenommen, Sie haben eine Account
Objekt, das einen Geschäftsvorgang namens Merge
das es mit einem anderen Konto kombiniert. Ein typischer OO-Ansatz würde wie folgt aussehen:
Account mainAccount = database.loadAccount(mainId);
Account lesserAccount = database.loadAccount(lesserId);
mainAccount.mergeWith(lesserAccount);
mainAccount.save();
lesserAccount.delete();
Das SOA-Äquivalent, das ich gesehen habe, sieht hingegen so aus:
Account mainAccount = accountService.loadAccount(mainId);
Account lesserAccount = accountService.loadAccount(lesserId);
accountService.merge(mainAccount, lesserAccount);
// save and delete handled by the service
Im OO-Fall sind die Geschäftslogik (und das Bewusstsein für Entitäten dank eines ActiveRecord-Musters) in die Account
Klasse. Im Fall der SOA wird die Account
Objekt ist eigentlich nur eine Struktur, da alle Geschäftsregeln im Dienst verankert sind.
Kann ich reichhaltige, funktionale Klassen und wiederverwendbare Dienste gleichzeitig haben?
7 Stimmen
Hallo, danke für den tollen Beitrag! Das verwirrt mich in diesen Tagen. Haben Sie weitere Schlussfolgerungen 5 Jahre später? Das würde mich wirklich interessieren. - Tony