Il sovraccarico del metodo dell'obiettivo-c rende sconsigliabile un approccio progettuale di "molti piccoli metodi"?

15

Generalmente preferisco usare piccoli metodi, come raccomandato da, tra gli altri, Bob Martin in Clean Code . Ho anche letto abbastanza sugli interni di Objective-C per avere almeno qualche idea su come funzioni il suo invio di messaggi ( bbums series è particolarmente informativo su questo).

Nonostante le premature preoccupazioni di ottimizzazione, vorrei sapere se tutto ciò che funziona con Objective-c con objc_msgSend è, in termini pratici, abbastanza significativo da non essere consigliabile l'approccio 'molti piccoli metodi' per i progetti Objective-C.

Le scoperte empiriche sono particolarmente benvenute (forse organizzerò un test io stesso qualche volta). Anche l'esperienza di chiunque abbia scritto grandi progetti obiettivo-obiettivo sarebbe stata fantastica.

Chiarimento

Il tono generale della domanda è intenzionale. Non sto chiedendo informazioni sull'ottimizzazione delle prestazioni di app specifiche (è per questo che chiedo qui piuttosto che su SO), ma più sul fatto che le caratteristiche linguistiche di Objective-C scoraggiano un certo approccio progettuale. Ho osservato che gran parte del codice che ho visto da Apple, e altri partiti (su github, ecc.) Tendono a metodi e classi di grandi dimensioni, e mi chiedo se questo è un pregiudizio che si è insinuato a causa della lingua si. Ovviamente potrei aver letto il codice sbagliato, o potrebbe essere culturale piuttosto che fattori tecnici che hanno portato alla tendenza se esiste.

(Per quello che vale, sto attualmente scrivendo Objective-C, e sto usando piccoli metodi)

Ulteriore richiesta

Sono d'accordo con entrambe le risposte che sono state date. Un'altra cosa che mi piacerebbe è che qualcuno mi indicasse una base di codice Objective-C (che si spera considerevole) open-source (o altrimenti visibile) che usi dei bei metodi brevi (e classi piccole). Non ho ancora visto nulla in Objective-C da confrontare con (ad esempio) la fonte fitnesse .

    
posta Cris 25.10.2011 - 23:08
fonte

2 risposte

4

Non so davvero se il sovraccarico è trascurabile o no. Ma, preferirei progettare un sistema per essere facilmente comprensibile e mantenibile prima e normalmente si tratta di metodi e classi focalizzati e piccoli. Ciò aiuterà anche con la successiva regolazione del codice (solo perché il codice è più gestibile). Inoltre, è importante profilare il codice per trovare i colli di bottiglia reali, che potrebbero non essere correlati al sovraccarico di chiamata del metodo. Se esegui operazioni fuori processo (ad esempio chiamate a database, rete, file system), queste tendono a dominare comunque il tempo di esecuzione del programma.

Ma, come al solito, il tuo chilometraggio può variare ...

    
risposta data 27.10.2011 - 17:24
fonte
2

La maggior parte del codice non sarà cruciale per le prestazioni in nessuna , quindi anche se l'overhead del metodo fosse significativo rispetto ad altri linguaggi, l'approccio ottimale sarebbe comunque avere molti piccoli metodi nella maggior parte dei casi e in linea solo quelli che la definizione del profilo ha dimostrato di essere critica dal punto di vista delle prestazioni.

Naturalmente, ci sono molte persone che non sanno come ottimizzare correttamente, e di quelli che alcuni potrebbero conoscere il sovraccarico del metodo e impegnarsi in atti di ottimizzazione prematura globale, ma non credo che il gruppo sia abbastanza grande da avere un impatto significativo sull'ecosistema Objective-C.

I metodi e le classi di grandi dimensioni sono molto più probabili essere il lavoro di un ampio gruppo di persone che non conoscono né si preoccupano dei profiler, del metodo overhead o del design appropriato e di chi tenderà a produrre Big Ball of Mud in qualsiasi lingua. E sì, alcune di queste persone lavorano su codebase di alto profilo in importanti società di software.

    
risposta data 27.10.2011 - 22:40
fonte

Leggi altre domande sui tag