Diskussionsthema: Clean Code

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles Rund um SAP®.
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Diskussionsthema: Clean Code

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hallo zusammen,

ich möchte eine Diskussionen über bestimmte Punkte rund um clean Code im SAP.

Mich interessiert, wie ihr das handhabt und darüber denkt...

- Definition von Ausnahmeparametern sollten in Funktionsbausteinen immer zwingend sein oder kann es auch sein, dass es in der gerufenen
Einheit gar keine Fehlerkonstellation auftreten kann?
M.E.: kann doch immer ein Abbruch erfolgen oder keine Connection vorhanden sein. Daher sollten Funktionsbausteine immer Ausnahmeparameter haben.

- bei Klassenbasierten Ausnahmen bin ich der Meinung, dass es keine leeren Ausnahmebehandlungen geben sollte. Oder kann es auch Fälle geben, in denen es gewollt ist, nicht auf einen Fehler zu reagieren und die weitere Verarbeitung fortzuführen?

Danke für eure Meinung.

Viele Grüße
coco

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


Re: Diskussionsthema: Clean Code

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Hallo coco,

es gibt genug Situationen, in denen einfach keine Ausnahmen auftreten können. Z.B. wenn du einen FuBa hast mit 4 Eingangswerten und es soll der höchste davon zurückgegeben werden. Was willst du denn da als Ausnahme festlegen? ( Du könntest natürlich extra einen Fehler eingeben, wenn jemand die Zahlen 153, 370, 371 und 407 eingibt damit du eine Ausnahmebehandlung einfügen kannst. )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Diskussionsthema: Clean Code

Beitrag von a-dead-trousers (Top Expert / 4282 / 214 / 1141 ) »
c oco hat geschrieben:- Definition von Ausnahmeparametern sollten in Funktionsbausteinen immer zwingend sein oder kann es auch sein, dass es in der gerufenen
Einheit gar keine Fehlerkonstellation auftreten kann?
M.E.: kann doch immer ein Abbruch erfolgen oder keine Connection vorhanden sein. Daher sollten Funktionsbausteine immer Ausnahmeparameter haben.
Du denkst hier, glaube ich, zu sehr an RFC-FuBas. Wie black_adept schon sagte, gibt es durchaus auch "interne" Bausteine.
Als ein weiteres Beispiel sind da noch die BAPI-Bausteine mit den RETURN-Tabellen zu erwähnen. Hier will man ja mitunter MEHR als nur einen Fehler zurückbekommen, was mit den Ausnahmen nicht möglich ist.
c oco hat geschrieben:- bei Klassenbasierten Ausnahmen bin ich der Meinung, dass es keine leeren Ausnahmebehandlungen geben sollte. Oder kann es auch Fälle geben, in denen es gewollt ist, nicht auf einen Fehler zu reagieren und die weitere Verarbeitung fortzuführen?
Früher war ich auch der Meinung das man die Ausnahmebehandlung gleich mal machen sollte, aber mittlerweile bin ich davon (auch durch anraten eines neuen Kollegen) wieder davon abgekommen. Man läuft einfach zu sehr in die Gefahr einen "silent" catch zu programmieren und damit vorallem in der ersten Entwicklungsphase Fehler zu übersehen. Sobald man dann die Problemfelder erkannt und identifiziert hat, spricht nichts dagegen Fehler abzufagen.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
c oco

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Diskussionsthema: Clean Code

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
c oco hat geschrieben:- Definition von Ausnahmeparametern sollten in Funktionsbausteinen immer zwingend sein oder kann es auch sein, dass es in der gerufenen
Einheit gar keine Fehlerkonstellation auftreten kann?
Nochmal hierzu. Ein Ausnahmeparameter macht nur dann Sinn, wenn du im FuBa auch ein RAISE machst. Und das kannst du ja nur dann machen, wenn eine dir bekannte Ausnahmesituation vorliegt oder wenn du daran denkst, dass etwas bestimmtes schief gehen könnte. Wenn dir da aber nix einfällt kannst du auch kein RAISE machen --> keine Ausnahme.
Falls du aber wie von adt schon erwähnt an RFC-Bausteine denkst - ich kann mich nicht erinnern jemals einen RFC-Fuba verwendet zu haben ohne die beiden RFC-Ausnahmen abgefangen und zu bearbeitet zu haben.
c oco hat geschrieben: bei Klassenbasierten Ausnahmen bin ich der Meinung, dass es keine leeren Ausnahmebehandlungen geben sollte. Oder kann es auch Fälle geben, in denen es gewollt ist, nicht auf einen Fehler zu reagieren und die weitere Verarbeitung fortzuführen?
Das hängt ganz stark davon ab, was die Ausnahme sagen soll. Ich habe z.B. eine Migration, wo wir diverse Umsetzungen machen - und leider kann die Umsetzung von Zeit zu Zeit auch einen korrekten initialen Wert zurückgeben. Was wir wissen müssen ist nur, ob die Umsetzung geklappt hat oder nicht, da im letzteren Fall alternative, komplexere oder zeitintensivere Methoden zur Umsetzung herangezogen werden müssen. Und eine nicht gefundene Umstzung wird dann in meinen Umsetzungklassen mittels RAISE EXCEPTION angekündigt. Insgesamt sieht dann die Kaskade der Umsetzungen etwa so aus.

Code: Alles auswählen.

TRY.
variable = me->umsetzungsroutine1( diverse Daten ).
RETURN. " Umsetzung gefunden --> Fertig
CATCH zcx_eigene_fehlerklasse.
ENDTRY.

TRY.
variable = me->umsetzungsroutine2( diverse Daten ).
RETURN. " Umsetzung gefunden --> Fertig
CATCH zcx_eigene_fehlerklasse.
ENDTRY.
Ist jetzt zwar etwas geschummelt, da man das "RETURN" auch weglassen könnte und dann den 2. TRY-CATCH-Block in das CATCH des 1. Block schieben könnte. Aber wenn die Anzahl der Umsetzversuche sich erhöhrt wird das Coding unübersichtlicher und so sieht man dann schön spätestens im Debugger wie weit man gehen musst um endlich die Umsetzung zu finden.
Und ehrlich gesagt fallen mir noch 1000 andere Umstände ein, unter denen ein leerer Catch-Block durchaus seine Berechtigung hat.

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

67
Antw.
8101
Views
ABAP Clean Code
von nickname8 » 06.05.2019 08:06 • Verfasst in ABAP® Core
5
Antw.
16175
Views
OK-Code
von TomTom » 18.11.2005 13:28 • Verfasst in ABAP® für Anfänger
1
Antw.
1300
Views
code s_flight_model_data_generator
von Gast » 20.10.2005 14:51 • Verfasst in ABAP® Core
7
Antw.
3096
Views
Code Inspector
von Norbert_Aeq » 10.04.2012 15:54 • Verfasst in ABAP Objects®
2
Antw.
2384
Views
Drucken QR-Code
von Nyffenegger_2020 » 01.02.2021 11:55 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

SELECT CHAR16 in CHAR12-Feld
vor 2 Stunden von Patrick1982 gelöst 5 / 62
alv_grid aktualisieren
vor 7 Stunden von Egzon gelöst 4 / 83

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.

Aktuelle Forenbeiträge

SELECT CHAR16 in CHAR12-Feld
vor 2 Stunden von Patrick1982 gelöst 5 / 62
alv_grid aktualisieren
vor 7 Stunden von Egzon gelöst 4 / 83

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 134
Group Items auf einer Filterbar
vor 5 Wochen von Bright4.5 1 / 170