PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Was haltet ihr von meinem Programmierstil? (https://www.php-resource.de/forum/php-developer-forum/94390-was-haltet-ihr-von-meinem-programmierstil.html)

carapau 03-11-2008 14:20

Was haltet ihr von meinem Programmierstil?
 
Hallo Community!

Mir fällt auf, dass ich viele Objekte (für jeden Block) erzeuge und frage mich, ob sich das auf die Performance auswirkt. Andererseits finde ich es so genau richtig, da die Blöcke unabhängig voneinander arbeiten sollen und nicht im Vorfeld klar ist welche Objekte benötigt werden (könnte ich ja sonst oberhalb des Switch einmal erzeugen).

Was haltet ihr davon SQL-Code als Parameter zu übergeben?

Hier ein einfacher/abgespeckter Auszug meines Codes:
PHP-Code:

// Datei: admin/news/index.php
switch ($_GET['action']) {
    default:
        
$User = new User;
        
$userId $User->getUserId();
                    
        if (
$userId) {
            
$News = new News();
            
// Die News werden gefiltert durch direkte Eingabe von SQL, dirty? 
            
$entries $News->getEntries("WHERE userId = $userId ORDER BY newstitle");
            if (! empty(
$entries)) {
                
$Smarty = new Smarty;
                
$Smarty->assign("entries"$entries);
                
$Smarty->display("news/index.tpl");
            }
        }
        break;

    case 
'addform':
        
$User = new User;
        
$userId $User->getUserId();
        
        
// Hier muss der User überprüft werden (#2)
        
if ($userId) {
            
$Smarty = new Smarty;
            
$Smarty->display("news/addform.tpl");
        }
        break;

    case 
'test':
        
// Hier wird nichts überprüft            
        
$Smarty = new Smarty;
        
$Smarty->display("test.tpl");
        break;


Gruß
carapau

onemorenerd 03-11-2008 15:17

Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von carapau
frage mich, ob sich das auf die Performance auswirkt
Das kommt auf die Objekte an, bzw. wie teuer deren Konstruktion ist.

Zum Switch: Die Cases werden von oben nach unten geprüft und der default-Case ist sozusagen ein Fallback, der nur zum Zuge kommt, wenn kein anderer Case zutraf. Deswegen steht er eigentlich immer am Ende. Liest sich irgendwie logischer.
Was passiert eigentlich, wenn if($userid) fehlschlägt? Gibst du dann gar nichts aus?
Ich würde die Objekte übrigens vor dem Switch erzeugen. Der einzige Fall, wo du sie nacher nicht brauchst, ist ein Testfall. Der wird im Live-Betrieb wahrscheinlich nie ausgeführt.

Zitat:

Was haltet ihr davon SQL-Code als Parameter zu übergeben?
Passt schon. Es wäre zwar eleganter, diese Klausel in ein Object zu kapseln, aber wenn es dir primär um Performance geht und das SQL auch noch (quasi) statisch ist, kann man das durchaus so lassen.

PHP-Desaster 03-11-2008 15:24

Normalerweise erstellst du dir deine applikationsweiten Objekte an einer anderen Stelle, so zum Beispiel dein Smarty-Objekt. Und innerhalb deines Konstrukts verwendest du die Instanz lediglich.

ghostgambler 03-11-2008 17:26

smarty sollte aber z.B. in jedem Block verwendet werden, dann macht es keinen Sinn 3 Mal $smarty = new Smarty() zu schreiben... einmal drüber und gut, Unabhängigkeit hin oder her man kann es auch übertreiben...

carapau 03-11-2008 18:16

Re: Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von onemorenerd
Das kommt auf die Objekte an, bzw. wie teuer deren Konstruktion ist.

Zum Switch: Die Cases werden von oben nach unten geprüft und der default-Case ist sozusagen ein Fallback, der nur zum Zuge kommt, wenn kein anderer Case zutraf. Deswegen steht er eigentlich immer am Ende. Liest sich irgendwie logischer.
Was passiert eigentlich, wenn if($userid) fehlschlägt? Gibst du dann gar nichts aus?
Ich würde die Objekte übrigens vor dem Switch erzeugen. Der einzige Fall, wo du sie nacher nicht brauchst, ist ein Testfall. Der wird im Live-Betrieb wahrscheinlich nie ausgeführt.

Passt schon. Es wäre zwar eleganter, diese Klausel in ein Object zu kapseln, aber wenn es dir primär um Performance geht und das SQL auch noch (quasi) statisch ist, kann man das durchaus so lassen.

Der Code ist abgespeckt, normal sind da ca. 10 Cases - weit aus komplexer!

Den "default" als letztes setzen macht eigentlich Sinn. Wenn kein Parameter gesetzt wurde, wird der Default und somit die Übersicht aufgerufen. Die Übersicht erscheint prozentual viel häufiger, als die anderen Cases.

Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)

Obwohl, das ist eigentlich der normale Weg, oder?

Zitat:

Original geschrieben von onemorenerd
Normalerweise erstellst du dir deine applikationsweiten Objekte an einer anderen Stelle, so zum Beispiel dein Smarty-Objekt. Und innerhalb deines Konstrukts verwendest du die Instanz lediglich.

Jap, deshalb zweifel ich halt. :) Andererseits würden unbenötigte/überflüssige Objekte erzeugt werden.

