Domanda

In questo momento mi sembra di essere coinvolto in un dibattito con un altro programmatore su questo progetto che pensa che le opinioni non abbiano merito.Propone un sistema in cui PHP assomiglia a questo:

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

e così via (questo è nel controller tra l'altro).Ora le sue argomentazioni a favore di questo hanno effettivamente un senso, afferma che se c'è una riprogettazione tutto ciò che dobbiamo fare è cambiare l'HTML in un posto e cambierà ovunque automaticamente.Per qualche motivo, tuttavia, questo metodo mi dà ancora fastidio, c'è qualche merito nelle opinioni su questo metodo?Voglio dire oltre a non dover riscrivere l'HTML a mano.

È stato utile?

Soluzione

I risparmiatori di tempo HTML sono utili, ma sono utili solo quando sono intuitivi e facili da comprendere.Dover istanziare a new Draw semplicemente non sembra molto naturale.Inoltre, wideHeaderBox E left avrà significato solo per qualcuno che conosce intimamente il sistema.E se lì È una riprogettazione, come le muse dei tuoi colleghi?E se il wideHeaderBox diventa molto stretto?Cambierai il markup (e gli stili, presumibilmente) generato dal metodo PHP ma lascerai un nome del metodo molto impreciso per chiamare il codice?

Se voi ragazzi, semplicemente Avere per usare la generazione HTML, dovresti usarlo intervallato nei file di visualizzazione e dovresti usarlo dove è veramente necessario/utile, come qualcosa del genere:

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

Nell'esempio sopra, i nomi dei metodi hanno effettivamente senso per le persone che non hanno familiarità con il tuo sistema.Avranno anche più senso per voi ragazzi quando tornerete in un file visitato di rado e vi chiederete cosa diavolo stavi facendo.

Altri suggerimenti

L'argomento che usa è l'argomento di cui hai bisogno Avere visualizzazioni.Entrambi comportano la modifica solo in un posto.Tuttavia, nella sua versione, stai mescolando il markup della vista con il codice aziendale.

Suggerirei di utilizzare più un design basato su modelli.Esegui tutta la logica del tuo business in PHP, imposta tutte le variabili necessarie alla tua pagina.Quindi fai in modo che il markup della tua pagina faccia riferimento a tali variabili (e non gestisca alcuna logica aziendale).

Hai guardato Smarty? http://smarty.php.net

Ho fatto qualcosa del genere in passato ed è stata una perdita di tempo.Ad esempio, devi praticamente scrivere wrapper per tutto ciò che puoi già con HTML e dimenticherai alcune cose.Quando avrai bisogno di cambiare qualcosa nel layout penserai "Cavolo, me ne ero dimenticato... ora devo codificare un altro metodo o aggiungere un altro parametro".

Alla fine, avrai un'enorme raccolta di funzioni/classi che generano HTML che nessuno saprà o ricorderà come utilizzare tra mesi.I nuovi sviluppatori ti malediranno per aver utilizzato questo sistema, poiché dovranno impararlo prima di cambiare qualsiasi cosa.Al contrario, probabilmente più persone conoscono l'HTML rispetto alle tue lezioni di disegno HTML astratto... e a volte devi semplicemente sporcarti le mani con l'HTML puro!

Sembra piuttosto prolisso e difficile da seguire a dire il vero e parte del codice sembra contenere molte informazioni sul layout.

Cerchiamo sempre di separare il più possibile la logica dall'output.Tuttavia, spesso accade che la vista e i dati siano strettamente collegati con entrambe le parti che dettano come dovrebbe essere l'altra (ad esempio, in un semplice sito di e-commerce, potresti decidere di voler iniziare a mostrare i livelli delle scorte accanto a ciascun prodotto , il che ovviamente comporterebbe la modifica della visualizzazione per aggiungere l'HTML appropriato e la logica aziendale per individuare un valore per il titolo).

Se il pensiero di mantenere 2 file per fare ciò è troppo da gestire, prova a dividere le cose in una parte "Raccogli dati" e una parte "Visualizza visualizzazione", ottenendo la maggior parte dei vantaggi senza aumentare il numero di file che devi gestire .

Trovo sempre molto più semplice lavorare direttamente con html.C'è un livello di astrazione in meno (html -> pagina web effettiva/funzione php -> html -> pagina web effettiva) da gestire, quindi lavori solo in HTML.

Penso davvero che la cosa "devo solo cambiarlo in un posto" non funzionerà in questo caso.Questo perché saranno tante le volte in cui vorrai modificare l'output di una funzione, ma solo in un solo posto.Certo puoi usare gli argomenti, ma presto ti ritroverai con alcune funzioni che hanno una dozzina di argomenti.Che schifo.

Tieni presente che i linguaggi/sistemi di template spesso ti consentono di includere sottomodelli, permettendoti di avere alcuni blocchi html riutilizzabili.

Il punto è che se avessi appena iniziato a lavorare nella tua azienda e avessi visto codici del genere ovunque, il mio primo pensiero sarebbe stato: "Dannazione!"Hai bisogno di nuovo di un nuovo lavoro.'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top