Entwurfsmustergenerator

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Entwurfsmustergenerator

Beitrag von ewx (Top Expert / 4782 / 294 / 628 ) »
Noch Mal was zu Entwurfsmustern:
Ich könnte mir vorstellen, dass man für Entwurfsmuster eine Art Wizard entwerfen könnte, der einen durch die Anlage der Grundobjekte führt und diese automatisch anlegt.
Ein Singleton ist ja schnell gemacht, aber sobald ein Controller, ein Erbauer, Interfaces etc. dazu kommen, dann wird es schnell kompliziert.

Ich stelle mir das jedoch sehr interessant und hilfreich vor.

Wizard: Observer-Muster
Ablauf: Herzlichen Glückwunsch! Du hast dich für die Erstellung des Oberserver-Pattern entschieden.
Hierfür brauchst du die folgenden Komponenten:
- Subjekt-Interface
- Beobachter-Interface
- Klasse "konkretes Subjekt"
- 1 - n Klassen "konkrete Beobachter"

Bei der Verwendung dieses Musters empfehle ich, die Namenskonvention ZIF_OBS_ für Interfaces und ZCL_OBS_ für Klassen.
Zudem sollte ein Kürzel für dein zu erstellendes Muster auftauchen.
Wie soll dein Projekt heißen (3-8 Zeichen)? [_DEMO_]

Danke. Deine Objekte werden also mit ZCL_OBS_DEMO oder ZIF_OBS_DEMO beginnen.

Die Daten für das Subjekt stehen damit fest:
Interface ZIF_OBS_DEMO_SUBJECT
Klasse ZCL_OBS_DEMO_SUBJECT
Die folgenden Methoden werden definiert:
- add_observer
- delete_observer
- notify_observer
- set_changed

Für den Observer werden diese Objekte angelegt:
Interface ZIF_OBS_DEMO_OBSERVER
Klasse ZCL_OBS_DEMO_OBSERVER

Die Methode "update" ist obligatorisch und gehört zum Entwurfsmuster.

Welche Methoden soll das Observer-Interface besitzen?


Welche weiteren Methoden soll dein Observer-Objekt haben?
1 ANZEIGEN
2 ...
3 ...


Welche Beobachterklassen soll ich für dich anlegen (1-8 Zeichen)? Der Name der Klasse wird lauten: ZCL_OBS_DEMO_OBERSVER_<Name>
Name 1. Objekt:
Name 2. Objekt: ...


uswusf.

Vorher wäre natürlich noch eine ausgiebige Beschreibung sinnvoll, mit Beispielen wofür man das gebrauchen kann.

Ich habe sowas ja gerne im SAP-System selbst, könnte mir aber auch eine Web-Anwendung vorstellen, die ein SAPlink-Nugget erzeugt.

Es wäre wahrscheinlich am einfachsten, wenn man ein funktionierendes und ausprogrammiertes Klasse-Template im SAP-System hat und der Wizard dann weiß, was er fragen muss und die meisten Objekte dann nur noch kopiert werden.

Was meint ihr?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Entwurfsmustergenerator

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Sag bescheid, wenns fertig ist ;)

Nein, ernsthaft: Nach und nach werden die Unternehmen eher auf Eclipse setzen, dann kommst du mit einem SE80-Wizard nicht weit.... Und nach meiner Erfahrung ist man mit Wizards auch nicht schneller als ohne. Und bei der Namensvergabe kommt in meinen Augen der Projektbezug vor das Pattern, weil das Pattern Bestandteil des Projektes ist und nicht andersrum. Hinzu kommen die unsäglichen Namensvorgaben einiger Kunden, die mal die einen, mal die anderen Präfixe vorschreiben....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Entwurfsmustergenerator

Beitrag von ewx (Top Expert / 4782 / 294 / 628 ) »
Danke für deine Rückmeldung, Ralf!
ralf.wenzel hat geschrieben:Sag bescheid, wenns fertig ist ;)
geht klar! :P
ralf.wenzel hat geschrieben:Nein, ernsthaft: Nach und nach werden die Unternehmen eher auf Eclipse setzen, dann kommst du mit einem SE80-Wizard nicht weit....
Muss ja kein SE80-Wizard sein. Die Eclipse-Umgebung kann man ja auch programmieren.
Aber im SAP selbst wäre er ganz gut aufgehoben. Es soll ja auch wie gesagt nur die Hülle erzeugt werden. Danach kannst du es ja im Tool deiner Wahl weiter beackern.
ralf.wenzel hat geschrieben:Und nach meiner Erfahrung ist man mit Wizards auch nicht schneller als ohne.
Es geht ja nicht in erster Linie um "schneller", sondern darum, dass man sich nicht jedes Mal wieder Gedanken machen muss, wie was zusammenhängt und funktioniert. Mit einem Template würde dann jeder Anfänger ein Entwurfsmuster erzeugen können und sich dann damit auseinandersetzen. Er kann sich dann aber schon mal sicher sein, dass das Pattern selbst und das Zusammenspiel korrekt ist.
ralf.wenzel hat geschrieben:Und bei der Namensvergabe kommt in meinen Augen der Projektbezug vor das Pattern, weil das Pattern Bestandteil des Projektes ist und nicht andersrum. Hinzu kommen die unsäglichen Namensvorgaben einiger Kunden, die mal die einen, mal die anderen Präfixe vorschreiben....
Darüber könnte man vielleicht noch diskutieren...
Mir geht es hauptsächlich darum, dass man später leicht erkennen kann, welche Objekte zu einem Pattern gehören. Das ist nämlich IMHO eines der schwierigsten Herausforderungen bei Design Pattern: Zu dokumentieren, welche Bestandteile in einem Pattern verwendet werden.