carapau 03-11-2008 18:17

Zitat:

Original geschrieben von ghostgambler
smarty sollte aber z.B. in jedem Block verwendet werden, dann macht es keinen Sinn 3 Mal $smarty = new Smarty() zu schreiben... einmal drüber und gut, Unabhängigkeit hin oder her man kann es auch übertreiben...
Da stimm ich dir zu! Objekte, die in JEDEM Block verwendet werden, können vor dem Switch erzeugt werden!

PHP-Desaster 03-11-2008 18:23

Zitat:

Da stimm ich dir zu! Objekte, die in JEDEM Block verwendet werden, können vor dem Switch erzeugt werden!
Ich sag ja nix anderes ;)

Griecherus 03-11-2008 18:28

Re: Re: Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von carapau

Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)

Obwohl, das ist eigentlich der normale Weg, oder?

Es gibt in dem Sinne keinen "normalen Weg". Du möchtest deine Klassen simpel halten? Dann implementiere auch nur genau das, was du benötigst und du kannst dieses "Problem" abhaken ;)
Das bedeutet konkret: Benötigst du kein getNewsByDate, dann implementiere es nicht. Benötigst du kein getNewsByTitle, dann implementiere auch das nicht, und so weiter und so fort.

Und wo wir gerade beim Programmierstil sind: Wieso verwendest du ohne Grund ein Mix aus Anführungszeichen und Hochkommas bei Strings? Bleib bei den Hochkommas, wenn du die Interpolation der Anführungszeichen nicht benötigst.

Grüße

onemorenerd 03-11-2008 18:34

Re: Re: Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von carapau
Der Code ist abgespeckt, normal sind da ca. 10 Cases - weit aus komplexer!
...
Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)
Hm, das riecht nach Adapter und Delegation.

h3ll 03-11-2008 19:09

Re: Re: Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von carapau
Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)

Obwohl, das ist eigentlich der normale Weg, oder?

Bei einem MVC erledigt das alles das Base Model. Man braucht dafür keine einzige Programmzeile schreiben. Nur mal als Beispiel.

PHP-Desaster 03-11-2008 21:16

Zitat:

- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)
Klingt nach Active Record.

unset 03-11-2008 22:37

Kenn ich als http://en.wikipedia.org/wiki/Data_Access_Object

Mit Filter und Listen-Factory genau das was da als Active Record beschrieben wird ;)

PHP-Desaster 03-11-2008 23:17

Zitat:

Kenn ich als Data_Access_Object
Jep, gibt es mehrere sehr ähnliche Ansätze. Reicht im Grunde von Zend_Db_Table bis Doctrine.

carapau 04-11-2008 11:54

Re: Re: Re: Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von Griecherus
Und wo wir gerade beim Programmierstil sind: Wieso verwendest du ohne Grund ein Mix aus Anführungszeichen und Hochkommas bei Strings? Bleib bei den Hochkommas, wenn du die Interpolation der Anführungszeichen nicht benötigst.

Grüße

Hast Recht, werde drauf achten! :teach:

Zitat:

Original geschrieben von h3ll
Bei einem MVC erledigt das alles das Base Model. Man braucht dafür keine einzige Programmzeile schreiben. Nur mal als Beispiel.
Wie meinst du das? Hast ein Beispiel?

---

Mist, ich dachte, ich würde im Sinne von MVC coden.

Hab den Code so getrennt:
- /classes/News.class.php (liefert die Datensätze aus der DB)
- /news/index.php (steuert - siehe Code-Beispiel am Anfang!)
- /templates/news/index.tpl (dumme HTML-Templates)

Ist das nicht MVC? :dontknow:

Grüße

h3ll 04-11-2008 12:09

Re: Re: Re: Re: Re: Was haltet ihr von meinem Programmierstil?
 
Zitat:

Original geschrieben von carapau
Wie meinst du das? Hast ein Beispiel?
PHP-Code:

$person = new person();
$persons person->find_by_citiy('Vienna');

foreach (
$persons as $person) {
    
printf('<div>%s %s</div>'$person->firstname$person->lastname);


In der person Klasse werden nur der Tabellenname und die Relationen eingetragen. Der Rest geht vollkommen automatisch.

Gibt aber auch Unterschiede von MVC Framework zu MVC Framework.

Zitat:

Mist, ich dachte, ich würde im Sinne von MVC coden.

Hab den Code so getrennt:
- /classes/News.class.php (liefert die Datensätze aus der DB)
- /news/index.php (steuert - siehe Code-Beispiel am Anfang!)
- /templates/news/index.tpl (dumme HTML-Templates)

Ist das nicht MVC?

Nein, MVC heißt Model - View - Controller.


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:49 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG