Als erstes möchte ich in diesem Post folgendes vorstellen:
Induktion. Man hat einen Induktionsanfang und einen Induktionsschritt.
Heißt sollte etwas im Basisfall gelten, dann sollte es auch für kompliziertere/komplexere Erweiterungen (Induktionsschritte) gelten.
Auf dieses Prinzip werde ich später nochmal zurückkommen
Was meinst du mit Querfront?
Naja "Vebrechen an der Menschheit", kann ich aus diesem Artikel nicht ableiten, weil ich ihn vorher noch gar nicht gekannt habe^^
Diese Ableitung habe ich selbst getroffen, aber nicht auf der Basis die du wahrscheinlich denkst.
Ich werde es im folgenden weiter ausführen.....
Nachdem ich den Text von Martin Fowler durchgelesen habe, kam ich zu dem Entschluss, dass wir (ich und Fowler) uns in allen Punkten bis auf einen gleicher Meinung sind!
Es ist genau das, was ich oben gesagt habe, dass entity-classes (also klassen ohne verhalten) und service-classes (zustand-lose klassen mit auschließlichlichem verhalten) dem prinzip der prozeduralen programmierung folgt!
Auch der Meinung bin ich, dass es eigentlich Schwachsinn ist Klassen, ORM, etc zu verwenden, wenn es im Endeffekt eh wieder prozedural ist!
Ok die Kosten auf sich zu nehmen, des lohnt sich erst dann, wenn man wirklich von den OO-Techniken profitiert. Eine Profitierung ist ausgeschlossen, wenn Verhalten und Daten getrennt werden!
Wie diese Profitierung aussieht, das könnt ihr mir gerne verraten!^^
Aus dem Text von Fowler wird außerdem klar, dass es im Allgemeinen der Service Klassen (Service-Layer) dazu da ist zwischen unterschiedlichen Applikationen zu kommunizieren
Meiner Meinung nach auch noch um Ergebnise/Anfragen anzupassen (adaptieren)
Also bin ich der Meinung dass es sich hier wohl nur um einen weiteren Routing/Adapter-Layer handelt und nicht mehr!
Fowler weicht aber den Service-Layer noch ein bisschen weiter auf:
Hier sagt er, wenn man zwischen den Zeilen liest, dass man aufjedenfall Domain-Objekte mit Verhalten verwenden soll, und aber ein zusätzlicher prozeduraler Service-Layer das ganze gut ergänzt.
Ich denke, dass das nicht ganz richtig ist!
Gemäß oben genannten Induktionsprinzip und Fowlers Aussage, dass man profitiert, wenn man nach oo-konzepten programmiert, dann gilt das auch für höherwertigers, also auf gut deutsch, man kann nur vollständig dann davon profitieren, wenn auch wirklich alles vollständig gemäß oo-konzepten programmiert worden ist. Und dazu gehört NICHT ein aufgeweichtes Service-Layer prinzip, dass teilweise prozedurale bzw. nicht oo-prinzipien folgende Programmierparadigmas folgt
Von daher ist ein Service-Layer meiner Meinung nach für Routing/Adaption gut und gültig aber auch nicht für mehr!
Hier stellt sich mir dann die Frage ob es überhaupt sinn macht in einer MVC-Architektur neben dem Controller im Model einen weiteren Routing/Adapter Layer einzuführen, aber das ist eine andere Frage.
Zusammenfassend kann man sagen, dass OO nur dann ein Verbrechen an der Menschheit ist, wenn man es sinnlos einsetzt, um dann eh doch wieder prozedural aber mit Mehrkosten zu arbeiten.
Und um diese Sinnlosigkeit geht es jetzt:
Was zeichnet OO aus?
Was sind die "benefits", von denen Fowler spricht?
Dann sei doch so lieb und erklär es mir
Wäre super, wenn mir das jemand erklären könnte.
Negativeindrücke von oo habe ich im folgenden für euch zusammengefasst:
Vor vielen vielen vielen Jahren hab ich mal diesen Text hier verfasst: http://www.php.de/forum/webentwicklu...hwachsinn-oder
So alles, was ich hier behauptet habe, würde ich zwar nicht mehr unterstreichen....
Das war auch noch vor meiner Studierenden-Zeit und von daher konnte ich das ganze noch nicht so mit Fachbegriffen ausmalen
Hauptsächlich kritisiere ich hier die Datenstrukturkopplung und Designentscheidungen
1. Datenstrukturkopplung:
Wenn ich an ein anderes Objekt ein Datenobjekt/typ übergebe und dieses nicht alle Daten (bezogen auf den Typ) davon braucht, dann hab ich ne unnötige Datenstrukturkopplung
Selbiges gilt meiner Meinung nach genauso, wenn ich eine Klasse designe und die enthaltenenen Methoden nicht jeweils IMMMER alle Daten abdecken
heißt jede Methode sollte, wenn man eine unnötige Datenstrukturkopplung vermeiden möchte, immer alle Membervariablen verwenden.
Außerdem wird so auch das Single-Responsibility-Prinzip eingehalten.
Da hilft meiner Meinung nach auch nicht wenn man nach dem Prinzip der informationellen Kohesionsart vorgeht, wenn danach immer noch eine interne unnötige Datenstrukturkopplung vorliegt.
Naja bricht man das ganze herunter auf eine Prozedur, dann ist es ja so, dass diese alle Daten bzw. Parameter von denen die Prozedur abhängt schön innerhalb verwendet (=> optimale Kopplung)
Unterschied zu Objekten, ne Prozedur kann keinen zustand abspeichern. ok dann können wir pointer/referenzen nehmen oder aber klassen mit allerhöchstens einer Methode nehmen, wobei das ja wieder an haufen overhead erzeugen würde
Das wäre ein pro für ne loose Funktion und ein Contra für das Verwenden einer Klasse
2. Design-entscheidung:
Naja ist eher weniger eine Designentscheidung sondern viel mehr auch wieder ein Grundsatzproblem
In dem Text frage ich mich, wo das Verhalten ban_user($other_user_or_admin) hin soll
In den User? In den admin?
Naja um dieses Dilema aufzuheben baut man ne dritte einheit, bspw. BanManager oder BanService (ist nur vom Namen anders^^)
und dann die Methode ban_user($from_admin,$user)
aber wie der zweite Namen schon verlauten lässt, ist dies ein zustandsloser Service (also wieder prozedural)
Und ich sehe für diesen Use-Case auch kein weiteres Verhalten, welches bei User oder Admin nötig wäre.
Um das ganze allgemeiner auszudrücken:
ich hab nen 1 Dimensionalen Fall. Methode arbeitet nur auf eigenen Daten vom Objekt (nicht aber auf weiteren oder von weiteren abhängigen Daten eines weiteren Objekts, welches via parameter übergeben worden ist) => Das finde ich soweit eigentlich ok^^ und korrekt (eventuell kann man dies auch schon als oo-programmierung bezeichnen)
2D-Fall: Objekt arbeitet auf eigenen Daten und auf denen von einem übergebenen Objekt
nD-Fall Objekt arbeitet auf eigenen Daten und auf denen von (n-1) übergebenen Objekten
Und hier haben wir schon unser Problem, weil eigentlich ist dies nichts anderes als Prozedural, abgesehen vom 1D-Fall
Um sich nacher net noch doofe Gedanken zu machen/ doofe Designentscheidungen überlegen zu müssen. packt man hier den Algorithmus am besten ein ein "drittes bzw. n+1tes" Objekt, also ein Art Service (Ist aber wie gesagt prozedural und nicht oo und schon gar nicht Fowlers Geschmack^^)
Der 1D Fall ist meiner Meinung nach korrekt oo, aber gemäß Induktionsprinzip nicht für alle n+1te Fälle -> so kann man eigentlich auch gleich den 1D-Fall vergessen
3. Algorithmus (nicht in dem beitrag erwähnt):
wenn ich prozedural einen Algorithmus entwerfe bzw. einen Use-Case umsetzte dann sieht das bspw. folgendermaßen aus
Funktion(parameter)
{
Anweisung 1
Anweisung 2
Sub-Funktionsaufruf (eventuell parameter durchreichen oder zwischenergebnisse durchreichen)
Sub-funktionsaufruf(....)
...
return Ergebnis bzw.
//wenn transaktionale Sicherheit gegeben sein soll
Ändere Zustände in Daten, andernfalls eventuell schon als Nebeneffekt oben bei den Anweisungen bzw. Sub-Funktionsaufrufen
return result
}
Der Vorteil bei dieser Algorithmusdefinition ist, dass man ganz leicht transaktionen bauen kann, also erst mal alles abchchecken dann Änderungen setzen.
Außerdem lassen sich Seiteneffektfreie Funktionen (also Funktionen die keinen internen Zustände ändern) sehr nice parallelisieren (nebenläufig machen).
kann man es eigentlich auch schon als oo durchgehen lassen, wenn bspw. diese Sub-funktionsaufrufe 1D-Fälle sind, die ich oben genannt habe?
Und ein dritter Vorteil ist die "Rohr-Sicht".
Ich hab einen Strang (sequentiell definiertern code) und rufe von diesem aus Subfunktionen auf.
Der Vorteil besteht darin, dass ich Ergebnisse in weiteren Aufrufen von Subfunktionen vom Hauptstrang aus weitergeben kann.
Beim objektorientiereten hab ich nur einen linearen Strang?!?, oder eher einen linearen Strang?!?
prozedural:
-> Aufruf
->Aufruf -> Aufruf
->Aufruf
->Aufruf->Aufruf->Aufruf->Aufruf
->Aufruf
->Aufruf
(Hauptstrang ist auf der Vertikalen)
oo stelle ich mir eher so vor, also nur die X-Achse, die Y-Achsenkomponente fällt einfach weg
also bspw. nur sowas: ->Aufruf->Aufruf->Aufruf->Aufruf
eventuell liege ich da auch falsch?
Also einiges unflexibler
Beim prozeduralen habe ich halt eher ne globale Sicht und bin damit auch flexibler und kann meinen Algorithmus freier entwerfen
Also das mit den Strängen und Aufrufen, da bin ich mir natürlich nicht ganz sicher ob das so für das oo zutrifft (ich meine jetzt auch nicht nur die Funktionsaufrufe, sondern auch die Ergebnisverarbeitung bzw. die Sichtweise im Allgemeinen)
Da die Daten ja zusammengefasst mit dem Verhalten sind, ist ein Ausbruch aus dieser Sicht eigentlich nicht möglich, zumindest wenn man legitim oo sein möchte.
Außerdem, da die wichtige Y-komponente wegfällt, ist man einigen Einschränkungen unterlegen und hat damit flexibilitätseinbußen.
Aber überzeugt mich gerne eines besseren
Kurz noch ein allgemeiner Einschub zu was generellerem:
Wie seht ihr folgendes: Wäre es eigentlich besser, wenn man den return-flow nicht nur auf Grad 2 beschränken würde?
Aktuell ist es ja so, dass ein return type1 und ein throw type2 möglich ist
wäre es aber nicht sogar noch sinnvoller weitere return-mechanismen, am besten für den den programmierer variable N return mechanisem erlauben würde. Um nicht irgendwelche Statusflags auslesen zu müssen und hiernach zu entscheiden was passiert. Für den Error-Flag wurde ja schon throw eingeführt.... aber es gibt ja noch weitaus mehr flags die nicht ins error-handling fallen
wie seht ihr das?, ein ausbau des return-flows wäre doch nice oder?
Das bis jetzt sind so meine Allgemeinen negativen Eindrücke die ich von oo habe
Eventuell kann ja jemand diese Eindrücke widerlegen. Oder aber diese sind gar nicht so falsch, aber es überwiegen doch irgendwelche anderene "benefits" von oo. vlt. könnte mir jemand diese aufzeigen.
Mir gehts da dann doch hauptsächlich um den Algorithmusentwurf.
Weil ein relationales DB-Design bekommt man ja leicht hin. Auch dieses in eine oo Struktur umzumünzen funktioniert ja relativ leicht. Aber welche Klassen (Services oder auch nicht Services) ich dann weiterhin hinzuzufügen habe, wo ich welches Verhalten definiere, wie ich welches Verhalten definiere, eventuell kann mir ja hier jemand tipps oder Beispiele geben
Wäre euch sehr dankbar dafür
Fortsetzung von "Querfront" gegen OOP folgt....
Nein scherz^^, wie gesagt ich würde mich gerne über andere Ansichten freuen
bin halt prozedural/relational aufgewachsen und versteh halt vor allem die Flexibiltätseinbußen/Leistungseinbußen von oo nicht so wirklich
Also was die wirklichen benefits sind.
lg knotenpunkt
Induktion. Man hat einen Induktionsanfang und einen Induktionsschritt.
Heißt sollte etwas im Basisfall gelten, dann sollte es auch für kompliziertere/komplexere Erweiterungen (Induktionsschritte) gelten.
Auf dieses Prinzip werde ich später nochmal zurückkommen
Eine Primärquelle zu Martin Fowler (und der von knotenpunkt formulierten „Rule 6“) in #1 ist dieser Artikel aus 2003: AnemicDomainModel. Darin finden sich entsprechende Aussagen (die man aber durchaus im Kontext betrachten darf), aber ich sage dazu gezielt nicht mehr, weil knotenpunkt eine ziemliche Querfront aufmacht, indem er – auch aus diesem Artikel – ableitet, dass OOP ein „Verbrechen an der Menschheit“ sei
Naja "Vebrechen an der Menschheit", kann ich aus diesem Artikel nicht ableiten, weil ich ihn vorher noch gar nicht gekannt habe^^
Diese Ableitung habe ich selbst getroffen, aber nicht auf der Basis die du wahrscheinlich denkst.
Ich werde es im folgenden weiter ausführen.....
Nachdem ich den Text von Martin Fowler durchgelesen habe, kam ich zu dem Entschluss, dass wir (ich und Fowler) uns in allen Punkten bis auf einen gleicher Meinung sind!
The anemic domain model is really just a procedural style design
Now object-oriented purism is all very well, but I realize that I need more fundamental arguments against this anemia. In essence the problem with anemic domain models is that they incur all of the costs of a domain model, without yielding any of the benefits. The primary cost is the awkwardness of mapping to a database, which typically results in a whole layer of O/R mapping. This is worthwhile iff you use the powerful OO techniques to organize complex logic. By pulling all the behavior out into services, however, you essentially end up with Transaction Scripts, and thus lose the advantages that the domain model can bring. As I discussed in P of EAA, Domain Models aren't always the best tool.
Ok die Kosten auf sich zu nehmen, des lohnt sich erst dann, wenn man wirklich von den OO-Techniken profitiert. Eine Profitierung ist ausgeschlossen, wenn Verhalten und Daten getrennt werden!
Wie diese Profitierung aussieht, das könnt ihr mir gerne verraten!^^
Aus dem Text von Fowler wird außerdem klar, dass es im Allgemeinen der Service Klassen (Service-Layer) dazu da ist zwischen unterschiedlichen Applikationen zu kommunizieren
Meiner Meinung nach auch noch um Ergebnise/Anfragen anzupassen (adaptieren)
Also bin ich der Meinung dass es sich hier wohl nur um einen weiteren Routing/Adapter-Layer handelt und nicht mehr!
Fowler weicht aber den Service-Layer noch ein bisschen weiter auf:
One source of confusion in all this is that many OO experts do recommend putting a layer of procedural services on top of a domain model, to form a Service Layer. But this isn't an argument to make the domain model void of behavior, indeed service layer advocates use a service layer in conjunction with a behaviorally rich domain mode
Ich denke, dass das nicht ganz richtig ist!
Gemäß oben genannten Induktionsprinzip und Fowlers Aussage, dass man profitiert, wenn man nach oo-konzepten programmiert, dann gilt das auch für höherwertigers, also auf gut deutsch, man kann nur vollständig dann davon profitieren, wenn auch wirklich alles vollständig gemäß oo-konzepten programmiert worden ist. Und dazu gehört NICHT ein aufgeweichtes Service-Layer prinzip, dass teilweise prozedurale bzw. nicht oo-prinzipien folgende Programmierparadigmas folgt
Von daher ist ein Service-Layer meiner Meinung nach für Routing/Adaption gut und gültig aber auch nicht für mehr!
Hier stellt sich mir dann die Frage ob es überhaupt sinn macht in einer MVC-Architektur neben dem Controller im Model einen weiteren Routing/Adapter Layer einzuführen, aber das ist eine andere Frage.
Zusammenfassend kann man sagen, dass OO nur dann ein Verbrechen an der Menschheit ist, wenn man es sinnlos einsetzt, um dann eh doch wieder prozedural aber mit Mehrkosten zu arbeiten.
Und um diese Sinnlosigkeit geht es jetzt:
Was zeichnet OO aus?
Was sind die "benefits", von denen Fowler spricht?
Jedoch muss ich auch feststellen, dass der Autor OOP noch nicht verstanden hat
Wäre super, wenn mir das jemand erklären könnte.
Negativeindrücke von oo habe ich im folgenden für euch zusammengefasst:
Vor vielen vielen vielen Jahren hab ich mal diesen Text hier verfasst: http://www.php.de/forum/webentwicklu...hwachsinn-oder
So alles, was ich hier behauptet habe, würde ich zwar nicht mehr unterstreichen....
Das war auch noch vor meiner Studierenden-Zeit und von daher konnte ich das ganze noch nicht so mit Fachbegriffen ausmalen
Hauptsächlich kritisiere ich hier die Datenstrukturkopplung und Designentscheidungen
1. Datenstrukturkopplung:
Wenn ich an ein anderes Objekt ein Datenobjekt/typ übergebe und dieses nicht alle Daten (bezogen auf den Typ) davon braucht, dann hab ich ne unnötige Datenstrukturkopplung
Selbiges gilt meiner Meinung nach genauso, wenn ich eine Klasse designe und die enthaltenenen Methoden nicht jeweils IMMMER alle Daten abdecken
heißt jede Methode sollte, wenn man eine unnötige Datenstrukturkopplung vermeiden möchte, immer alle Membervariablen verwenden.
Außerdem wird so auch das Single-Responsibility-Prinzip eingehalten.
Da hilft meiner Meinung nach auch nicht wenn man nach dem Prinzip der informationellen Kohesionsart vorgeht, wenn danach immer noch eine interne unnötige Datenstrukturkopplung vorliegt.
Naja bricht man das ganze herunter auf eine Prozedur, dann ist es ja so, dass diese alle Daten bzw. Parameter von denen die Prozedur abhängt schön innerhalb verwendet (=> optimale Kopplung)
Unterschied zu Objekten, ne Prozedur kann keinen zustand abspeichern. ok dann können wir pointer/referenzen nehmen oder aber klassen mit allerhöchstens einer Methode nehmen, wobei das ja wieder an haufen overhead erzeugen würde
Das wäre ein pro für ne loose Funktion und ein Contra für das Verwenden einer Klasse
2. Design-entscheidung:
Naja ist eher weniger eine Designentscheidung sondern viel mehr auch wieder ein Grundsatzproblem
In dem Text frage ich mich, wo das Verhalten ban_user($other_user_or_admin) hin soll
In den User? In den admin?
Naja um dieses Dilema aufzuheben baut man ne dritte einheit, bspw. BanManager oder BanService (ist nur vom Namen anders^^)
und dann die Methode ban_user($from_admin,$user)
aber wie der zweite Namen schon verlauten lässt, ist dies ein zustandsloser Service (also wieder prozedural)
Und ich sehe für diesen Use-Case auch kein weiteres Verhalten, welches bei User oder Admin nötig wäre.
Um das ganze allgemeiner auszudrücken:
ich hab nen 1 Dimensionalen Fall. Methode arbeitet nur auf eigenen Daten vom Objekt (nicht aber auf weiteren oder von weiteren abhängigen Daten eines weiteren Objekts, welches via parameter übergeben worden ist) => Das finde ich soweit eigentlich ok^^ und korrekt (eventuell kann man dies auch schon als oo-programmierung bezeichnen)
2D-Fall: Objekt arbeitet auf eigenen Daten und auf denen von einem übergebenen Objekt
nD-Fall Objekt arbeitet auf eigenen Daten und auf denen von (n-1) übergebenen Objekten
Und hier haben wir schon unser Problem, weil eigentlich ist dies nichts anderes als Prozedural, abgesehen vom 1D-Fall
Um sich nacher net noch doofe Gedanken zu machen/ doofe Designentscheidungen überlegen zu müssen. packt man hier den Algorithmus am besten ein ein "drittes bzw. n+1tes" Objekt, also ein Art Service (Ist aber wie gesagt prozedural und nicht oo und schon gar nicht Fowlers Geschmack^^)
Der 1D Fall ist meiner Meinung nach korrekt oo, aber gemäß Induktionsprinzip nicht für alle n+1te Fälle -> so kann man eigentlich auch gleich den 1D-Fall vergessen
3. Algorithmus (nicht in dem beitrag erwähnt):
wenn ich prozedural einen Algorithmus entwerfe bzw. einen Use-Case umsetzte dann sieht das bspw. folgendermaßen aus
Funktion(parameter)
{
Anweisung 1
Anweisung 2
Sub-Funktionsaufruf (eventuell parameter durchreichen oder zwischenergebnisse durchreichen)
Sub-funktionsaufruf(....)
...
return Ergebnis bzw.
//wenn transaktionale Sicherheit gegeben sein soll
Ändere Zustände in Daten, andernfalls eventuell schon als Nebeneffekt oben bei den Anweisungen bzw. Sub-Funktionsaufrufen
return result
}
Der Vorteil bei dieser Algorithmusdefinition ist, dass man ganz leicht transaktionen bauen kann, also erst mal alles abchchecken dann Änderungen setzen.
Außerdem lassen sich Seiteneffektfreie Funktionen (also Funktionen die keinen internen Zustände ändern) sehr nice parallelisieren (nebenläufig machen).
kann man es eigentlich auch schon als oo durchgehen lassen, wenn bspw. diese Sub-funktionsaufrufe 1D-Fälle sind, die ich oben genannt habe?
Und ein dritter Vorteil ist die "Rohr-Sicht".
Ich hab einen Strang (sequentiell definiertern code) und rufe von diesem aus Subfunktionen auf.
Der Vorteil besteht darin, dass ich Ergebnisse in weiteren Aufrufen von Subfunktionen vom Hauptstrang aus weitergeben kann.
Beim objektorientiereten hab ich nur einen linearen Strang?!?, oder eher einen linearen Strang?!?
prozedural:
-> Aufruf
->Aufruf -> Aufruf
->Aufruf
->Aufruf->Aufruf->Aufruf->Aufruf
->Aufruf
->Aufruf
(Hauptstrang ist auf der Vertikalen)
oo stelle ich mir eher so vor, also nur die X-Achse, die Y-Achsenkomponente fällt einfach weg
also bspw. nur sowas: ->Aufruf->Aufruf->Aufruf->Aufruf
eventuell liege ich da auch falsch?
Also einiges unflexibler
Beim prozeduralen habe ich halt eher ne globale Sicht und bin damit auch flexibler und kann meinen Algorithmus freier entwerfen
Also das mit den Strängen und Aufrufen, da bin ich mir natürlich nicht ganz sicher ob das so für das oo zutrifft (ich meine jetzt auch nicht nur die Funktionsaufrufe, sondern auch die Ergebnisverarbeitung bzw. die Sichtweise im Allgemeinen)
Da die Daten ja zusammengefasst mit dem Verhalten sind, ist ein Ausbruch aus dieser Sicht eigentlich nicht möglich, zumindest wenn man legitim oo sein möchte.
Außerdem, da die wichtige Y-komponente wegfällt, ist man einigen Einschränkungen unterlegen und hat damit flexibilitätseinbußen.
Aber überzeugt mich gerne eines besseren
Kurz noch ein allgemeiner Einschub zu was generellerem:
Wie seht ihr folgendes: Wäre es eigentlich besser, wenn man den return-flow nicht nur auf Grad 2 beschränken würde?
Aktuell ist es ja so, dass ein return type1 und ein throw type2 möglich ist
wäre es aber nicht sogar noch sinnvoller weitere return-mechanismen, am besten für den den programmierer variable N return mechanisem erlauben würde. Um nicht irgendwelche Statusflags auslesen zu müssen und hiernach zu entscheiden was passiert. Für den Error-Flag wurde ja schon throw eingeführt.... aber es gibt ja noch weitaus mehr flags die nicht ins error-handling fallen
wie seht ihr das?, ein ausbau des return-flows wäre doch nice oder?
Das bis jetzt sind so meine Allgemeinen negativen Eindrücke die ich von oo habe
Eventuell kann ja jemand diese Eindrücke widerlegen. Oder aber diese sind gar nicht so falsch, aber es überwiegen doch irgendwelche anderene "benefits" von oo. vlt. könnte mir jemand diese aufzeigen.
Mir gehts da dann doch hauptsächlich um den Algorithmusentwurf.
Weil ein relationales DB-Design bekommt man ja leicht hin. Auch dieses in eine oo Struktur umzumünzen funktioniert ja relativ leicht. Aber welche Klassen (Services oder auch nicht Services) ich dann weiterhin hinzuzufügen habe, wo ich welches Verhalten definiere, wie ich welches Verhalten definiere, eventuell kann mir ja hier jemand tipps oder Beispiele geben
Wäre euch sehr dankbar dafür
Fortsetzung von "Querfront" gegen OOP folgt....
Nein scherz^^, wie gesagt ich würde mich gerne über andere Ansichten freuen
bin halt prozedural/relational aufgewachsen und versteh halt vor allem die Flexibiltätseinbußen/Leistungseinbußen von oo nicht so wirklich
Also was die wirklichen benefits sind.
lg knotenpunkt
Kommentar