Zugriff auf Merkmale im Coding Thema ist als GELÖST markiert

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Zugriff auf Merkmale im Coding

Beitrag von LGiesken (ForumUser / 35 / 13 / 5 ) » 17.02.2020 15:06
Hallo Experten,

wie der Titel schon sagt habe ich eine Frage zur Verwendung von Merkmalen im Coding.

An verschiedenen Stellen im SAP haben wir aktuell User-Exits oder selbstständige Programme, welche mit verschiedenen (Material-)Merkmalen arbeiten. Die jeweiligen Merkmale sind dabei hart im Coding hinterlegt. Zurzeit läuft bei uns ein Projekt, in dessen Umfang wir die Merkmale umbenennen (z.B. von "WM0000499" auf "VM_ANZ_ACHS). Somit müssen auch sämtliche Coding-Stellen entsprechend angepasst werden.

Soweit zur Vorgeschichte. Diese Situation möchte ich dazu nutzen, die Wartbarkeit unseres Codings zu verbessern. Optimal wäre es, wenn wir unser Coding so umstellen könnten, dass die Merkmale nicht mehr hart hinterlegt sind, sondern an einer zentralen Stelle gepflegt werden können. Ich hatte hier z.B. an eine eigene Klasse gedacht, in der alle Zugriffe auf Merkmale in entsprechenden Get-/Set-Methoden zusammengefasst sind. Somit müsste man dann nur noch eine einzelne Klasse pflegen und nicht mehr das gesamte Coding durchsuchen.

Gibt es hier Leute, die in einer ähnlichen Situation stecken? Wie habt ihr den Zugriff auf Merkmale gelöst? Gibt es hier eventuell eine bessere/elegantere Lösung?

Bereits im Voraus vielen Dank für eure Vorschläge


Re: Zugriff auf Merkmale im Coding

Beitrag von jocoder (Specialist / 163 / 2 / 39 ) » 17.02.2020 15:17
Handelt es sich um Klassifizierungsmerkmale?
Dann ist die Idee mit einer globalen Klasse, die alle Merkmale als Konstanten enthält, durchaus eine gute Lösung.

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
LGiesken (19.02.2020 09:27)


Re: Zugriff auf Merkmale im Coding

Beitrag von black_adept (Top Expert / 3350 / 63 / 629 ) » 17.02.2020 16:25
Klasse gefällt mir. Allerdings sehe ich nicht wozu du die SETTER Methode brauchen könntest.
Wenn ich es machen müsste würde ich entweder pro Merkmal eine statische Read-Only-Variable ( nicht Konstante ) anlegen und dort dann die ATINN oder den Merkmalsnamen im CLASS_CONSTRUCTOR füllen, damit man dann über diese Variable im Programm drauf zugreifen kann.
Alternativ eine Customizingtabelle anlegen, die zu diversen Merkmalen jeweils den aktuell gültigen Merkmalsnamen zuordnet und dann via GETTER-Methode über das Merkmal den Namen oder die ATINN aus der Customizingtabelle ableiten. Aber auch hier wären Konstanten für die Merkmale per se ganz nett, da man über einen Verwendungsnachweis rausfindet wo die jeweiligen Merkmale dann verwendet werden, auch wenn das für eine wie von dir benannte Umstellung ohne Belang wäre.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
LGiesken (19.02.2020 09:27)

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Zugriff auf Merkmale im Coding

Beitrag von DeathAndPain (Top Expert / 1329 / 144 / 313 ) » 17.02.2020 18:38
Je nach Ansprüchen reicht vielleicht auch eine Nummer kleiner. Soweit ich das verstanden habe, stehen die Werte derzeit als Literale überall im Code. Eine programmglobale Konstante, am Anfang des Programms deklariert, kann da schon einen großen Unterschied machen, ist aber für spätere Leser einfacher nachzuvollziehen, als wenn man eine Klasse definiert und die Werte darin versteckt, so dass man als Leser einen pompösen Methodenaufruf sieht, wo einfach nur ein fester Wert gefragt ist. Hängt natürlich davon ab, in wie vielen Programmen man das braucht und wie wahrscheinlich es ist, dass sich der Wert später nochmal ändert. Werte, die sich schon mal ändern können, gehören in eine Customizingtabelle - deren SELECT-Zugriff man aber nach meiner Überzeugung auch nicht durch eine Wasserkopfklasse verschleiern muss, damit der Leser ja nicht sieht, an welcher Stelle er den Wert bei Bedarf ändern kann.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
LGiesken (19.02.2020 09:27)


Re: Zugriff auf Merkmale im Coding

Beitrag von LGiesken (ForumUser / 35 / 13 / 5 ) » 19.02.2020 09:49
Vielen Dank erstmal für die ganzen Vorschläge.
black_adept hat geschrieben:
17.02.2020 16:25
Allerdings sehe ich nicht wozu du die SETTER Methode brauchen könntest.
Die Idee hinter den Setter-Methoden war, dass man alles, was mit Merkmalen zu tun hat, zentral an einer Stelle hat. Wir müssen die Merkmale nämlich nicht nur auslesen, sondern überschreiben Sie unter Umständen auch noch. Das wäre jedoch wahrscheinlich zu viel des Guten. Die Schreibzugriffe kann man ja auch mit Gettern vernünftig aufbauen.
DeathAndPain hat geschrieben:
17.02.2020 18:38
Eine programmglobale Konstante, am Anfang des Programms deklariert, kann da schon einen großen Unterschied machen, ist aber für spätere Leser einfacher nachzuvollziehen, als wenn man eine Klasse definiert und die Werte darin versteckt, so dass man als Leser einen pompösen Methodenaufruf sieht, wo einfach nur ein fester Wert gefragt ist.
Wir greifen leider an allen möglichen Stellen auf Merkmale zu. Das wären nicht nur Programme, sondern auch Methoden, User-Exits und Enhancement-Points. Durch programmlokale Konstanten könnte man das jeweilige Coding zwar leichter pflegen. Jedoch müsste man dann immer noch die entsprechenden FuBas usw. finden und einzeln anpassen. Da wir keine vernünftige Dokumentation unseres Codings haben, bestünde hier dann natürlich die Gefahr, dass man etwas übersieht.

Ich denke, dass ich das ganze über eine Klasse löse, in der ich entsprechende Konstanten für die jeweiligen Merkmale anlege.

Re: Zugriff auf Merkmale im Coding

Beitrag von jocoder (Specialist / 163 / 2 / 39 ) » 19.02.2020 11:50
Die Idee hinter den Setter-Methoden war, dass man alles, was mit Merkmalen zu tun hat, zentral an einer Stelle hat. Wir müssen die Merkmale nämlich nicht nur auslesen, sondern überschreiben Sie unter Umständen auch noch.
GETTER und SETTER-Methoden sollten grundsätzlich nicht gemischt werden (Überaschungsarme Programmierung). Wenn ich eine GETTER-Methode aufrufe, erwarte ich nicht, dass sie irgendwelche Modifikationen vornimmt.
Wenn ich es richtig verstanden habe, geben deine GETTER-Methoden die Merkmalswerte zurück und die SETTER-Methoden überschreiben Merkmalswerte? Dann würde ich die Unterteilung so lassen.

Seite 1 von 1