2010-09-15 11 views

risposta

10

"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.

+0

"solo la mente può giudicare in modo affidabile che" ... almeno per i prossimi 20 anni ... ;-) –

+0

@ Martin non sono così ottimista. vedrà ... –

1

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?

9

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:

  1. documento la rappresentazione invarianti l'astrazione è il mantenimento

  2. Rimuovere l'astrazione (metodi), se non riesci a trovare invarianti forti

  3. 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.

+0

Questo dovrebbe essere contrassegnato come la migliore risposta. Aggiornamento –

2

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.

+0

: l'immagine sembra essere sparita. Ecco la parte EAV del loro ERD: http://i.stack.imgur.com/sFIJb.png –

+0

@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

Problemi correlati