Welcher Weg ist sauberer?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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.
    Last edited by combie; 30-11-2007, 11:47.
    Wir werden alle sterben

    Comment


    • #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.
      Last edited by BlackHawkDC; 30-11-2007, 11:37.
      web: http://www.mannstunde.de
      email: info@mannstunde.de

      Comment


      • #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.

        Comment


        • #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!

          Comment


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

            Comment

            Working...
            X