Scelte progettuali OOP in un'app Web

-1

Sto per iniziare la programmazione per un progetto scolastico che richiede di dimostrare buone pratiche OO in un'applicazione web. Ora, ho creato alcune app Web e non ho mai sentito la necessità di definire le mie classi e utilizzare gli oggetti (al di fuori delle classi fornite da framework e moduli), quindi stavo cercando aiuto per prendere alcune decisioni di progettazione. Potrebbe sembrare che sto forzando un po 'di complessità in un progetto che è troppo semplice da giustificare ma è a scopo dimostrativo.

L'app Web è estremamente semplice. Il "database" è solo un file JSON locale con 2 raccolte che saranno le "tabelle": utenti e sondaggi. Queste raccolte sono elenchi di raccolte di voci.

La mia prima inclinazione è definire una classe di connessione "database". Questa classe creerebbe un oggetto file del file JSON in modalità lettura / scrittura sull'istanza e conterrà alcuni metodi per l'inserimento, l'aggiornamento, l'eliminazione, ecc ...

Ma questa è l'unica parte del progetto a cui posso pensare che ragionevolmente meriti una lezione. Devo definire le classi utente e sondaggio e creare oggetti di quelli ogni volta che è necessario inserirli nel database? I dati arriverebbero nell'app da un modulo html e normalmente userei solo una funzione per massaggiarla nel formato giusto e quindi chiamare la funzione database per inserirla. Istanziare una classe da qualche parte in quel processo sembra completamente inutile.

Gli utenti possono creare sondaggi e votare su altri sondaggi e visualizzare i risultati dei sondaggi precedenti. I sondaggi conterranno una data di inizio e una data di fine e una volta che la data di fine è stata superata i risultati verranno conteggiati e memorizzati in una chiave "risultati" nella raccolta di voci di quel sondaggio.

Ci sono solo 2 entità in questa app: utenti e sondaggi. Quindi, più specificatamente, sto chiedendo dovrei creare una classe di connessione al database con metodi insert, update etc OR classi per utenti e sondaggi che hanno metodi come vote () e update () che poi interagiscono con il file JSON

Dove sarebbe meglio implementare le classi qui?

    
posta Dylan D. 14.02.2018 - 18:03
fonte

2 risposte

0

La classe "database connection" è già fornita dal driver / DBI.

Mi concentrerei su un modello di dati adeguato: quali entità hai? Come interagiscono?

Uno è ovviamente il livello del dominio: utenti, sondaggi, voti, ecc.

Un'altra è la struttura dell'app Web: pagine e interazioni. Sono per lo più dettate dal framework web che si prende, se si prende qualcosa come Django. Sono più a te se prendi qualcosa come web.py.

Una nota finale: OOP può essere uno strumento utile, ma non è un fine a se stesso. Non complicare eccessivamente le tue lezioni. Inoltre, definisci i tuoi dati per primi e tutto il resto seguirà molto più facilmente.

    
risposta data 14.02.2018 - 18:21
fonte
0

La maggior parte delle volte ottieni un buon punto di partenza con una serie di risposte ad alcune domande chiave:

1) Quali sono Nouns / Subjects nelle frasi che descrivono il sistema?

2) Qual è il comportamento attribuito a questi subjects ?

3) Quali sono le relazioni tra questi subjects ?

Due subjects sono menzionati da te:

  • Users

  • Polls

Quindi viene risposto (1).

Forse questo è sufficiente per descrivere il sistema che stai per costruire.

Dovresti trascurare il fatto - almeno per il momento - che stai costruendo una webapp; dimentica Classbased Views , Managers ecc.

Cosa potrebbe fare Users ? C'è qualche tipo di Authentication sul tuo sistema in corso? C'è qualche tipo di Authorization in corso? In tal caso, ci sono differenze tra Users ? Quando sono coinvolti diversi ruoli, come devono essere rappresentati? Queste e altre domande devono essere poste per dare una risposta estenuante a (2).

Riguardo a (3): che cosa Users con Sondaggi? Fanno create , participate , delete polls ? starting a poll è un comportamento di User o di Poll ?

Queste e altre domande ti aiutano a ottenere a ) una buona comprensione del domain per il quale stai creando una soluzione e b ) ti aiutano a progettare un object oriented sistema.

Il tasto per OOP raggruppa dati e (modifica) comportamento insieme .

Quando hai modellato il tuo domain , inserendo il modello del mondo in un'applicazione Web o in un'applicazione desktop, l'applicazione della console o qualsiasi altra cosa è secondaria e dovrebbe essere facile.

    
risposta data 16.03.2018 - 20:22
fonte

Leggi altre domande sui tag