OO Projekt (grosses ? )

OO Projekt (grosses ? )

am 29.06.2006 19:08:36 von Jonas Schnelli

Hallo Profis!

Vor dem OO Programmieren habe ich mich immer gedrükt.
Jetzt möchte ich mein erstes Projekt in OO aufbauen.
Dazu ein paar Fragen:

1. Statische Helper Klassen oder wie sonst?
Ich möchte natürlich gerne einen DB Wrapper erstellen,.. dass habe ich
mal mit einer classe voll mit statischen Funktionen erstellt.
Z.b. db::connect($server,...), oder db::execute($query);

leider kann ich ja aus diesem Modell keine Instanz machen,.. da ich
dies ja an jedem weiteren Objekt weitergeben müsste. Nicht?

Ich will dann ein Objekt machen.. z.B. so:

class app() {

function loadModule($mod) {
$newmod = new $mod();
$modhtml = $newmod->getHTML();
}

function render() {
echo ".....".$modhtml;
}
}

Will jetzt das mod() auf die DB zugreiffen dann geht das doch nur mit
statischen Funktionen?
Oder?
Wie könnte ich einfach Instanzen machen die ich von allen Objekten aus
verwenden kann? Für z.B. Datumsumwandlungen, DB, HTMLHelpers, etc.?

Danke für die Antwort.

Jonas

Re: OO Projekt (grosses ? )

am 29.06.2006 19:28:30 von Frank Schenk

Jonas Schnelli wrote:
> Hallo Profis!
>
> Vor dem OO Programmieren habe ich mich immer gedrükt.
> Jetzt möchte ich mein erstes Projekt in OO aufbauen.
> Dazu ein paar Fragen:

Du suchst das "Factory pattern".

Google hilft dir weiter, hier ein Beispiel:

http://blog.quantum-star.com/index.php?/archives/215-The-Fac tory-and-Abstract-Factory-patterns-in-PHP.html


hth, Frank

Re: OO Projekt (grosses ? )

am 30.06.2006 11:19:36 von do.not.REMOVETHAT

Jonas Schnelli schrieb:

> Vor dem OO Programmieren habe ich mich immer gedrükt.
> Jetzt möchte ich mein erstes Projekt in OO aufbauen.

Ich weiss nicht, ob das die richtige Vorgehensweise ist. Ich kenne nur 2
Vorgehensweisen: Die der Programmierer und meine.

Programmierer:
--------------
Haben 1000 Bücher über schönen Code gelesen. Haben Java und C++
programmiert. Jetzt machen sie das gleiche in PHP. Wunderschöner Code
mit Tausenden Objekten, reine Lehre.

Ich:
----
Wenn ich 1000 Funktionen und 1000 Variablen im globalen Namensraum
rumfliegen habe wird mir das zu unordentlich und ich fange an, die
thematisch zu grupperen und in Klassen zusammenzufassen. Fertig.

Wie auch immer: OO sollte doch die Lösung sein, mit der alles einfacher
geht. Wenn es das für Dich nicht ist, warum willst Du es dann nutzen?

Grüße, Matthias

Re: OO Projekt (grosses ? )

am 30.06.2006 13:59:01 von Jonas Schnelli

On 2006-06-30 11:19:36 +0200, "Matthias P. Wuerfl"
said:

> Jonas Schnelli schrieb:
>
>> Vor dem OO Programmieren habe ich mich immer gedrükt.
>> Jetzt möchte ich mein erstes Projekt in OO aufbauen.
>
> Ich weiss nicht, ob das die richtige Vorgehensweise ist. Ich kenne nur
> 2 Vorgehensweisen: Die der Programmierer und meine.
>
> Programmierer:
> --------------
> Haben 1000 Bücher über schönen Code gelesen. Haben Java und C++
> programmiert. Jetzt machen sie das gleiche in PHP. Wunderschöner Code
> mit Tausenden Objekten, reine Lehre.
>
> Ich:
> ----
> Wenn ich 1000 Funktionen und 1000 Variablen im globalen Namensraum
> rumfliegen habe wird mir das zu unordentlich und ich fange an, die
> thematisch zu grupperen und in Klassen zusammenzufassen. Fertig.
>
> Wie auch immer: OO sollte doch die Lösung sein, mit der alles einfacher
> geht. Wenn es das für Dich nicht ist, warum willst Du es dann nutzen?

