kostenloser Webspace werbefrei: lima-city


PHP objektorientiert: Verständnisfrage

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    meron

    meron hat kostenlosen Webspace.

    Hi zusammen

    Ich beschäftige mich derzeit mit der objektorientierten Programmierung.
    Konkret programmiere ich mein Reportsystem neu objektorientiert und dazu habe ich nun eine Verständnisfrage:

    Ein Report besteht aus mehreren Teilen, die sogenannten Report-Details.
    Im Erstellungsprozess werden die Report-Details als Vorlagen geladen. Anschliessend werden neue Objekte die Report-Elemente gebildet welche die für das derzeit gewählte Dossier die gewünschten Daten enthalten (also Reportelement mit ausgefüllten Daten), diese Elemente behalten als Referenz die Vebindung zu den Details (eingebunden unter $this->vorlage).

    Ich habe diese Art gewählt, da ich mir denke, dass diese am performantesten ist:
    Zuerst werden die Vorlagen geladen,
    dann werden pro gewünschtem Datensatz die Elemente gebildet mit den korrekten Daten
    am Schluss wird alles ausgegeben mit der gewünschten Ausgabeart (derzeit HTML, PDF oder xml).

    Dafür habe ich drei Klassen: die generelle Reportklasse (vreport), die Detailklasse (vreportdetails) und die Elementeklasse (vreportelemente).
    Aufgerufen wird ein Report mittels der vreport Klasse, diese steuert anschliessend die Detail- und Elementeklasse.
    Da die Elementeklasse es nicht interessieren sollte, wie die Ausgabe erfolgt wird die Schlussausgabe wiederum von der vreport-Klasse übernommen (durchgehen aller Elemente und abholen der Daten).
    Trotzdem benötige ich aber bei der Schlussausgabe wieder Informationen von den Details (z.B. ist es ein Barcodereport, EZ oder normaler Text). Diese Information speichere ich derzeit nicht auf die vreportElemente-Klasse, da diese ja bezogen werden können aus der vreportdetails-Klasse.

    Soll ich nun aber in der vreportElemente-Klasse eine spezielle Getter-Methode setzen um den Typ der Detailklasse zu holen:
    public function vGetDetailType()
    {
    return $this->vorlage->vGetType();
    }


    oder ist es zulässig, dass ich aus der vreport-Klasse diese direkt via der Vorlagen-Referenz bedient:
    $reportelement->vorlage->vGetType();


    Oder ist das reine Ansichtssache?

    Wäre froh wenn mir hier jemand helfen könnte (vielleicht mache ich mir auch zuviele Gedanken, aber soll halt einigermassen richtig kommen und nicht schon von Anfang an Designfehler enthalten).

    Gruess
    Meron
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Allgemein kannst du das machen wie Du willst, aber einen Method wrapper würde ich dennoch benutzen. Also:
    $reportObj->vDetailGetType(); // GlobalScope

    Das ist einfacher zu handhaben.
  4. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Also ich würde die "vorlage"-Variable nicht public machen sondern über den Getter gehen.
    Persönlich arbeite ich immer mit Gettern. Dies entspricht eher dem Geheimnisprinzip und der Datenkapselung.

    Ansonsten immer überlegen wie man Logik kapseln und zusammenfassen kann. Oft benötigt man dann gar keine Durchreichung von Daten mehr.

    Aber dazu müsste ich das gesamte System kennen...
  5. Autor dieses Themas

    meron

    meron hat kostenlosen Webspace.

    Danke euch beiden für die Informationen und Hilfestellungen. Ich werde es nun so angehen wie ihr auch empfiehlt via separaten Getter-Methoden.

    schrotti12 schrieb:
    [...]
    Ansonsten immer überlegen wie man Logik kapseln und zusammenfassen kann. Oft benötigt man dann gar keine Durchreichung von Daten mehr.

    Aber dazu müsste ich das gesamte System kennen...


    Ja, das kann durchaus stimmen, denn ich könnte ja anstelle eines Reportelementes für Barcodes ein separates (Barcode-)Element eröffnen, dann müsste ich den Typ nicht mehr durchreichen, doch das kriege ich derzeit noch nicht in meinen Kopf hinein wie ich dies technisch lösen muss (vorallem wiederum aufgeteilt auf die HTML+PDF-Variante) und die Durchreichemethode finde ich für meinen Zweck noch recht optimal (vorstellen kann man sich das wie bei einer xyz.dotx-Word-Vorlage: bei einem Doppelklick wird zwar ein neues Dokument eröffnet, meines weiss aber noch dass es zur Vorlage xyz gehört und daraus beziehe ich dann die Informationen für die Ausgabe).
  6. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Da kommen dir UML-Tools oft zu Gute wo du dir derartige Konstrukte erst grafisch darstellen kannst bevor du sie ausprogrammierst. Leider sind viele dieser Tools kostenpflichtig, aber ich hab eins gefunden das auf Eclipse basiert, als 64bit-Anwendung verfügbar und für private Anwender kostenlos ist:
    Modelio

    Vieleicht hilfts dir weiter. Ein paar Grundlagen zu UML findest zu auf Wikipedia

    Mir hat das bei komplexen Problemen immer sehr geholfen wenn ich das grafisch mit Kollegen besprechen und durchgehen konnte.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!