Piccole classi e metodi, ma codice ancora difficile da mantenere e da seguire

5

Ho fatto qualcosa di sbagliato nella mia organizzazione del codice? Trovo ancora difficile seguire il mio programma. Ho provato a scomporre il mio programma su classi e funzioni piccole e facili da capire, tuttavia mi trovo a saltare per seguire il processo di azione.

Non posso pubblicare il mio intero progetto qui, quindi ecco un esempio di un processo. Il mio codice è un'app nodejs, che utilizza un'organizzazione (modello) C (modello) M (modello). Quelle sono specifiche per il progetto, e ho una quarta sezione di classi e funzioni "utilities" che riutilizzai da un progetto all'altro.

Il progetto è una directory web in cui l'utente può postare collegamenti. Ecco il processo con tutti gli attori intervenienti di un post dell'utente:

  1. Gestore del post del controller: ottiene la richiesta del post.
  2. Gestore post controller: viene eseguito form.parse per ottenere input di campo
  3. Funzione validationResult del modello: istanziare il modello
  4. Errore di convalida del modello: riceve l'istanza, chiama StringValidation nel file di utilità e restituisce errori di convalida o conferma per proseguire se non ci sono errori.
  5. Funzione validationResult del modello: recupera il risultato da 4). Se non ci sono errori, restituisce queste informazioni al controller
  6. Controller: riduce il titolo da un file di utilità, quindi crea una voce chiamando un'utilità di database dalla directory dell'utilità.
  7. reindirizzamenti.

Quindi per creare una voce, vengono utilizzati molti metodi distribuiti in controller, modelli e utilità. Quando devo risolvere un problema o aggiungere una funzionalità, devo rintracciare e ricomporre l'intero processo tra 3 file e probabilmente due volte metodi e classi.

Sono un po 'bloccato qui: ho cercato di creare un'architettura modulare di parti piccole, leggibili e riusabili, ma non sono sicuro di aver creato qualcosa di più semplice per mantenere quella enorme struttura lineare.

Come avresti organizzato questa struttura? Se la scomposizione di un programma in componenti piccoli, riutilizzabili e monouso è ciò che dovremmo fare come la maggior parte dei libri sostiene, dobbiamo intrinsecamente passare dai metodi alle classi e non vedo come questo faciliti il processo.

    
posta Benj 09.06.2016 - 12:01
fonte

1 risposta

6

Più piccoli sono gli oggetti, più difficile è visualizzare il flusso del programma.

Ma il problema qui non è che tu abbia degli oggetti, è che stai cercando di creare un programma dagli oggetti in maniera procedurale. I tuoi oggetti dovrebbero essere scatole nere completamente autonome per il codice chiamante, se puoi renderle simili allora puoi iniziare a usarle senza preoccuparti di quello che fanno.

Pensa a questo: tu usi sempre il tipo di dati int, ma scommetto che non guardi mai dentro gli operatori per vedere cosa fa. L'operatore add per un int funziona "e quindi non ti interessa il flusso di dati quando arriva a quel punto.

Lo stesso dovrebbe valere per gli altri tuoi oggetti, che si tratti di un controller o di un modello di Persona o altro. (in effetti, agli inizi di OO, ero solito ascoltare classi chiamate "tipi", in quanto erano considerati semplicemente tipi di dati complessi definiti dall'utente)

Sono d'accordo sul fatto che molti framework non lo fanno e trattano le classi come un insieme di metodi che vengono chiamati a turno, ed è un peccato che ciò accada. Il meglio che puoi fare con questo codice è creare diagrammi di sequenza per aiutarti a visualizzare e tenere traccia delle schede su di esso.

    
risposta data 09.06.2016 - 13:00
fonte

Leggi altre domande sui tag