2009-12-29 23 views
8

Lavoro in un negozio di sviluppo web, quindi naturalmente ci occupiamo di profili utente. Quando ho avuto a che fare con uno dei nostri siti ho notato che non esisteva una classe "User", che mi sembrava strana dato che abbiamo sicuramente utenti. Invece il sito si basa sull'interazione con DataRows (questo è C#) restituito attraverso metodi statici con poca o nessuna istanza. Ho chiesto al mio capo di creare una classe per gli utenti e la sua risposta è stata che dal momento che gli oggetti devono essere ricostruiti così tanto spesso non ne vale la pena.La progettazione orientata agli oggetti ha un ruolo nello sviluppo web?

Sono relativamente nuovo allo sviluppo web e sembra un po 'uno spreco dover istanziare oggetti ogni volta che la pagina viene ricostruita, ma d'altra parte ho sempre trovato utile la programmazione orientata agli oggetti. Quindi sono curioso di avere alcune opinioni, quanto usi OOP nello sviluppo web?

+2

Tutto il tempo. Senza di esso, la programmazione Web diventa sempre più difficile da mantenere e utilizza molte duplicazioni. –

+2

Se vuoi solo opinioni. questo dovrebbe essere wiki della comunità. –

+0

Migliore domanda per [Programmatori] (http://programmers.stackexchange.com)? –

risposta

5

Il tuo capo è (purtroppo) un idiota. OO aiuta a creare codice gestibile ben strutturato. La creazione di oggetti è estremamente veloce e anche la raccolta dei rifiuti di oggetti di breve durata è molto veloce.

Quello che hai qui è l'ottimizzazione prematura che porta al codice fragile.

+1

+1 tranne per l'ultima frase. L'esempio non è l'ottimizzazione prematura. È solo una cattiva pratica. – NotMe

+0

Vero, ma è una cattiva pratica a causa del presupposto che OO è troppo lento e il pasticcio procedurale semistrutturato è più veloce senza misurare e confrontarsi. Questo è ciò che intendevo per ottimizzazione prematura. – Paolo

+1

Il codice mantenibile è spesso determinato dal modo in cui è organizzato il codice: questa è la responsabilità dello sviluppatore. Ho visto un sacco di codice impossibile da mantenere in tutte le forme – kmatheny

1

Ovviamente lo fa. Tu (e più ancora il tuo capo) dici "ricostruire" come se fosse un compito ingrato.

Quello che intendi per "ricostruzione" è eseguire il programma. Dì al tuo capo che l'OOP in generale è stupido perché anche in un ambiente desktop ogni volta che qualcuno esegue un pezzo di software gli oggetti devono essere ricostruiti, quindi non ne vale nemmeno la pena.

3

OOP non è altro che un paradigma di programmazione !! ma la sua importanza è che hi è il paradigma attuale in uso il che implica che tutta la conoscenza moderna e migliori pratiche nel campo dell'ingegneria del software saranno espresse seguendo questo stile di programmazione ...

Un buon esempio nel tuo caso (web di sviluppo) è la Core J2EE Patterns.

alt text http://java.sun.com/blueprints/corej2eepatterns/images06/figure06_02.gif

+0

Woah, immagina quel sistema senza OOP ... –

+0

Ci sarebbero set di dati (array) e funzioni operative su di essi. Il sistema sarebbe probabilmente molto più semplice in quanto alcuni degli oggetti diventerebbero una singola funzione. – Calmarius

11

l'unica volta che non uso OOP è quando:

  1. Sto creando un semplice progetto per testare la logica. Questo di solito porta a creare le classi giuste ...

  2. Sto usando ASP classico (stato un po ', grazie a dio).

  3. Non sto programmando.

modificare 3+ anni dopo la pubblicazione di cui sopra; Sto aggiungendo un po 'alla mia risposta.

OOP è ottimo e ci consente un'enorme flessibilità per avere più sistemi che interagiscono con la stessa logica/dati. Tuttavia, c'è sicuramente una situazione in cui non vorrai preoccuparti di caricare molti oggetti. Ovvero, quando stai semplicemente tirando i dati per il display tabulare.

Interrogare un database e ottenere un semplice record setback che viene immediatamente emesso nel browser in genere non richiede OOP.In effetti, si potrebbe voler aggirare completamente l'OOP in quanto i dati tabulari di solito implicano un aumento di altre informazioni (somme di record figlio) e normalmente non si desidera estrarre più dati dal database di quelli che si stanno effettivamente utilizzando. vale a dire. se si sta mostrando solo il nome e l'e-mail, probabilmente non si vuole prendere il nome utente in quanto si tratta di cicli sprecati.

Ora, inserire le informazioni in un DB implica in genere che venga seguita una determinata logica di business. Ad esempio, il nome utente segue determinate regole. In quelle situazioni l'utilizzo di uno stile OOP mantiene le cose un po 'più incapsulate e facilmente trasferibili tra i sistemi.

Quindi, osservando l'esempio specifico: non mi preoccuperei più di consegnare un datatable a un ripetitore durante il pull dei dati; ma avrei una classe utente per quando ne creerò una nuova o opererò su quell'utente per assicurarmi che le regole di business vengano seguite correttamente.

+0

+1 per il terzo punto elenco: D – Paolo

1

Il commento del capo è inutile. Il framework .net è costituito da oggetti e nient'altro. Una "risposta" è un oggetto, anche in "ASP classico" - perché la gente lo avrebbe implementato se quella risorsa fosse inefficace?

1

Sebbene gli oggetti rendano più facile lo sviluppo di alcuni programmatori, ho letto l'esempio perfetto di come creare un intero sito Web senza OOP. Non una volta l'oncia. Scopri l'ultima pagina in una pagina di 20 serie intitolata PHP Clean:

http://okmaya.com/clean-php/clean-php-step-20/

Super facile da seguire, modo pulito di costruire un intero sito web. Nessun OOP confusionario, nessuna cartella super nidificata, nessun pazzo codice di spaghetti da seguire per ore ... Solo funzioni semplici, pulite e ben strutturate che fanno TUTTO ciò di cui hai bisogno, senza l'uso di OOP. E questo esempio ha tutto, dalle credenziali di accesso/registrazione, una sezione di amministrazione (CMS), persino alle fixture del database per iniziare, una funzione di ricerca che utilizza l'API di mapquest per effettuare ricerche di codice postale/latino ... Voglio dire che ha TUTTO per un progetto principale o sito web.

Perché preoccuparsi di OOP? Il codice procedurale pulito e ben strutturato è ottimo!

Sull'argomento OOP. Ricordo un'altra moda che tutti pensavano fosse bello, e tutti lo fecero, ma poi scoprirono che il fumo ti dava un sacco di problemi.

Attenersi al semplice, attenersi a ciò che si sa. Diventa un esperto di PHP e non devi mai più dipendere da un framework. Non farmi iniziare con OOP MVC Frameworks. Le lingue interpretate per il web non sono mai state intese come OOP. OOP aggiunge solo un altro livello di complessità. Smettila di essere pigro. Usa il tuo PHP e impara come programmare un programma!

D'altra parte, posso vedere come rendere i giochi su una console può essere difficile senza OOP. Ma poi di nuovo, sono mele e arance. I giochi di console mantengono i loro oggetti in memoria fino alla fine del gioco, o l'oggetto viene distrutto dall'interno del gioco. Pensaci ... Perché hanno una barra di caricamento di fronte a ogni livello? Ora immagina una pagina web che deve mostrare una barra di caricamento ogni volta che viene caricata perché deve creare oggetti da un database. SLLOOOOOOWWWW centrale! E una volta che ti allontani da questa pagina, devi ricominciare tutto da capo.

Le pagine Web sono applicazioni interne. È come ricostruire il tuo drag racer ogni volta che vai sulla linea di partenza, solo per smontarlo al traguardo. WTFridge? Sul serio? Ehi, i super geni che pensano che OOP sia così bello ... Mantieni il tuo dannato OOP fuori dai miei siti web!

Solo dicendo, questo è tratto dalla mia esperienza di più di 10 anni con lo sviluppo web, sai quando abbiamo usato il codice delle pagine in HTML, uno per uno?

+0

È corretto che sia assolutamente necessario ignorare completamente l'OOP per i siti Web. Soprattutto quando si utilizza un linguaggio basato su uno stile funzionale di codifica. Per la maggior parte dei siti questo è l'approccio più semplice e migliore. Tuttavia, sempre più siti non sono più codificati nel vuoto. Significa che il sito è solo una interazione con la logica o i dati principali.Potrebbero esserci servizi (windows o cron), app mobili, app desktop, ecc. Che condividono tutti comunanza. In questi casi l'utilizzo delle procedure OOP porterà a un sistema più gestibile. Quindi +1 per trovare un motivo per tenere fuori OOP. – NotMe

3

Una domanda: i dati devono essere accoppiati con le chiamate di funzione/metodo? In caso contrario, OOP non è necessario.

L'approccio migliore potrebbe essere quello di trovare una lavagna vuota, creare un modello di alto livello utilizzando Object Oriented Design, quindi con Functional Design, quindi con Procedural. Potresti sorprendervi (e altri) con i risultati. La stessa lingua può essere utilizzata in modi molto diversi a seconda del progetto. Come menzionato da @wj. OOP è solo un paradigma, non aver paura di uscire dalla tua zona di comfort e progettare utilizzando un paradigma diverso.

Prendendo tempo per progettare utilizzando diversi paradigmi ti aiuterà anche quando ti avvicini al tuo capo per discutere perché dovresti o non dovresti usare l'attuale paradigma. La maggior parte dei capi apprezzerà il fatto che tu abbia dedicato del tempo alla ricerca prima di approcciarli con un'idea - questo non vuol dire che accetteranno la tua idea, ma essere consapevoli di entrare ti permetterà potenzialmente qualche minuto in più della sua attenzione .

IMHO (non prendere questo personalmente), "Object Oriented Programming" è caduto con il calibro di "Web 2.0" - una parola d'ordine di sorta, che è sfortunata; ora vedete gli sviluppatori forzare OOP dove sarebbe meglio usare FP o PP.

Il miglior consiglio professionale che posso dare a è di progettare (ad alto livello all'inizio, quindi immergersi in basso) in più paradigmi (fai del tuo meglio per non essere di parte - tieni una mente aperta) e decidi quale meglio si indirizza il modo in cui funziona la tua applicazione. Nella mia esperienza di 15 anni, il 75%% delle volte che trovo OOP non è necessario, sebbene il mio attuale progetto sia strettamente OOP.

Una domanda più importante/pertinente sarebbe: "Il design orientato agli oggetti ha un posto nello sviluppo del mio corrente?"

Problemi correlati