Ereditarietà dovuta alle annotazioni

0

Ho una serie di annotazioni che vengono utilizzate per rilevare errori / successo di una funzione.

Ora, c'è una classe A che ha una funzione f (). Questa funzione deve essere invocata per diversi casi d'uso aziendali.

Qual è il modo giusto per tenere traccia dei fallimenti / successi per caso d'uso aziendale? Uno degli approcci possibili può essere la creazione di classi separate (per caso d'uso) che estendono la classe A. Queste classi sovrascriveranno f () e chiameranno l'implementazione di super. Ora, le annotazioni richieste possono essere inserite in queste implementazioni.

Tuttavia, adottare questo approccio causerà la creazione di classi / oggetti non necessari solo per scopi di monitoraggio.

Qual è il modo giusto per risolvere questo problema?

    
posta Anshul Jain 27.12.2017 - 17:56
fonte

1 risposta

1

Non esiste una "via giusta", ci sono diversi modi estremamente fastidiosi e alcuni modi semplicemente irritanti.

Ereditare da A e avere SubA.f() chiamare super.f() può essere molto fastidioso. Soprattutto se finiscono per essere più livelli che chiamano su e giù. Tanto che ha un nome: Il problema Yo Yo .

Ora, solo perché qualcosa ha un nome non significa che sia buono o cattivo. Significa che è facile da ricercare. Fallo e impara ciò che gli altri dicono che sono i problemi e decidi se, nella tua situazione, ti interessi.

Una soluzione è usare solo eccezioni. Ciò fornisce al codice chiamante (il tuo codice caso d'uso) il controllo di come viene gestito. Non c'è bisogno di ereditarietà.

Un altro è passare oggetti in A.f() che hanno il successo & comportamento di errore che si desidera chiamare in quegli eventi per questo particolare caso d'uso.

Quest'ultimo funzionerà anche con le tue annotazioni. Annota solo i metodi di successo e fallimento. Ancora nessun bisogno di eredità.

    
risposta data 28.12.2017 - 06:43
fonte

Leggi altre domande sui tag