Beispiele für gute Klassenstrukturen gesucht

20/12/2014 - 12:29 von Michael Vogel | Report spam
Moin!

Ich bin zwar seit Jahrzehnten (hauptberuflich) Programmierer, aber
leider hauptsàchlich mit Sprachen, die nur eingeschrànkt
objektorientiert sind - so sieht auch mein PHP-Code aus :)

Ich bin seit einiger Zeit beim Friendica-Projekt aktiv (ein soziales
Netzwerk, grob vergleichbar mit Diaspora). Wir überlegen derzeit, den
bestehenden Code zu überarbeiten, da auch die Ursprungsprogrammierer
nicht sonderlich objektorientiert gearbeitet haben.

Da ich kaum von Sachbüchern lernen kann, sondern fast ausschließlich nur
über Beispiele, würde ich mich gerne für die Definition von Klassen
anhand guter Beispiele orientieren.

Ich würde gerne eine Klasse erstellen, die sich um die Beitràge kümmert,
d.h. anlegen, àndern, löschen, suchen, ...

Hier ist dann schon die Frage, wie man mit Eingangs- und
Ausgangsparametern arbeitet. D.h. wàre es sinnvoll, eher so zu arbeiten:

$item = new Item();
$item->title = "Test";
$item->body = "Das ist ein Test";
$item->store();

Oder eher so:

$item = new Item();
$message = array();
$message["title"] = "Test";
$message["body"] = "Das ist ein Test";
$item->store($message);


Die selbe Frage gilt auch für Rückgabe, d.h.:

$item = new Item();
if $item->FindById(4711) {
echo $item->title;
echo $item->body;
}

Oder eher so:

$item = new Item();
$message = $item->FindById(4711);
if ($message) {
echo $item->title;
echo $item->body;
}

Wobei man die Suche natürlich auch so machen könnte:

$item = new Item();
$item->id = 4711;
if $item->Find() {
...


Die nàchste Frage wàre: Parameter oder Methode?

Beim Speichern von Beitràgen gibt es grundsàtzlich zwei verschiedene
Arten von Beitràgen: Die einen kommen von anderen Servern und werden
entgegengenommen. Die anderen werden von lokalen Usern erstellt und
werden zu den anderen Servern geschickt.

Dies könnte man dann z.B. so machen:

...
$item->store();
$item->notify();
...

Oder so:

...
$item->notify = true;
$item->store();
...

Sobald ich die entsprechenden "Best Practices" begriffen habe, könnte
ich mit dem Umschreiben anfangen. Ich gehe davon aus, dass ich nicht auf
Anhieb die beste aller Lösungen erstellen kann - aber zumindest die
Fassade sollte sauber sein. Wenn die Klasse nach außen hin gut aufgebaut
ist, ist es einfacher, immer mal wieder intern aufzuràumen,
umzustrukturieren, etc.

Wenn mir jemand mit ein paar Tipps und Beispielen unter die Arme greifen
könnte, wàre ich sehr froh.

Danke!

Michael
 

Lesen sie die antworten

#1 Stefan+Usenet
20/12/2014 - 12:58 | Warnen spam
On Sat, 20 Dec 2014 12:29:23 Michael Vogel wrote:
Ich würde gerne eine Klasse erstellen, die sich um die Beitràge
kümmert, d.h. anlegen, àndern, löschen, suchen, ...

Hier ist dann schon die Frage, wie man mit Eingangs- und
Ausgangsparametern arbeitet. D.h. wàre es sinnvoll, eher so zu
arbeiten:



Wenn ich dazu etwas schreibe, dann werde ich eh wieder kollektiv
gesteinigt, weil ich alles anders mache, als der Rest der Welt :)

Persönlich bevorzuge ich das hier:

$item = new Item();
$item->title = "Test";
$item->body = "Das ist ein Test";
$item->store();



Wobei ich im Lauf der Jahre dazu übergegangen bin, anstatt
Properties gleich Methoden zu verwenden, also:

| $item = new Item();
| $item->setTitle("Test");
| $item->setBody("Das ist ein Test");
| $item->store();

Zum einen hilft das ein wenig bei Umbauten, weil man z.B. in der
Übergangsphase in den Settern passende Umleitungen einbauen kann.

Zum anderen verlagere ich aber auch zusehends mehr Anteile der
Validierung direkt in die Objekte, habe also dort z.B. für die
Property "Title" schon gespeichert, dass sie:

a) einen String enthàlt, dass
b) dieser eine maximale Lànge von n Zeichen hat, und dass es sich
c) dabei um ein Pflichtfeld handelt

Das wird alle beim Aufruf von ->setTitle("Test") geprüft und
widrigenfalls mit einer Exception honoriert. Damit wird das Leben
auf der Seite der Anwendung spürbar einfacher.

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan, so bockig wie die Welt. GeniesserBastlertràume werden wahr!
(Sloganizer)

Ähnliche fragen