PHP Klassenstruktur

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

folgendes Problem:
Es gibt eine Klasse für Produkte. Nun sollen Produkte bewertet werden. Neben Produkten soll auch allgemein der Shop bewertet werden

Wie könnte am besten eine Klassenstruktur aussehen?
Neben der Produktklasse jeweils eine Klasse für Produktbewertung sowie Shopbewertung? Oder nur eine Klasse für Produkt-und Shopbewertung?
 
Eine Klasse Bewertung und ein Marker-Interfaces "Bewertbar".
Produkt und Shop implementieren Bewertbar, eine Bewertung beinhaltet also eine Note und ein Objekt vom Typ Bewertbar.
 
Hi,

ich glaub hab grad nich alles verstanden :)
Wie ist das gemeint, eine Bewertung beinhaltet also eine Note und ein Objekt vom Typ Bewertbar? Oder kannst es auch ganz kurz am Code zeigen, also so pseudo-mässig
 
Könnte das grade mal schnell in JAVA ausdrücken für php bin ich grade zu müde :ugly:
Code:
public class Poll{
...
}

public interface Pollable{
...
}

public class Store implements Pollable{
...
}

public class Product implements Pollable{
...
}

Aradiv
 
Hi,

für die Ausgabe wird ja dann jeweils eine Abfrage gemacht zu den Produktbewertungen und eine andere für die Shopbewertungen. Das würde ich dann in die jeweilige Klasse schreiben. Wofür ist das Interface? Was kommt dort rein?

Wie kann man denn in Store und Product auf Poll zugreifen?
 
Zuletzt bearbeitet:
Da ice-breaker es als Marker-Interface betitelt hat denke ich, dass das Interface einfach nur existiert und nichts weiter implementiert.
Somit können andere Objekte damit markiert werden, dass sie bewertbaren Inhalt darstellen.

Und die Klasse für die Bewertung beinhaltet dann ein Attribut in welchem eine Klasse vom Typ "bewertbar" (bzw. pollable wie Aradiv es genannt hat) drin steht.
 
Somit können andere Objekte damit markiert werden, dass sie bewertbaren Inhalt darstellen.

Und die Klasse für die Bewertung beinhaltet dann ein Attribut in welchem eine Klasse vom Typ "bewertbar" (bzw. pollable wie Aradiv es genannt hat) drin steht.

das hört sich logisch an, aber ich kapier es leider nicht so richtig. an einem codebeispiel würde es mir bestimmt mehr sagen oder ein Link zu mehr Infos.
 
Innerhalb der Klassen steht deine Shop-spezifische Implementierung. Wie das genau aussieht, kann man schlecht in 5 Zeilen packen.

Im Normalfall gibt der Benutzer halt eine Bewertung ab und du speicherst sie ab und zeigst sie dann oder einen Durchschnittswert (je nachdem wie so eine Bewertung aussieht) auf einer gesonderten Seite oder auch direkt neben dem Bewertungsbildschirm an. Keine Ahnung, ob es bei dir überhaupt eine Bewertungsseite geben soll oder die Bewertungen über eine Schnittstelle kommen oder von einer anderen Datenquelle eingelesen werden.

So viele Möglichkeiten... die Klassenhierarchie is aber immer dieselbe.
 
Ich meinte eher den Zusammenhang der Poll-Klasse, dann dem Interface und der jeweiligen Bewertungsklasse für Shop und Produkt, und was wo reingehört. Dabei bin ich mir noch unsicher. Also welche Dinge gehören wo rein.
 
Und die Klasse für die Bewertung beinhaltet dann ein Attribut in welchem eine Klasse vom Typ "bewertbar" (bzw. pollable wie Aradiv es genannt hat) drin steht.

besonders das hier versteh ich nich nicht so richtig. An einem Stückchen Code ist das wohl besser zu verstehen

Was sollte denn hauptsächlich in die Klasse Poll rein?
 
Zuletzt bearbeitet:
Ich meinte eher den Zusammenhang der Poll-Klasse, dann dem Interface und der jeweiligen Bewertungsklasse für Shop und Produkt, und was wo reingehört. Dabei bin ich mir noch unsicher. Also welche Dinge gehören wo rein.
Kannst nur du wissen.

