Domanda

Ho visto questa domanda posta su C # Vorrei una risposta per PHP. Ho del vecchio codice che ha 4 pagine di cicli foreach e condizioni che rendono difficile leggere e seguire. Come lo renderei più OO? Stavo pensando di utilizzare le funzioni SPL ma non capisco ancora bene cosa sia coinvolto.

È stato utile?

Soluzione

Probabilmente questo codice può essere ripulito in modo significativo e spinto lontano nella direzione di OO, senza toccare SPL.

SPL è necessario solo se si desidera modificare il normale comportamento degli oggetti nei costrutti di linguaggio come foreach () o in builtin come count () o nelle funzioni di accesso all'array (sia l'operatore [] che le funzioni come key (), next ( ) ecc.)

Suggerimenti per la pulizia:

  • Se la stessa azione viene eseguita più (più di 1 o 2) volte nel codice, suddividerla in una funzione. Se questa azione deve essere eseguita su tutti gli elementi di un array, considerare l'utilizzo di array_walk . Se la camminata dell'array non si adatta per qualche motivo, utilizzare un loop :)
  • Se hai diverse istanze di alcuni dati semanticamente connessi più complessi di una chiave: coppia di valori, con operazioni associate, considera di includerli in una classe. Ma un socio formalmente documentato. array potrebbe anche adattarsi a te. Dipende dal tuo stile e dal tipo di dati. La cosa importante qui è la strutturazione dei metodi che lavorano sui dati e la documentazione. Non importa se la rendi una classe o meno.
  • Dopo aver eseguito i passaggi precedenti, suddividere le funzioni e gli oggetti appena scritti in file di inclusione separati. Tendo a racimolare quasi tutto in una classe, quindi ho principalmente un pr di classe. file. Ma alcune classi di supporto condividono un file con la classe principale, ecc. Ne avrai un'idea.

Altri suggerimenti

Se fossi in te, inizierei scrivendo il codice di prova.

Se riesci a creare una serie di test che descrivono completamente la funzionalità che stai refactoring, puoi andare avanti e riscrivere il tuo codice in sicurezza sapendo che funzionerà ancora.

PHPUnit potrebbe essere un buon punto di partenza con questo.

Se ti capisco correttamente, hai foreach loop (e simili) nidificati in profondità 4 pagine in profondità, e ti stai chiedendo se questa cosa OO di cui hai sentito parlare può aiutarti.

Dovresti certamente andare avanti e riformattare il codice per ridurre i livelli di annidamento e migliorare la leggibilità, ma non confonderlo con l'Orientamento degli oggetti.

OO è un modo di strutturare il codice per mettere la definizione delle strutture di dati accanto al codice che manipola tali strutture di dati. Mentre uno dei suoi obiettivi chiave è aiutare la leggibilità fornendo incapsulamenti di complessità, OO non è l'unico modo per farlo.

Se non capisci ancora i concetti di OO, potresti trovare più semplice il refactoring del codice per separare il codice all'interno dei loop interni in funzioni separate che (si spera) avranno ciascuna un singolo, semplice compito.

Non fraintendetemi; Sono un sostenitore di OO, soprattutto come tecnica per fornire agli sviluppatori concetti di livello superiore per discutere il design in modo più efficiente. Vale la pena imparare OO.

Ma non lasciare che la mancanza di conoscenza di OO ti impedisca di estrarre il codice interno dai circuiti e metterli in funzioni a scopo singolo.

(Se ho frainteso il tuo livello di conoscenza OO, le mie scuse.)

Inizia lentamente. riformattarlo un pezzo alla volta.

Se esegui il loop su molti array, osserva le funzioni dell'array come array_map , array_walk e amici. Questo è più un refactoring funzionale che un refactoring OO, ma ti porterebbe abbastanza lontano. Se ha senso andare più OO, allora avrai alcune funzioni che potresti quindi inserire nelle classi appropriate secondo necessità.

Alcuni buoni consigli da Johnathan e Gnud. Non preoccuparti troppo dell'SPL e ulteriori informazioni sul refactoring , e scopri quali gli strumenti di refactoring sono disponibili per PHP .

Inoltre non posso raccomandare abbastanza di leggere Lavorare in modo efficace con il codice legacy :

 alt text

E ovviamente il Refactoring Book :

alt text http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU01_.jpg

PHP è un linguaggio difficile da tenere pulito dagli odori del codice, ma con un po 'di perseveranza si può fare! E ti ringrazierai ogni giorno che devi guardare la tua base di codice.

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