Quale schema usare quando voglio incapsulare grandi blocchi di codice?

0

Ho una struttura dati, un grande dizionario, che è mutato da diverse funzioni. Ogni funzione esegue una chiamata al database, alcuni calcoli e quindi modifica il valore di una chiave nella struttura dati. Ogni funzione non cambia mai più di 2 tasti nel dizionario, con la maggior parte delle funzioni che ne cambiano solo uno.

Ho incapsulato tutto questo codice in una classe ma non riesco a capire come chiamarlo. Ho pensato di andare con la strategia ma il mio collega ha giustamente sottolineato che non c'è mai più di un'implementazione di quella classe.

Esiste anche un modello di design applicabile?

    
posta ruipacheco 04.07.2016 - 15:11
fonte

2 risposte

5

Potresti chiamare la classe a Facade per il database e il dizionario chiave / valore.

Una facciata è una classe che incapsula operazioni che consistono in più chiamate complesse a diversi oggetti dietro un singolo oggetto con un'interfaccia molto più semplice.

    
risposta data 04.07.2016 - 15:28
fonte
1

Prima di applicare un modello, chiarisci cosa vuoi ottenere!

  1. Vuoi ridurre gli effetti collaterali di tali funzioni? Assicurati che le tue funzioni abbiano parametri di input corretti e produca il risultato come valore di ritorno. Quindi lascia che il chiamante modifichi il dizionario.

  2. Vuoi ridurre i duplicati (o un codice simile)? Inizia con 1, ma assicurati che le funzioni abbiano un'interfaccia uniforme, quindi puoi usare il modello di metodo del modello per chiamare quelle funzioni. Inoltre, guarda se puoi refactoring parti comuni in funzioni helper riutilizzabili.

  3. Vuoi rendere più controllabili le tue funzioni? Inizia con 1, ma rimuovi anche la chiamata al database diretto dalle funzioni. Passa i dati di input attraverso un repository più o meno generico alle funzioni (che fa le query DB), in modo che possa essere deriso. Oppure, se le query del database sono molto uniformi, potresti pensare a costruire una soluzione in cui il chiamante di tali funzioni esegue preventivamente la query db e passa il risultato direttamente nelle funzioni.

Potresti avere un altro problema in mente, dal momento che hai scritto qualcosa sui "grandi blocchi di codice" nel tuo titolo, ma il testo della tua domanda parla di "varie funzioni" (che è più un indicatore per i blocchi di codice di piccole dimensioni). Quindi forse dovresti considerare di riconsiderare la tua domanda e aggiungere ulteriori informazioni, se i punti precedenti non risolvono il tuo problema.

    
risposta data 04.07.2016 - 17:01
fonte