Jetzt mal bitte nicht abschweifen. :)
Für mich macht OO absolut sinn,.. da ich ein Framework für eine gewisse
Applikationsrichtung entwickeln möchte.
Der OO Aufbau bringt einfach klarheit in den Code und ermöglich eine
saubere Bearbeitung im Team.

Der Tipp von Frank hat mich sehr weiter gebracht.
Ich hatte einfach nicht verstanden wie ich an die Objekte z.B. den
Datenbankhandler weitergeben muss.
Ich hatte zuerst immer in den "new" Parameter die DB Instanz übergeben...
hatte gedacht, dass es das nicht sein kann.

Prozedurale Entwicklungen werde ich sicherlich dort einsetzen wo OO
keinen Sinn macht.
OO hat durchaus auch seine Nachteile.

cheers
--
jonas

Re: OO Projekt (grosses ? )

am 04.07.2006 21:50:46 von Lars Feyerabend

Jonas Schnelli schrieb:

> Jetzt möchte ich mein erstes Projekt in OO aufbauen.

Ich bin auch gerade dabei, ein größeres Projekt objektorientiert
aufzubauen.

> 1. Statische Helper Klassen oder wie sonst?

Ja, so habe ich es gemacht. Thematisch sortiert, "User" mit
User-bezogenen Funktionen, "Utilities" mit verschiedenem Krams usw.

> Ich möchte natürlich gerne einen DB Wrapper erstellen,..

Ich verwende den MDB2-Wrapper aus dem PEAR-Projekt. Ich habe eine Datei
db.inc.php im Projekt, die den DSN definiert und ein Objekt $db
erstellt, das ich in den jeweiligen Funktionen per "global $db;"
benutze. Ausgangspunkt meiner Überlegungen war hier, dass ich eh keine
unterschiedlichen Datenbankverbindungen brauche und so die Verbindung
praktisch "recycled" wird.

Ich hoffe, das ist nicht allzu naiv/falsch/unsicher/whatever.

> Wie könnte ich einfach Instanzen machen die ich von allen Objekten
> aus verwenden kann? Für z.B. Datumsumwandlungen, DB, HTMLHelpers,
> etc.?

In PHP5 kannst du einfach ein "public static function" definieren und
wie schon geschrieben per Klasse::Funktion() ansprechen, ohne dafür ein
Objekt erzeugt zu haben.

Gruß,
Lars

Re: OO Projekt (grosses ? )

am 05.07.2006 11:21:11 von thornythegod

Lars Feyerabend schrieb:

>>Ich möchte natürlich gerne einen DB Wrapper erstellen,..
>
> Ich verwende den MDB2-Wrapper aus dem PEAR-Projekt. Ich habe eine Datei
> db.inc.php im Projekt, die den DSN definiert und ein Objekt $db
> erstellt, das ich in den jeweiligen Funktionen per "global $db;"
> benutze. Ausgangspunkt meiner Überlegungen war hier, dass ich eh keine
> unterschiedlichen Datenbankverbindungen brauche und so die Verbindung
> praktisch "recycled" wird.
>
> Ich hoffe, das ist nicht allzu naiv/falsch/unsicher/whatever.

Es ist zumindest unnötig langsam. Besonders das preparen der Statements.
Würdest du PDO verwenden, wärest du erheblich schneller. Solange man
nicht PHP4 verwendet, sollte man PEAR schlichtweg überall heraushalten.

>>Wie könnte ich einfach Instanzen machen die ich von allen Objekten
>>aus verwenden kann? Für z.B. Datumsumwandlungen, DB, HTMLHelpers,
>>etc.?
>
> In PHP5 kannst du einfach ein "public static function" definieren und
> wie schon geschrieben per Klasse::Funktion() ansprechen, ohne dafür ein
> Objekt erzeugt zu haben.

Wenn man denoch mal eine Klasse benötigt, diese aber nur einmal
existiert, kann man durch die Verwendung eines Singleton eine
Delegator-Klasse bauen, welche einem ein sehr sehr statisches Interface
bietet. ;)

Gruß,
Torsten

Re: OO Projekt (grosses ? )

am 06.07.2006 18:23:36 von Lars Feyerabend

