Ankündigung

Einklappen
Keine Ankündigung bisher.

"neuenFreundHinzufügen" in Konstruktor oder extra Methode?

Einklappen

Neue Werbung 2019

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

  • "neuenFreundHinzufügen" in Konstruktor oder extra Methode?

    Hallo liebe Forenmitglieder

    Um mein Wissen in Objektorientierung auszuweiten, würde ich mir gerne zu Testzwecken ein kleines "social network" basteln. Das klingt jetzt furchtbar "cool", aber ich meine damit am Anfang erstmal nicht mehr, als neue Freunde in eine Datenbank einzutragen. Ich will weder das ganze online stellen noch mich mit facebook konkurrieren Ich dachte mir, es wäre einfach nur gut, um in dem Thema PHP und OOP fitter zu werden.

    Bevor ich aber wirklich starten konnte, bin ich schon auf eine wichtige Frage gestoßen:

    Es existiert bereits eine Klasse "Freund". Für jeden Freund sind Anschrift, Tel. etc. in einer mySQL-Datenbank abgelegt. Jetzt bin ich mir nicht sicher, ob ich die Methode "neuenFreundHinzufuegen" (Daten von HTML-Formular sollen in die DB geschrieben werden) als extra "function" der Klasse definieren soll, oder ob es sinnvoller ist, dieses gleich alles in den Konstruktor "__construct" zu implementieren.

    Den zweiten Fall stelle ich mir so vor, damit mit folgender Anweisung bereits alles erledigt ist:

    PHP-Code:
    $neuer_freund = new Freund($_POST['vorname'], $_POST['nachname'], $_POST['strasse'] ... usw.); 
    Was denkt ihr? Verstößt das gegen sämtliche Regeln der OOP? :P

    Danke im Voraus,
    Julian


  • #2
    Ich würde an deiner Stelle eine extra Methode dazu schreiben, weil die Klasse Freund stellt ja ein Model dar. (Es hält die Daten und man sollte damit die Daten in der DB speichern und auf sie Zugreifen können

    PHP-Code:
    class Freund
    {
        protected 
    $id;
        protected 
    $name;
        
    //...

        
    public function __construct($id == null){
             
    // holt daten aus der DB, wenn $id != null
        
    }

        
    // Getter und Setter 

        
    public function insert(){
            
    // fügt einen neuen datensatz ein
        
    }

        public function 
    update(){
            
    // speichert änderungen
        
    }


    Und dazu noch eine ManagerKlasse

    PHP-Code:

    class FreundManager
    {

        public function 
    freundHinzufuegen($name$x){
             
    $freund = new Freund();
             
    $freund->setName($name)
                       ->
    setX($x);
             
    $freund->insert();
        }


    So kannst du die Klasse FreundManager um Methoden erweitern und die Klasse Freund gegen SpezialFreund austauschen, wenn es die Methoden von Freund implementiert.

    Kommentar


    • #3
      hey cool ... daran habe ich noch garnicht gedacht, eine eigene Klasse "FreundManager" zu verwenden. Super Tipp, danke!

      Das ist genau das, was ich gemeint habe: Die Übung in der OOP

      Ich teste das mal und erstatte dann nochmal Rückmeldung!

      Kommentar


      • #4
        Hm, ein Freund ist doch genau genommen ein anderer User.
        Eine Freundschaft stellt letzten Endes nichts anderes dar als eine Beziehung zwischen zwei User-Objekten. D.h. der Freund wäre keine eigene Klasse, sondern ein weiteres User-Objekt.
        FriendManager als Klasse ist sinnvoll um die Beziehungen herzustellen. Aber was willst du in der Klasse Friend ablegen, was du nicht aus dem User-Objekt beziehen kannst?

        Kommentar


        • #5
          Zitat von SinnlosS Beitrag anzeigen
          Hm, ein Freund ist doch genau genommen ein anderer User.
          Eine Freundschaft stellt letzten Endes nichts anderes dar als eine Beziehung zwischen zwei User-Objekten. D.h. der Freund wäre keine eigene Klasse, sondern ein weiteres User-Objekt.
          FriendManager als Klasse ist sinnvoll um die Beziehungen herzustellen. Aber was willst du in der Klasse Friend ablegen, was du nicht aus dem User-Objekt beziehen kannst?
          Wegen der Angabe von Adresse und anderen Infos könnte man auch meinen, dass es eine Art Kontaktmanager ist, wie z.B auf dem Handy

          Kommentar


          • #6
            Naja, da schon der Vergleich zu Facebook gezogen wurde, und der Begriff "Freund" nach meinem Verständnis in Bezug auf ein Social Network doch sehr eindeutig geprägt ist, ging ich davon aus, dass mit Freundschaft eben eine Beziehung zwischen zwei Nutzern des Systems gemeint ist, und kein Kontakt aus einem Adressbuch. Andernfalls wäre der Begriff "Freund" unglücklich gewählt in meinen Augen, aber dann würde selbstverständlich eine eigene Klasse Sinn machen.

            Kommentar


            • #7
              Ich hatte eigentlich schon an eine Art Mischung von euren beiden Vorschlägen gedacht: Also das 1. der "Freund" in irgendeiner Freundestabelle steht und ich 2. auch auf sämtliche Kontaktdaten zugreifen kann.
              Das ist ja bei facebook grundsätzlich genauso, nur dass man einstellen kann, was öffentlich sein soll.

              jetzt bin ich gerade dabei, den Code von Yanko umzusetzen, allerdings verstehe ich die Zeile

              PHP-Code:
              public function __construct($id == null){
              ... } 
              nicht ganz genau. Ich weiß zwar, was der Konstruktor "tun" soll, aber eclipse meldet da auch einen Fehler.

              Kommentar


              • #8
                Zitat von cocktailbar90 Beitrag anzeigen
                allerdings verstehe ich die Zeile
                PHP-Code:
                public function __construct($id == null){
                ... } 
                nicht ganz genau. Ich weiß zwar, was der Konstruktor "tun" soll, aber eclipse meldet da auch einen Fehler.
                Statt einem Vergleich mit == war hier wohl die Angabe eines Defaultwertes mit = gemeint.

                Kommentar


                • #9
                  Bitte ganz klar OOP und Datenbankverwaltung hier in der Diskussion und auch Deinen Überlegungen trennen! Das hat nicht das Geringste miteinander zu tun! Das Mapping übernimmt dann eine weitere Schicht, das hat aber nichts mit der Prozesslogik zu tun. Denke in der OOP "Situations-lokal" und für die DB „Anwendungs-global“.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    @ChrisB: daran habe ich auch schon gedacht, aber so gesehen ist es doch dann egal, ob ich new Friend(243) oder new Friend() schreibe, weil die id sowieso jedesmal mit "null" überschrieben wird. Oder habe ich da einen Denkfehler?

                    @nikosch: das wäre dann wieder eine andere Frage, wie ich das mit der Datenbankanbindung mache. (bisher habe ich eine eigenen Datenbank-Klasse)
                    Aber bevor ihr mir alles nocheinmal erklärt, hat vlt. einer eine gute Tutorialseite mit genau diesem (SoftwareDesign) auf Lager?

                    Kommentar


                    • #11
                      http://www.php.net/manual/en/functio...uments.default

                      Kommentar


                      • #12
                        Ich rede nicht von der Datenbankverbindung, sondern Aussagen wie diesen:

                        ob ich die Methode "neuenFreundHinzufuegen" (Daten von HTML-Formular sollen in die DB geschrieben werden)
                        Also das 1. der "Freund" in irgendeiner Freundestabelle steht
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Zitat von cocktailbar90 Beitrag anzeigen
                          @ChrisB: daran habe ich auch schon gedacht, aber so gesehen ist es doch dann egal, ob ich new Friend(243) oder new Friend() schreibe, weil die id sowieso jedesmal mit "null" überschrieben wird. Oder habe ich da einen Denkfehler?
                          Wenn du new Friend(243) schreibst, soll das Objekt die Daten des Freundes mit der ID 243 aus der DB holen. Wenn du new Friend() schreibst, werden keine Daten aus der DB geholt, sondern nur das Objekt initialisiert, das dann mit deinen Daten aus dem Formular gefüllt werden kann.

                          Wenn du also einen Freund anzeigen willst, holst du seine Daten mit new Friend($request->id) aus der Datenbank und gibst sie dann so aus:

                          PHP-Code:
                          <div>
                              <h1><?php echo $friend->getName(); ?></h1>
                              Und hier gibst du weitere Daten aus
                          </div>
                          Wenn du einen Freund erstellen willst, dann machste das so

                          PHP-Code:
                          $friend = new Freund(); // Diesmal ohne ID
                          $friend->setName($request->name);
                          // andere Daten setzen
                          $friend->insert(); // die Methode insert speichert alle Daten des Freundobjekts in einer neuen Spalte in der DB 
                          Ich hoffe du verstehst jetzt was ich damit meine

                          Kommentar


                          • #14
                            Wenn du new Friend() schreibst, werden keine Daten aus der DB geholt, sondern nur das Objekt initialisiert, das dann mit deinen Daten aus dem Formular gefüllt werden kann.
                            Nennt sich auch Proxypattern. *) Damit könnte man bspw. aussagen: User xy hat soundso viele Freunde. Ist aber nicht wahnsinnig sinnvoll, wenn man ohnehin schon die Datenbank anschmeißt.

                            *) Nicht ganz exakt. Im Proxy-Pattern gäbe es noch ein umschließendes Platzhalterobjekt, das ggf. ein echtes Userobjekt nachlädt.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Ich würde gern noch mal eine Erklärung hören, wieso die Klasse „Freund“ heißt und nicht „User“ und was im Zweifel eine „Freund“-Instanz von einer „User“-Instanz unterscheidet.

                              Kommentar

                              Lädt...
                              X