2012-03-06 14 views
7

Ho una certa esperienza nello sviluppo di iOS (più Java in background) e recentemente ho iniziato a leggere "Clean Code".Progetti open source iOS per l'apprendimento delle migliori pratiche di codifica

Ho notato che nei miei progetti iOS ho molti anti-pattern.

raccomandazioni

2 più popolari non seguo correttamente: piccoli metodi e piccole classi. Poi ho fatto una piccola ricerca su GitHub e non trovo un progetto che possa usare come esempio/riferimento per "Clean Code".

Nella maggior parte dei casi, ViewControllers ha decine di metodi E hanno metodi ENORME, come loadView in cui viene creata la gerarchia di viste a livello di codice.

Ad esempio, l'app da Facebook wishlist-mobile-sample ha 1431 righe di codice nella classe HomeViewController e il suo numero loadView ha più di 170 righe di codice.

Hai collegamenti ai progetti che consiglieresti come esempio di codifica davvero valido?

+0

tutorial di controllo da http: //www.raywenderl ich.com –

+2

Grazie, ma ho controllato il loro esempio Rotating Wheel e il metodo drawWheel: 'è enorme. Cerco di più per la codifica delle best practice ma usando il linguaggio Objective-C. – OgreSwamp

risposta

1

codice di esempio Apple è la fonte migliore per imparare il codice pulito .. progetti open source non può battere questo ..

+0

Credo che stiamo parlando di "Clean Code" diversi. Se il codice di Apple crea una gerarchia di visualizzazione, i loro metodi potrebbero essere più di 100 righe di codice. Esempio: il progetto UICatalog, 'MainViewController'' - (void) viewDidLoad' è di circa 130 righe di codice. – OgreSwamp

2

ho il coraggio di contestare che avere tutte le classi < 100 linee di codice è in realtà una migliore codifica Pratica ... Dipende tutto da cosa lo usi e quanto è importante avere una classe veramente pulita e generale. Conosco piuttosto alcuni pezzi di codice che sono più facili da leggere con centinaia di righe in una classe rispetto al codice ingombro di classi con classi super-mini, ma centinaia di classi invece ... Probabilmente c'è un motivo per cui molti progetti hanno classi più grandi.

E pensi davvero che se l'affermazione è "una funzione dovrebbe avere un massimo di 100 righe di codice" che avere una funzione con 130 linee è già valida per la codifica errata?!?

BTW: La funzione viewDidLoad nella classe UICatalog di Apple dispone di 42 linee di codice - il resto è spazio bianco e commenti - preferisco non lasciare quelli fuori del codice, al fine di rimanere al di sotto di 100 linee: -)

+0

Stiamo parlando più dell'affermazione "la funzione dovrebbe avere un massimo di 20 righe di codice" e di avere funzioni con centinaia di righe di codice. Il tuo esempio è 0,3 volte la differenza, nel caso in cui sto descrivendo la differenza è di circa 10-20 volte. – OgreSwamp

+0

Bene, guarda la mia aggiunta - il codice reale è 42 linee per l'esempio di Apple.L'obiettivo C non è il linguaggio più efficiente in termini di spazio, devi introdurre molti spazi bianchi per tenerlo leggibile, specialmente con i parametri denominati ... – TheEye

+0

Ho capito il tuo punto. Ad ogni modo, sto cercando esempi di codice vicino all'ideale :) Che ha piccole funzioni che puoi facilmente leggere. Mi dispiace, ma ho bisogno di scorrere questa schermata alcune volte per leggere l'intero metodo. E questo esempio non ha una struttura di visualizzazione complicata. Usa il link di esempio di Facebook nel corpo della domanda e vedrai di cosa sto parlando. – OgreSwamp

1

Non dimenticare che lo scopo degli esempi di post di Apple non è quello di mostrare le best practice in tutto il codice, ma di illustrare elementi specifici. Perché preoccuparsi di scomporre un metodo init in molti blocchi più piccoli (cosa che richiederà del tempo) quando si tenta di dimostrare come effettuare una chiamata di rete asincrona.

Quando scrivi il tuo codice, non c'è niente di sbagliato nello scrivere metodi enormi o classi enormi SE sono appropriati per quello che stai facendo, commentati correttamente e non duplicano nulla. Potrebbe essere che è proprio quello che devi fare.

Come regola generale, quando si scrive il codice, basta pensare a tutto ciò che si sta tentando di fare e pensare se è possibile scomporlo in blocchi più piccoli. Pensa se tu dovessi fare qualunque cosa tu stia scrivendo il codice da fare e pensare a come tu ti avvicinassi a tale compito.

Ad esempio, è possibile scrivere un metodo che inizializza il display. Quindi, potresti scrivere un enorme metodo che farà tutto.Oppure, si potrebbe abbattere per

[self initButtons]; 
[self initTextEntry]; 
[self initLabels]; 

Allo stesso modo, nei initButtons, si potrebbe trovare che poi scrive lo stesso codice di nuovo per creare e init i pulsanti quando si scopre che l'unica cosa che cambia è la posizione del pulsante e il selettore che chiamano quando viene toccato. Così si può refactoring che su

button1 = [self createButton:position callback:selector]; 
button2 = [self createButton:position2 callback:selector2]; 

Basta prendere un approccio iterativo a ciò che si sta scrivendo. Scrivi il codice Una volta che hai funzionato una funzione, fermati e vai indietro e vai nel tuo codice e vedi dove puoi calcolare gli elementi, dove hai codice comune che hai inserito più volte, ecc. Usa gli strumenti di refactoring in XCode.

Sviluppa il tuo stile. Arriverà con il tempo e più codice scrivi e refactoring, più facilmente vedrai come le cose possono essere suddivise all'inizio. Quando penso a parte del codice che ho scritto 20 anni fa, spero che sia stato distrutto per non essere mai più visto da un compilatore. Ho lavorato su progetti scritti da sviluppatori "professionisti" e ci sono metodi enormi. Ad esempio, ne ho visto uno di recente che era lungo 500 (!) Righe di codice. E con pochissimi commenti.

E ricorda che avere molti piccoli metodi che combinano molto poco con una quantità enorme di classi (anche se sono piccole classi) può anche essere un anti-modello.

Problemi correlati