[OOP] Entwicklung von wiederverwendbaren Klassen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [OOP] Entwicklung von wiederverwendbaren Klassen

    Hallo,

    hier eine Frage speziell zur Programmierung von wiederverwendbaren Klassen in PHP4.

    Als ich vor einem Jahr mit meinem Projekt anfing habe ich zig Klassen geschrieben:

    Klasse Page_News
    Klasse Page_Company
    Klasse Page_Shopping_Card
    Klasse Page_Impressum

    etc

    Nun muss ich feststellen, dass ich mit diesen Klassen im meinem privaten Projekt Zuhause nix anfangen kann.
    Also diese Klassen bekommen ein DB mysql Wrapper Objekt übergeben mit dem sie Queries ausführen können.

    Jetzt frage ich mich was ich davon habe. Jede Webseite hat die klassischen Rubriken News, Gallery, Impressum,etc. Da dachte ich mir das man da etwas wiederverwertbares schreiben sollte.

    Was ich nun ich verstehe, wie kann man eine wiederverwertbare Klasse "News" schreiben, die auf eine DB zugreift.

    Die Tabellenspalten und Layout sind doch bei alles DB Designern anders.

  • #2
    Welchen Sinn macht es für ein Impressum eine Klasse zu schreiben? Mir scheint, dass Du das Prinzip sowie den Sinn und Zweck OOP nicht ganz verstanden hast

    Wenn man seine Klassen clever durchdenkt, sind sie immer wiederverwendbar. Bestes Beispiel sind die im allgmeinen beliebten Template und SQL Klassen.

    EDIT:
    verschieb zu Brainstorming
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Indem du zum Beispiel in deiner Klasse eine setMethod bastelst, mit der du der Klasse ein Template (fürs Layout) und die Spaltennamen (für die Abfrage) übergibst.
      [color=red]Geht nicht[/color] ist keine Fehlermeldung

      Kommentar


      • #4
        Ich hatte die Klassen total durchdacht.
        Habe zig UML Diagramme erstellt.

        Also alles Klassen sind von einer Klasse Page abgeleitet, Diese wiederum erbt von der Template Klasse Smarty.

        Die Klasse Impressum heißt Page_Impressum.
        Ein Impressum hat ja immer die gleichen Attribute.
        Name, Nachname, Steuernummer, etc.

        Die Methoden in meiner Klasse holen sich mit queries die Info aus der DB.

        Kommentar


        • #5
          Original geschrieben von compuboy1010
          Ich hatte die Klassen total durchdacht.
          warum dann dieser Beitrag?
          Ein Impressum hat ja immer die gleichen Attribute.
          aha Und da reicht dann nicht eine Methode getImpressumData($this->project);

          Dir ist schon klar, dass OOP bei "Übertreibung" des ganzen bös´langsam wird oder?
          h.a.n.d.
          Schmalle

          http://impressed.by
          http://blog.schmalenberger.it



          Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
          ... nur ohne :-)

          Kommentar


          • #6
            Hallo Schmalle,

            ich sagte ich hatte die Klassen total durchdacht. Das war vor 2 Jahren. Da hatte ich so gut wie gar keine Erfahrung.

            "Warum dieser Beitrag" ? Weil, ich nun die Konsequenzen der Unerfahrenheit spüre.

            Original geschrieben von schmalle
            Und da reicht dann nicht eine Methode getImpressumData($this->project);
            Könntest du mir das noch mal erläutern ?

            Dir ist schon klar, dass OOP bei "Übertreibung" des ganzen bös´langsam wird oder? [/B]
            Nein, war mir nicht klar.

            Kommentar


            • #7
              Zum Bleistift. Ich habe ein Projekt mit x Seiten. Wenn ich jetzt für jede Seite eine eigene Klasse schreibe, ist das ganze doch total unflexibel ... Macht also keinen Sinn. Also bastel ich mir 2, 3 Klassen, die ich immer und üüberall verwende. Bei bedarf "klemme" ich noch eine weitere hinzu.

              Dann habe z.B. eine CLasse pageContent. In dieser Klasse befindet sich die Methode getImpressumData(). Die Rufe ich auf, und übergebe den Return Wert an die Template Klasse -> fertig
              h.a.n.d.
              Schmalle

              http://impressed.by
              http://blog.schmalenberger.it



              Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
              ... nur ohne :-)

              Kommentar


              • #8
                Hallo Schmalle,

                danke für deine Antwort.

                Original geschrieben von schmalle
                Dann habe z.B. eine Klasse PageContent. In dieser Klasse befindet sich die Methode getImpressumData(). Die Rufe ich auf, und übergebe den Return Wert an die Template Klasse -> fertig [/B]
                AHA ....


                Aber wenn ich das mit der Klasse PageContent mache, dann habe ich ja wieder genau das gleiche Problem wie jetzt.

                Wie flexibel ist die Klasse PageContent wenn mit Datenbanken gearbeitet wird ? Die Tabellen sind doch bei allen verschieden. Angenommen ich schreibe mir die Klasse gleich hier auf der Arbeit. Möchte die aber heute Abend auf CD brennen und bei meinem privaten Projekt Zuhause verwenden.

                Ich arbeite z.B. mit der PEARB Klasse um an mySQL ranzukommen.

                Tut mir echt leid wenn ich dich vielleich mit für dich trivialen Dingen nerve. Aber könntest du mir mal kurz den Algorithmus schildern?

                1 skript erzeugt PEAR DB Objekt ?
                2 skript übergibt DB Objekt an Objekt PageContent ?

                ... wie weiter ?
                Woher weiß die Methode getImpressum() in welcher Tabelle und welchen Spalten die Name, Steuernummer liegt?

                Du glaubst nicht, wieviel mir das helfen würde wenn ich dieses !!Prinzip!! verstände. Dann würden sich ja die ganzen Klassen, Page_Impressum, Page_Contact, Page_Jobs, Page_Links,Page_Terms, Page_Partners,etc,etc erübrigen.

                Hatte schon in diversen Foren gefragt, aber die haben mich immer missverstanden.

                Danke
                Zuletzt geändert von compuboy1010; 07.05.2004, 11:35.

                Kommentar


                • #9
                  OffTopic:
                  Du solltest mal ein Buch lesen


                  Bleistift:

                  wir haben 3 Klassen

                  pageClass extends TemplateClass extends sqlClass

                  Dann ein Array welches "irgendwo rumliegen", und die SQL Daten sowie Pfade etc. enthhält.

                  Dann der Aufruf $meineSeite = new pageClass($sql_und_pfad_array);

                  Ergebnis, du hast alle Klassen, die Du brauchst, auf einmal gestartet. Jetzt kannst Du in den Klassen mit $this, Classname::methbod oder parent::method arbeiten.

                  Definiere nicht zu oft VAR, sondern nurt für Objekte, die auch wirklich ständig brauchst. z.B. SQL VErbingskennung und Resource ID´s etc.

                  zum Thema PEAR fragst du hier allerdings den Falschen
                  h.a.n.d.
                  Schmalle

                  http://impressed.by
                  http://blog.schmalenberger.it



                  Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                  ... nur ohne :-)

                  Kommentar


                  • #10
                    Bleistift:

                    wir haben 3 Klassen

                    pageClass extends TemplateClass extends sqlClass

                    Dann ein Array welches "irgendwo rumliegen", und die SQL Daten sowie Pfade etc. enthhält.
                    Na ja so mache ich es ja schon.

                    Dann der Aufruf $meineSeite = new pageClass($sql_und_pfad_array);
                    OK

                    Ergebnis, du hast alle Klassen, die Du brauchst, auf einmal gestartet. Jetzt kannst Du in den Klassen mit $this, Classname::method oder parent::method arbeiten.
                    Mache ich auch schon teilweise.
                    Aber dann habe ich in der Klasse pageContent EINE MENGE Methoden, die ich in meiner privaten Homepage nicht brauche.

                    z.B.
                    getImpressum();
                    getOpenJobs();
                    etc

                    Und wenn ich die in eine Subklasse packe, dann bin ich bald wieder bei den 15 Klassen die ich nun schon habe. Das wären echt eine Menge Funktionen für die ContentPage Klasse, oder ?
                    [/QUOTE]

                    Definiere nicht zu oft VAR, sondern nur für Objekte, die auch wirklich ständig brauchst. z.B. SQL Ergebniskennung und Resource ID´s etc.
                    Du meinst Klassenvariablen? Also mehr mit lokalen Funktionsvariablen?

                    zum Thema PEAR fragst du hier allerdings den Falschen
                    OK, schade.


                    Ich habe aber noch eine Frage:

                    Weiß immer noch nicht woher die getImpressum() Methode(Fuktion)
                    weiß ich welche Tabelle sie gucken soll.
                    Zuletzt geändert von compuboy1010; 07.05.2004, 12:12.

                    Kommentar


                    • #11
                      abgesehen davon, dass ich nicht weiß, welchen sinn es macht, sowas in ner datenbank zu speichern: entweder den tabellennamen als parameter mitgeben oder die tabelle mit dem impressum immer gleich nennen


                      was steht in der tabelle mit dem impressum eigentlich noch drin und wie is die aufgebaut?
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Es spricht ja nichts dagegen 15 Klassen zu haben. Du darfst sie natürlich nicht alle auf einmal aufrufen

                        Das Ziel muss sein, mit möglichst wenig Code viel zu erreichen. Je weniger Du mit Variablen etc. rumhantierst, desto übersichtlicher wird das ganze.

                        Wenn Du z.B. Deine Impressum aufrufen willst, solltest Du dafür nicht mehr als 10 Zeilen Code brauchen. Der Rest sollte automatiert in den Klassen ablaufen.
                        h.a.n.d.
                        Schmalle

                        http://impressed.by
                        http://blog.schmalenberger.it



                        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                        ... nur ohne :-)

                        Kommentar


                        • #13
                          Original geschrieben von mrhappiness
                          abgesehen davon, dass ich nicht weiß, welchen sinn es macht, sowas in ner datenbank zu speichern: entweder den tabellennamen als parameter mitgeben oder die tabelle mit dem impressum immer gleich nennen


                          was steht in der tabelle mit dem impressum eigentlich noch drin und wie is die aufgebaut?
                          OK,

                          Tabelle impressum existiert gerade nicht. Das ist Zufall..

                          Aber was spräche dagegen die Daten in einer DB zu speichern ?
                          Es sind doch Daten. (=> Datenbank).

                          Mal gucken, ob ich das richtig verstehen:

                          Da pageContent von db und template erbt:

                          PHP-Code:
                          function setTable($table)
                          {
                              
                          $this->table $table;
                          }

                          function 
                          getImpressum()
                          {
                              
                          // hole die namen der spalten
                              // gebe einem array $impressum den idices die spaltennamen

                              
                          $this->db->query("SELECT * FROM ".$this->table."");

                             
                          // mit foreach das array mit den daten füllen
                             
                          $this->assign('impressum'$impressum// übergabe an template methode ?


                          Na ist das Teil einer wiederverwendbaren Klasse oder was ?!?!


                          Zuletzt geändert von compuboy1010; 07.05.2004, 13:06.

                          Kommentar


                          • #14
                            du solltes nicht versuchen dich nach dem DB designer zu richten, du solltest die richtlinien geben!

                            du kannst die spalten tabellennamen per parameter an deine methode geben $foo -> set_cols(array('id'=>'buu', 'test'=>'loo', user_id' => 'doo'))

                            wird dann aber doch etwas schwachsinning, da du einfacher die DB tabellen über ne Install funktion deines scriptes erstellen lassen sollten sprich:

                            will du
                            page.class.php (methode -> impressum) haben, check vorher ob die tabelle existiert ansonsten wird die angelegt -> geh in richung modulen
                            thx Mukraker

                            Kommentar


                            • #15
                              Original geschrieben von compuboy1010
                              Na ist das Teil einer wiederverwendbaren Klasse oder was ?!?!
                              Ist es, ... aber nicht durchdacht

                              es müsste so aussehen:
                              PHP-Code:

                              // irgendwo auf Seite

                              $pageClass = new pageClass($array_etc);

                              $impressum $pageClass->GetImpressumData();

                              // in der class

                              function getImpressumData() {

                               
                              $this->query(" select Bla bla bla );
                               
                              $arrar = $this->fetchData($this->resourceID);
                               return 
                              $array;

                              }

                              // irgendwo anders

                              echo 
                              $pageClass->parseData($impressum); 
                              h.a.n.d.
                              Schmalle

                              http://impressed.by
                              http://blog.schmalenberger.it



                              Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                              ... nur ohne :-)

                              Kommentar

                              Lädt...
                              X