ABAP Tools - Arbeiten mit Eclipse (Refactoring)
Im heutigen Artikel geht es um das Arbeiten mit Eclipse und wie du effizient und schnell dein Refactoring am Quellcode durchführen kannst
Inhaltsverzeichnis
Ein gutes Entwicklungstool erkennt man unter anderem an der Geschwinidgkeit in der man neuen Quellcode umsetzen kann und wie weit dir das Tool beim Beschaffen von Informationen behilflich ist. Aber ebenso die Aussagekraft der Fehler und die Anbindung weiterer Plugins ist dabei sehr wichtig.
Im heutigen Artikel wollen wir uns einmal die Umsetzungszeit etwas genauer anschauen und wie euch Eclipse dabei unterstützen kann.
Vorbereitung
Beim Refactoring geht es um die Anpassung von bestehendem Quellcode. Methoden verkleinern oder aufsplitten, Umbenennung von Variablen oder Methoden, alles gehört zum Refactoring von Quellcode. Dabei unterstützt dich Eclipse auf verschiedene Weisen.
Für unser Beispiel verwenden wir eine kleine Klasse mit der Implementierung des Classrun-Interfaces. Dieses Beispiel werden wir nun mit den verschiedenen Methoden des Refactoring bearbeiten.
CLASS zcl_bs_test_refactoring DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_bs_test_refactoring IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA:
ld_identifier TYPE zbs_test_data-identifier.
ld_identifier = 'REFACTORING'.
SELECT SINGLE *
FROM zbs_test_data
WHERE identifier = @ld_identifier
INTO @DATA(ls_data).
out->write( 'The found data:' ).
out->write( ls_data ).
ENDMETHOD.
ENDCLASS.
Methode extrahieren
Der SELECT soll in eine neue Methode ausgelagert werden, damit wir ihn auch an anderen Stellen verwenden können. Normalerweise ist es auch üblich die Datenbankzugriffe in ein separates Objekt auszulagern, in diesem Beispiel behalten wir alles in einer Klasse.
Markiere dazu den kompletten SELECT und drück STRG + 1 um die den Quick-Fix anzeigen zu lassen. Hier kannst du den Eintrag "Extract method" auswählen.
Nach der Auslagerung wird die neue Methode "new_method" angelegt und der Select befindet sich nun in der Methode. Wie du bestimmt festgestellt hast, wurden die entsprechenden Schnittstellen zur Methode automatisch aus dem Kontext generiert. Du kannst den Namen der Methode noch ändern oder einfach nur mit ENTER bestätigen. In diesem Fall passen wir noch den ausgetauschten Aufruf der Methode durch eine Inline Deklaration aus, da eine explizite Definition hier nicht benötigt wird.
" After refactoring
DATA ls_data TYPE zbs_test_data.
ls_data = new_method( ld_identifier ).
" After adjustment
DATA(ls_data) = new_method( ld_identifier ).
Sichtbarkeit ändern
Eine Methode wird zusätzlich als öffentliche Methode benötigt, weil auch andere Klassen sie nutzen soll. Dazu musste du einfach auf die Methodendefinition gehen und kannst wieder über den Quick-Fix (STRG + 1) arbeiten. Über "Make new_method public" kannst du dann die Methode direkt als Public einstellen.
Umbenennen
Der Methodenname ist mittlerweile nicht mehr der Richtige für unsere Bedürfnisse, deshalb kannst du diesen sehr einfach Umbenennen, obwohl es jetzt schon mindestens drei Stellen für die Verwendung gibt. Dazu auf den Namen der Methode gehen, egal ob ein Aufruf oder bei der Definition, und über Quick-Fix oder direkt Umbenennen (SHIFT + ALT + R) das Rename Popup aufrufen.
Nach der Aktion wirst du feststellen, dass sich die Verwendung im Coding überall geändert hat. Das Umbenennen wird immer vollständig und konsistent umgesetzt, du brauchst also keine Angst zu haben, dass sich später der Code nicht mehr aktivieren lässt.
Hinweis: Wenn du Klasse oder Methoden auch in anderen Programmen verwendet werden, dann werden diese ebenfalls aktualisiert und geändert. Ihr solltet also aufpassen, damit ihr nicht zu viel auf einmal ändert. Die Aufzeichnung der geänderten Objekte erfolgt aber ganz Normal.
Konstanten anlegen
Wie dir sicherlich aufgefallen ist, scheinen wir im Quellcode noch eine Konstante zu haben. Damit diese nicht hartcodiert im Quelltext steht, werden wir diese als lokale Konstante in der Klasse anlegen. Dabei unterstützt dich wieder der Quick-Fix, wenn du den Cursor auf das Literal stellst.
Der neu angelegten Klassen-Konstante kannst du dann noch einen neuen Namen geben und zum Abschluss die Aktion mit ENTER bestätigen.
Textsymbole auslagern
Das Auslagern von Literalen in Textsymbole funktioniert ebenso einfach wie bei den Konstanten und mit dem Quick-Fix, hast du alle Möglichkeiten an der Hand.
Nach Auswahl kannst du noch einmal den Text ändern oder die Länge des Feldes einstellen, bevor du bestätigst und damit ein neues Textsymbol anlegst.
Endergebnis
Das finale Ergebnis nach dem Refactoring findest du hier. Im Code hat sich einiges getan und wir stellen nun eine öffentliche Methode zur Verfügung, die man mit der Klasse nutzen kann.
CLASS zcl_bs_test_refactoring DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
METHODS select_test_data
IMPORTING
id_identifier TYPE zbs_test_data-identifier
RETURNING
VALUE(rs_data) TYPE zbs_test_data.
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS c_main_identifier TYPE string VALUE 'REFACTORING' ##NO_TEXT.
ENDCLASS.
CLASS zcl_bs_test_refactoring IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA:
ld_identifier TYPE zbs_test_data-identifier.
ld_identifier = c_main_identifier.
DATA(ls_data) = select_test_data( ld_identifier ).
out->write( TEXT-001 ).
out->write( ls_data ).
ENDMETHOD.
METHOD select_test_data.
SELECT SINGLE *
FROM zbs_test_data
WHERE identifier = @id_identifier
INTO @rs_data .
ENDMETHOD.
ENDCLASS.
Fazit
Mit fast keinem Aufwand haben wir das bestehende Coding umgebaut. Du siehst also, wie gut dich Eclipse dabei unterstützen kann, schnell und effizient dein bestehendes Coding anzupassen und zu verändern. Stell dir mal vor, du hättest all die Änderungen in SE24 machen sollen, wie viel mehr Zeit hättest du benötigt?