Quali dovrebbero essere le misure che dovrebbero essere utilizzate per identificare che il codice è troppo astratto e molto difficile da capire e che cosa dovrebbe essere fatto per ridurre l'astrazione?Come identificare che il codice è troppo astratto?
risposta
"La semplicità alla complessità, la complessità sopra complicatedness"
Quindi - c'è un beneficio per qualcosa di astratto solamente se è complicatedness "de-livellamento" per la complessità. I motivi per farlo possono variare: migliore modularità, migliore incapsulamento, ecc.
Identificare sull'astrazione è un problema di gallina e uova. Al fine di ridurre l'astrazione è necessario comprendere la ragione reale dietro le linee di codice. Ciò include la comprensione dell'idea di una particolare astrazione stessa (diversamente dal chiamarla per una causa astratta di incomprensione). E non basta: devi conoscere una soluzione migliore e più semplice per dimostrare che è troppo astratto.
Se stai cercando uno strumento che potrebbe farlo al tuo posto - non guardare oltre, solo la mente può giudicarlo in modo affidabile.
Personalmente direi "Qual è il livello ideale di astrazione?" è una domanda soggettiva.
Non mi piace il codice che utilizza una nuova riga per ogni operazione atomica, ma non mi piacciono anche 10 operazioni annidate all'interno di una riga.
Mi piace l'uso delle funzioni ricorsive, ma non apprezzo la ricorsione per il solo gusto della ricorsione.
Mi piacciono i generici, ma non mi piacciono le funzioni generiche (annidate) che, ad es. utilizzare un codice diverso per ogni tipo specifico atteso ...
È una questione di opinione personale oltre che di buon senso. Questo risponde alla tua domanda?
darò una risposta che otterrà un sacco di voti bassi!
Se il codice è scritto in un linguaggio OO, è fortemente sovradimensionato. Più pura è la lingua, più grave è il problema.
L'astrazione deve essere utilizzata con molta cautela. In caso di dubbio, utilizzare sempre strutture dati concrete. (Puoi sempre astrarre in un secondo momento, questo è più facile della de-astrazione :)
Devi essere assolutamente certo di avere la giusta astrazione nel tuo contesto attuale, e devi essere molto sicuro che il concetto supererà la prova del cambiamento. L'astrazione ha un prezzo elevato in termini di prestazioni sia del codice che del codificatore.
Alcuni test deboli per l'eccessiva astrazione: se la struttura dati è un tipo di prodotto (struct in C) e il programmatore ha scritto get e set metodo per ogni campo, non sono riusciti a fornire alcuna astrazione reale, operatori disabilitati come C incrementare, senza scopo, e semplicemente non capisco che i nomi dei campi della struct sono già la rappresentazione astratta di un prodotto. Duplicare e azzerare l'interfaccia non è una buona idea.
Un buon test per il caso del prodotto è se esistono invarianti di dati da mantenere. Ad esempio, una coppia di numeri interi che rappresentano un numero razionale è quasi sufficiente, non c'è bisogno di alcuna astrazione perché tutte le coppie sono valide tranne quando il denominatore è zero. Tuttavia, per ragioni di prestazione si può scegliere di mantenere invariato, tipicamente il denominatore deve essere maggiore di zero e il numeratore e il denominatore sono relativamente primi.Per garantire l'invarianza, la rappresentazione del prodotto è incapsulata: il valore iniziale protetto da un costruttore e metodi vincolati a mantenere l'invariante.
Per fissare il codice vi consiglio questi passaggi:
documento la rappresentazione invarianti l'astrazione è il mantenimento
Rimuovere l'astrazione (metodi), se non riesci a trovare invarianti forti
Riscrivi il codice utilizzando il metodo per accedere direttamente ai dati.
Questa procedura funziona solo per l'astrazione di basso livello, vale a dire l'astrazione di piccoli valori per classi.
L'astrazione a un livello superiore è molto più difficile da gestire. Idealmente si dovrebbe rifattorizzare il codice ripetutamente, controllando di vedere dopo ogni passaggio che continua a funzionare. Tuttavia, questo sarà difficile, e talvolta è necessaria una riscrittura maggiore, piuttosto che una raffinatezza. Probabilmente non ne vale la pena a meno che l'astrazione non sia così lontana da non poter essere mantenuta.
Questo dovrebbe essere contrassegnato come la migliore risposta. Aggiornamento –
Scarica Magento e dare un'occhiata al codice, leggere alcuni documenti su di esso e dare un'occhiata al loro ERD: http://www.magentocommerce.com/wiki/_media/doc/magento---sample_database_diagram.png?cache=cache
non sto scherzando, questo è l'eccessiva estrazione .. cercando di accontentare tutti e coprire ogni base è una pessima idea e rende la vita estremamente difficile per tutti.
: l'immagine sembra essere sparita. Ecco la parte EAV del loro ERD: http://i.stack.imgur.com/sFIJb.png –
@John_Hunt, devo ridere. Ho lavorato alla creazione di un nuovo tema personalizzato per Magento per diverse ore, che ha portato a questo thread in primo luogo. Hai inchiodato. Magento non è un caso dei vestiti nuovi dell'Imperatore? – dlink
- 1. Questo codice è troppo fragile?
- 2. PHP - Arresta e cattura il codice che impiega troppo tempo
- 3. Come identificare il metodo di override nel codice byte Java?
- 4. Il codice libpq Postgresql semplice è troppo lento?
- 5. Come posso identificare e rimuovere il codice ridondante in Perl?
- 6. Il tipo di schema astratto è sconosciuto
- 7. che cosa è un metodo astratto su un'interfaccia in Java
- 8. Perché Java.Lang.Math non è astratto?
- 9. Android: Identificare quale codice un AsyncTask è in esecuzione
- 10. Codice iOS per identificare il supporto del metallo in runtime?
- 11. Java "astratto come" metodo con il corpo
- 12. Come identificare se il token OAuth è scaduto?
- 13. Come identificare se il riferimento di classe è un'interfaccia?
- 14. Come identificare quando il DOM è stato modificato?
- 15. Un metodo astratto sovrascrive un metodo astratto
- 16. Astratto con ereditario come campo
- 17. Come identificare una classe e un'interfaccia nel codice Java?
- 18. JFrame è troppo piccolo
- 19. Come impostare concretamente il tipo astratto con il tipo bound?
- 20. Come identificare il formato immagine di NSData?
- 21. Come identificare il tipo di array?
- 22. In che modo 999μs è troppo corto ma 1000μs giusto?
- 23. È corretto chiamare il metodo astratto dal costruttore in Java?
- 24. conosce troppo i metodi che sta chiamando
- 25. Come posso determinare se un metodo astratto è implementato?
- 26. quando [: punct:] è troppo
- 27. Perché WebViewPage è astratto in MVC3?
- 28. Come verificare se un tipo è astratto in .NET Core?
- 29. Desidero migliorare il mio codice jQuery, fa quello che voglio, semplicemente troppo brutto, IMO
- 30. Come identificare il numero di porta DB2
"solo la mente può giudicare in modo affidabile che" ... almeno per i prossimi 20 anni ... ;-) –
@ Martin non sono così ottimista. vedrà ... –