Torsten Zühlsdorff schrieb:

> Solange man nicht PHP4 verwendet, sollte man PEAR schlichtweg überall
> heraushalten.

Bezieht sich das jetzt konkret auf die DB-Wrapper wie MDB2 oder
allgemein auf PEAR-Klassen?

Gruß,
Lars

Re: OO Projekt (grosses ? )

am 07.07.2006 09:50:39 von thornythegod

Lars Feyerabend schrieb:

>>Solange man nicht PHP4 verwendet, sollte man PEAR schlichtweg überall
>>heraushalten.
>
> Bezieht sich das jetzt konkret auf die DB-Wrapper wie MDB2 oder
> allgemein auf PEAR-Klassen?

Diese (subjektive) Aussage bezieht sich auf alle PEAR-Klassen. PEAR ist
meiner Meinung nach seid ca. 2 Jahren obsolet. Genauso wie PHP4 ;)

Wenn du PEAR einsetzt, verzichtest du bewußt auf die ganzen "tollen
neuen Features und Möglichkeiten", die dir PHP5 bietet und zwingst es
dazu auch noch abwärtskompatibel zu arbeiten, was die Verarbeitungszeit
verlängert.

Ein sehr gutes Beispiel ist ein DB-Wrapper. PHP5.1 bietet dir PDO -
einen Datenbanklayer. Damit kannst du auch verschiedenste Datenbanken
ansprechen und die Statements gegen SQL-Injection absichern. Der Clue
daran ist die native Implementierung in PHP. Es ist viel viel schneller
als MDB2.
Wenn du in MDB2 hineinschaust, wirst du auch feststellen, dass die
Statements sehr umständlich und langsam mit Hilfe von
Regulären-Ausdrücken escaped werden. Auch das macht PDO viel viel schneller.

Und so kann man durch die Klassen durchgehen und findet immer Gründe,
warum man es nicht verwenden sollte, solange man nicht dazu gezwungen ist.

Gruß,
Torsten

Re: OO Projekt (grosses ? )

am 07.07.2006 19:20:55 von Lars Feyerabend

Torsten Zühlsdorff schrieb:

> Wenn du PEAR einsetzt, verzichtest du bewußt auf die ganzen "tollen
> neuen Features und Möglichkeiten", die dir PHP5 bietet und zwingst es
> dazu auch noch abwärtskompatibel zu arbeiten, was die
> Verarbeitungszeit verlängert.
[...]
> Und so kann man durch die Klassen durchgehen und findet immer Gründe,
> warum man es nicht verwenden sollte, solange man nicht dazu gezwungen
> ist.

Hm, aber gibt es brauchbare Alternativen? Die einzige, die mir spontan
einfiele, wäre "selber machen", aber ob das dann unbedingt schneller
und/oder besser wäre, sei mal dahingestellt. :)

Gruß,
Lars

Re: OO Projekt (grosses ? )

am 17.07.2006 12:04:30 von thornythegod

Lars Feyerabend schrieb:

>>Wenn du PEAR einsetzt, verzichtest du bewußt auf die ganzen "tollen
>>neuen Features und Möglichkeiten", die dir PHP5 bietet und zwingst es
>>dazu auch noch abwärtskompatibel zu arbeiten, was die
>>Verarbeitungszeit verlängert.
>
> [...]
>
>>Und so kann man durch die Klassen durchgehen und findet immer Gründe,
>>warum man es nicht verwenden sollte, solange man nicht dazu gezwungen
>>ist.
>
> Hm, aber gibt es brauchbare Alternativen? Die einzige, die mir spontan
> einfiele, wäre "selber machen", aber ob das dann unbedingt schneller
> und/oder besser wäre, sei mal dahingestellt. :)

Entschuldige die verspätete Antwort - war im Urlaub :)

Natürlich gibt es Alternativen. PEAR ist nicht das einzige PHP-Framework
- schau dich nur mal im Inet um. Es gibt VIELE.

Wobei ich meistens doch eher zum "selber machen" tendiere, da meine
Anforderungen nur sehr selten erfüllt werden - das ist aber nur bei mir
so, da ich mich gerne mit Sonderfällen beschäftige. Die übliche
Webentwicklung langweilt mich mittlerweilen.

Gruß,
Torsten