Kapselung von Datenbanktabelle

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Kapselung von Datenbanktabelle

Postby Maja967 » Mon Mar 07, 2011 4:10 pm

Hallo,

ich überlege mir wie man einen Zugriff auf eine Datenbanktabelle kapseln kann und bin mir Unschlüssig ob man das umsetzen kann ..

also: In der Tabelle zcc_cust_t01 liegen Inforamtion die verschiede Batchprogramm verwenden. Diese Tabelle wird vielleicht 2x im Jahr geupdatet und von 50% unserer Programm verwendet. Bisher hat jedes Programm ein Select Statement implementiert um an die Infos zugkommen.

Aufbau der Programm:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. - Hole_Info aus zcc_cust_t01
  2. - loop über Datensätze
  3.      Aufruf Funktion1
  4.      Aufruf Funktion2
  5.      Aufruf Funktion_übergreifend1
  6.      Aufruf Funktion_übergreifend3
  7.      .....
GeSHi ©


-> es kann nun vorkommen das in der Funktion_übergreifend1 ebenfalls
auf die zcc_cust_t01 zugegriffen wird.
auch Funktion_übergreifend3 verwendet die zcc_cust_t01.

-> dh die Tabelle zcc_cust_t01 wird insgesamt 3x nachgefragt, das möchte ich wie folgt unterbinden:

Ich erstelle eine Klasse von der es genau ein Objekt gibt, das Objekt der Tabelle zcc_cust_t01. Diese Objekt kann dann von jedem Programm oder jeder Funktion erzeugt werden.
- Das Objekt sorgt dafür das es einmalig ist(lokal-Singleton siehe Singleton-Thread).
- Beim einmaligen erzeugen hole ich die kompeltten Daten von der Datenbank

-> klingt das irgendwie schlüssig bzw umsetzbar ???
-> gibt es da mögliche Fallstricke ?? (deadlocks kann ich keine erkennen da ich lediglich lesend auf die DB zugreife)
-> bitte beachten: zZ entwickle ich 90% prozedural nähre mich solangsam der OO vielleicht gibts da noch Denkfehler ....
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm

Postby Jonny2227 » Mon Mar 07, 2011 4:21 pm

Sali,

die Antwort ist mE schon mal im Thread mit gefallen - shared Memory Object - ist da sicher der gewünschte Lösungsansatz - zumal du ja nur lesend auf die Daten zugreifen willst - zumindest bei den meisten Zugriffen - wenn ich das richtig verstanden habe oder ?
Mi den SMO kannst du aber auch schreibende Zugriffe handeln - es ist damit "eingeschränkt" sogar möglich Daten Userübergreifend zu sharen - aber da hat es ein paar "Unzulänglichkeiten" denn das Handling bei anderen Usern - wenn z.Bsp. Daten geändert wurden und dann da die Daten zu aktualisieren des Users ist nicht ganz trivial. Aber das ist ein anderes Thema.
Für deine Problematik denke ich bestens geeignet SMO !

Gruss
Jonny2227
....
....
 
Posts: 605
Joined: Wed Mar 01, 2006 3:16 pm

Postby Maja967 » Mon Mar 07, 2011 5:30 pm

@Jens

thx für die Anwort. Mit SMO möchte vorerst nichts anfangen mir reicht es schon wenn es ProgrammGlobal bzw im "internen Modus" des Programms funktioniert.

Ich kenn mich mit SMO (noch) nicht aus, ich vermute hier gibt es wiederum Dinge die man beachten muß (wie groß ist der SMO, etc ...). Da lass ich vorerst mal noch die Finger von.

-> zum teilen Laufen die Programm 50x mal Parallel, das würde im obigen Beispiel bedeutet das ich aus 50x3 = 150 Selects nur 50 Selects mache, via SMO wäre das dann wohl genau 1 Select .. aber wie gesagt bei SMO möchte ich zZ noch passen.
-> desweiteren wird es sicherlich in Zukunft noch weitere übergreifende Funktionen geben die zcc_cust_T01 verwenden. Durch mein "Implementierungs-Muster" habe ich die Vermutung das ich die *arme DB schone und uns Entwicklern die Arbeit erleichtere ...

-> es handelt sich um reine Lesezugriffe auf die Tabelle
die Tabelle wird lediglich durch Transporte auf Produktion verändert
-> das hat sicherlich keine Auswirkung auf laufende Programm wenn
der Transport gerade importiert wird bzw man hält halt mal die Produktion an ...

thx
Maja967
...
...
 
Posts: 229
Joined: Tue Nov 29, 2005 2:44 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 18 guests