Welcher Weg ist sauberer?

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

  • Welcher Weg ist sauberer?

    Huhu!

    Ich möchte meinen Code optimieren und hab dazu eine kleine Frage:

    Es gibt die Klasse "User" aus der ich u.a. die Userdaten (Name, Mail, etc) hole.


    PHP-Code:
    #1
    function User($id) {
        
    // MySQL Query
       
    $name $row->name;
       
    $mail $row->mail
    }

    function 
    getName() {
        return 
    $name;
    }

    function 
    getMail() {
       return 
    $mail;

    PHP-Code:
    #2
    function getUserData($id$field) {
        
    // MySQL Query
        
    $qry "SELECT $field FROM ... WHERE userID=$id...";
        
       
    // Schleife..
       
    return $row->$field;


    Welchen Weg findet ihr besser? Und warum? Was ist performanter?

    Danke
    carapau!
    Lasst euch nicht lumpen, hoch den Humpen!

  • #2
    Tja...
    Da könnte man Bücher drüber schreiben....

    Was ist deine User Klasse?
    Gehört sie zum M oder C des "MVC Design Pattern"?
    Eigendlich sollte man den Datembank spezifischen Krams aus einer Modell Klasse möglicht weit raus halten. Dabei wäre dann das "Factory Design Pattern" hilfreich. Dazu könnte ich dir ein rudimentäres Beispiel liefern...

    Zusätzlich, zu den von dir angedachten Wegen, könnte man noch die magischen Methoden __get() und __set() nutzen. Oder die ArrayAccess Schnittstelle implementieren.
    Zuletzt geändert von combie; 30.11.2007, 12:47.
    Wir werden alle sterben

    Kommentar


    • #3
      am performantesten (von der Ausführungs und Entwicklungszeit her) ist es sicherlich, wenn du es so direkt wie möglich machst, also den Ansatz von getUserdata folgend. Aber ob das am saubersten ist, ich weiß nicht.

      Sauberer wäre:
      PHP-Code:
      class User {
          
      getName();
          
      getEmail();
      }

      class 
      PersistenceManager() {
          function 
      User getUserById() {
            
      //sql Query
            
      return user;
          }

          function 
      User findUserByEmail() {
            
      //sql Query
            
      return user;
          }

          ....

      Der Vorteil ... alle deine Sql-Abfragen liegen im persistenceManager und den kann man
      a) auswechseln (ok ... wann wechselt man schon mal die DB) und
      b) was wichtiger ist, man weiss wo man einen fehler suchen muss.

      Vielleicht solltest du dir mal Propel anschauen, die haben das schon für dich gelöst.
      Zuletzt geändert von BlackHawkDC; 30.11.2007, 12:37.
      web: http://www.mannstunde.de
      email: info@mannstunde.de

      Kommentar


      • #4
        Wenn du in deiner Klasse dreimal getUserData( 1, 'name' ); aufrufst, wird jedesmal eine Query abgesetzt. Am Sinnvollsten ist, das User-Objekt erst aus der Datenbank zu laden und dann darauf zuzugreifen. Guck dir mal das Active Record Pattern an.

        Kommentar


        • #5
          Ich unterteile meine Scripte normal in 3 versch. Datei-Arten:

          - *.php
          - *.tpl
          - *.class.php

          Die *.php steuert alles, die *.tpl sind "dumme" HTML Datein und die *.class.php liefern die Daten bzw tun das eigentliche im Hintergrund. Ist das MVC?

          Leider finde ich nirgends gute/saubere Tutorials für "große" Projekte. Immer nur kleine Beispiele, die nicht wirklich vorausschauend programmiert sind.

          Es kann einfach nicht normal sein für jede Kleinigkeit ein neuen query zu schicken.

          Werde mir die Stichwörter mal angucken, danke.

          Falls ihr gute Tutorials kennt, immer her damit!
          Lasst euch nicht lumpen, hoch den Humpen!

          Kommentar


          • #6
            Weniger nach Tutorials suchen und ein wenig in Sachen Softwareengineering lesen

            Kommentar

            Lädt...
            X