In die Klasse für den Shop, was der Shop kann,
in die Klasse für das Produkt, was das Produkt kann und
in die Klasse Poll stellt die Bewertung da (wobei "Poll" engl. für Umfrage is und "Vote" wohl imo besser passen würde).
Was sollte denn hauptsächlich in die Klasse Poll rein?
Kommt ganz drauf an, wie bei dir eine Bewertung aussieht. Hab ich aber schon vorhin gesagt, was es da alles für Möglichkeiten gibt.

Die Posts #2 und #4 beantworten deine Frage ganz allgemein. Die konkrete Implementierung liegt bei dir. Das is ja das Tolle an der OOP ;)
 
Hi,

mir fehlt irgendwie die Verbindung. Wo würde ich denn z.B. die Berechnung eines Durchschnittswertes machen? Oder die Gesamtanzahl an Bewertungen?

PHP:
class Product{

   public function getVotes($produkt_id){
       return Votes::findVotesForProdukt($produkt_id)
   }

}

class Shop{
   public function getVotes(){
       return Votes::findVotesForShop()
   }
}

class Vote{
    //saveVote
}
 
Zuletzt bearbeitet:
(wobei "Poll" engl. für Umfrage is und "Vote" wohl imo besser passen würde)

Wie gesagt war schon etwas müde :ugly:

Hi,

mir fehlt irgendwie die Verbindung. Wo würde ich denn z.B. die Berechnung eines Durchschnittswertes machen? Oder die Gesamtanzahl an Bewertungen?

Wo macht es den Sinn?
Muss die Klasse Shop das zählen/anzeigen/berechnen können oder würde es im View vieleicht auch gehen zu schauen was den voteable ist und dann dort die Anzeigen hinschalten weitergereicht wird das dann an Vote.
Oder unterscheidet sich irgendetwas zwischen einem Vote bei einem Product und einem Vote bei einem Shop?

Die Sicherung der Ergebnisse ist dann eine weitere Ebene.

Vote
id|product|shop|votes|average

in nur eines der beiden Felder product und shop ist ausgefüllt das andere ist NULL.

Aradiv

Ps.: DRY & KISS
 
Hi,

die Bewertungen unterscheiden sich nicht.
Gesamtzahl und Durchschnitt lassen sich ja durch Abfragen ermitteln. Sollten z.B. solche Abfragen dann mit in die Produktklasse oder in die Vote-Klasse? Zu jeder Bewertung kann auch noch ein Kommentar abgegeben werden.
 
Was sollen Product und Shop mit den Werten?
Die einzige "Klassen" die diese Werte braucht ist meiner Meinung nach Vote.

Ansonsten hättest du eine "Wiederholung" in Product und Shop da der Code für beide ja (nahezu) identisch ist.

und wenn du die Bewertungen einzeln speichern willst kein Problem ist ja nur eine Änderung an der Datenhaltung.

Aradiv
 
Eine Produktbewertung bezieht sich auf ein bestimmtes Produkt, eine Shopbewertung nur allgemein auf den Shop, also benötige ich ja auch 2 Abfragen.
Die Werte benötige ich zur Ausgabe, aber kann ich mir ja dann über die Vote-Klase holen und das wär ja dann so wie mein kleines Beispiel weiter vorn.
 
Naja aber für was braucht Shop oder Product die Daten was machen die damit?
Einfach weiterreichen?
Dann kannst du es doch auch direkt aus Vote holen.

PHP:
class View{
$products=new Array(new Product("Test"), new Product("Test2"));
$shops=new Array(new Shop("Shop1"), new Shop("Shop2"));

echo Vote::getAverage($products[0]);
echo Vote::getAverage($shops[1]);
}

Aradiv
 
Hi,

achso jetzt weiß ich was du meinst.
Das stimmt, ich brauche die Daten eigentlich nur zur ausgabe. Produkt und Shop müssen damit nix machen.

Die Funktion getAverage() müsste also dann die Datenbankabfrage enthalten, die den Durchschnitt ausgibt (SELECT AVG(...)) oder?