Il principio KISS è più importante dell'utilizzo di OOP per risolvere un problema?

1

Sono uno sviluppatore PHP che codifica nel framework Yii 1.x. Stavo cercando un modo per codificare JSON senza escape in Yii 1.x e ho trovato la classe framework CJSON per questo scopo (quindi OOP).

Dal momento che non supporta il JSON senza caratteri di escape, ho dovuto tornare all'approccio PHP, procedurale, non-OOP dell'uso di json_encode($results, JSON_UNESCAPED_SLASHES); . Tuttavia, ho chiesto come ottenere lo stesso risultato con il framework Yii.

Come una risposta ho ricevuto informazioni che, mentre fa ciò che voglio, non è possibile con il framework di base e richiede di estendere una classe base. Questa soluzione proposta richiede 12 righe di codice e comporta la creazione di un file separato, mentre la mia soluzione richiede solo 1 nuova riga di codice.

Solo per nutrire la mia curiosità - cosa è più importante in situazioni come questa? Dovrei seguire KISS e rendere il mio codice il più semplice possibile, persino tornare al codice procedurale, o dovrei attenermi alle soluzioni OOP e estendere sempre le classi se non riesco a fare ciò che mi serve con il codice framework esistente?

    
posta trejder 25.09.2014 - 15:31
fonte

3 risposte

2

Confrontare codice procedurale e OOP è come confrontare mele e arance. A volte, uno porta a un design migliore, a volte l'altro ea volte nessuno dei due.

Nelle lingue che supportano una combinazione di OO e codice procedurale (che è la grande maggioranza dei linguaggi OO), può avere senso sottoporre a sottoclassi una classe esistente se

  • la classe base è aperta per l'estensione (non sigillata, definitiva, a prescindere dalla lingua scelta) e
  • la tua estensione deve essere utilizzata da un'altra classe, che prende (un riferimento a) la classe base come dipendenza, o
  • la tua estensione è applicabile solo in alcune situazioni, ma deve anche gestire perfettamente le situazioni che la classe base soddisfa, o
  • la tua estensione richiede l'accesso a parti della classe base o
  • il codice che usa l'estensione lo userà principalmente in congiunzione con la classe base.

Se nessuno di questi contiene, allora dovresti scegliere quello che porta al codice più semplice, che sia una classe, un'estensione o una procedura (o solo una chiamata di procedura in questo caso).

    
risposta data 25.09.2014 - 15:55
fonte
4

Just to feed my curiosity, I'd like to ask, what is more important in situations like that? Should I follow KISS and make my code as simple as possible, even reverting sometimes to procedural code, or should I bound myself to OOP and always use extended classes, if I can't get, what I want, out of base code?

Come Tim Peters ha detto "La praticità batte la purezza".

A meno che tu non abbia requisiti rigidi in un modo o nell'altro (ad esempio un revisore del codice ossessivo-compulsivo con una pistola, che sappia dove vivi) devi ottimizzare il tuo codice per la manutenzione. In altre parole, scegli quello che è più facile da capire / mantenere / estendere / riutilizzare / correggere.

Detto questo, questo non è un problema KISS vs. OOP tanto quanto un problema di "praticità contro purezza" (il miglior codice OOP è semplice, non in opposizione a KISS).

    
risposta data 25.09.2014 - 16:30
fonte
3

Un programmatore casuale (adeguatamente abile), incaricato di apportare modifiche al codice, identificherà prontamente cosa stavi facendo in un modo o nell'altro? I potenziali cambiamenti futuri sarebbero più facili o più difficili in un modo o nell'altro?

Usando il tuo esempio sopra, preferirei trovare una classe estesa. Ciò mi indicherebbe che la logica relativa al JSON senza caratteri di escape era lì e non da qualche altra parte. Permetterebbe anche un più facile riutilizzo dello stesso bit di logica da qualche altra parte.

    
risposta data 25.09.2014 - 16:00
fonte

Leggi altre domande sui tag