Re: Entwurfsmustergenerator

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Hallo Enno,

da du scheinbar mehrere Fragen gleichzeitig aufwirfst versuche ich das mal der Reihe nach zu machen.

1.) Dein Vorschlag welche Interfaces Klassen du anlegst würde ich etwas weiter fassen.
- Zunächst definiere dir doch bitte ein allgemeines Interfaceconstruct:
- Ein (leeres) Top-Interface, welches sich einfach z.B. ZIF_DP_OBSERVER nennt - Das wird deine Klammer sein um allen späteren Anwendern zu zeigen, dass du gerade ein Observerpattern verwendest.
- Jetzt legst du für jede deiner Komponenten ein weiteres Interface an, welches das oben angesprochene Interface inkludiert ( also. z.B. ZIF_DP_OBSERVER_OBSERVER, ZIF_DP_OBSERVER_SUBJECT, ZIF_DP_OBSERVER_COBSERVER ( concrete observer ), ZIF_DP_OBSERVER_CSUBJECT ).
Damit hast du schon mal die Grundstruktur des Observerpatterns generiert.

Jetzt kommt es auf den Abstraktionsgrad an, welchen dein Wizard erzeugen soll. Willst du z.B. den aktuellen Status des konrekten Subjekts schon im Wizard abfragen? Oder willst du eine sehr allgemeine Referenz auf den Status nur in einem der o.a. Interfaces ablegen.
Willst du schon implementierende Klassen anlegen und was in den implementierenden Klassen willst du schon selber ausprogrammieren bzw. was willst du allgemein gültig halten.
Auf jeden Fall sollten für die spezielle Ausprägung des zu erzeugenden Patterns jeweils die korrespondierenden allgemeinen Interfaces inkludiert werden.

2.) Bisher muss sich der User bei Einstieg entscheiden, welche Komponenten er anlegen will. Bei deinem Beispiel sind aber gerade die Observerklassen evtl. noch gar nicht bekannt. Es sollte eine Möglichkeit geben mit dem Wizard zu einer speziellen Ausprägung des Observerpatterns später weitere Observer anzulegen.

3.) Du willst irgendwie kenntlich machen welche Objekte zu dem Pattern gehören. Auch hier kannst du mit (leeren) Interfaces weiter machen. Lass deinen Wizard beim Anlegen der speziellen Interfaces ein neues Interface erzeugen ( ZIF_DP_OBSERVER_0000001 ) und lass alle deine speziellen Interfaces auch dieses Interface inkludieren. Bei deinem Beispiel hätte dann z.B. das concrete subject folgende Interfaces. ZIF_DP_OBSERVER_CSUBJECT ( --> durch Interfaceinkludierung würden dann bestimmt auch ZIF_DP_OBSERVER_SUBJECT und ZIF_DP_OBSERVER in der Klasse zu finden sein ) und ZIF_DP_OBSERVER_0000001. Jetzt kannst du im Navigationsbaum bei den das Interface ZIF_DP_OBSERVER_0000001 implementierenden Interfaces/Klassen sehen, welche Objekte zu der speziellen Ausprägung des Patterns gehören. Falls du mit einer implementierenden Klasse startest würdest du hier auch Relationen finden, die nicht auf deiner Beispielimplementierung beruhen sondern alles lieber selber machen.

4.) Ad SAPLINK-Nugget: So etwas könntest du evtl. mit einer WEB-Anwendung machen - aber SAPLINK agiert sehr stark im SAP-System selber und du wirst dich da dann wohl auch bewegen müssen. Grundsätzlich halte ich SAPLINK für durchaus brauchbar für deinen Zweck - aber je nachdem was du vorhast solltest du dir evtl. einfach anschauen was die Klasse ZSAPLINK_CLASS macht ( dort die Methode, die eine Klasse in das SAP-System einbaut ) und die dort verwendeten FuBa selber nutzen um das für deinen Wizard Wesentliche zu erzeugen.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ewx

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Entwurfsmustergenerator

Beitrag von ewx (Top Expert / 4782 / 294 / 628 ) »
Hi Stefan,
Die Idee mit dem Interface finde ich super!
Danke und Gruss

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.