Metodi separati o metodo singolo con istruzione if?

1

Sto lavorando su un'applicazione .NET e mi chiedo se dovrei usare metodi separati per gestire gli eventi click di due pulsanti diversi. In pratica fanno la stessa cosa, solo su oggetti diversi sul modulo, in questo caso due mappe separate.

Stesso metodo:

Private Sub SingleButtonHandler(sender As Object, e As EventArgs) Handles btnToggleSatNew.Click, btnToggleSatOld.Click
    If sender Is btnToggleSatNew Then
        Me.NewMap.ToggleSateliteView()
    Else
        Me.OldMap.ToggleSateliteView()
    End If
End Sub

Metodi separati:

Private Sub btnToggleSatOld_Click(sender As Object, e As EventArgs) Handles btnToggleSatOld.Click
    Me.OldMap.ToggleSateliteView()
End Sub

Private Sub btnToggleSatNew_Click(sender As Object, e As EventArgs) Handles btnToggleSatNew.Click
    Me.NewMap.ToggleSateliteView()
End Sub

Qual è l'overhead di controllare se i due oggetti sono uguali? Una versione è più facile da leggere rispetto all'altra? O dovrei fare qualcosa di completamente diverso?

    
posta Cuthbert 29.08.2014 - 17:56
fonte

2 risposte

6

Utilizza metodi separati. Rende il metodo più facile da leggere e rende più chiaro il metodo. Il SingleButtonHandler fa due cose in base a un parametro: attiva o disattiva la nuova mappa se il mittente è btnToggleStatNew o attiva o disattiva la vecchia mappa. Anche se non è un metodo orribilmente disordinato in questo momento, può trasformarsi in un groviglio ingombrante di codice spaghetti molto rapidamente.

Inoltre, si apre la domanda "dove dovrei bloccare l'evento di questo pulsante?" Con 1 gestore di clic per due pulsanti, imposta una cattiva precedenza. Ci sarà la tentazione di inserire l'evento click di un altro pulsante in quello, perché "il clic di questo pulsante è semplice, non ha bisogno di un altro metodo" o "questo pulsante è in qualche modo correlato agli altri". Non aprire quella tentazione. Ogni pulsante ha il suo gestore pari.

Sul sovraccarico delle prestazioni: non ti preoccupare. A meno che non ci sia un codice che causa grossi mal di testa, non tentare di ottimizzare. L'ottimizzazione prematura è la radice di tutto il male. Se il profiler dice che il codice non è il time sink principale, non provare a ottimizzarlo. Fallo funzionare. Rendilo leggibile.

    
risposta data 29.08.2014 - 18:14
fonte
2

In alternativa, è possibile aggiungere la mappa da attivare come proprietà del pulsante e quindi disporre di un gestore di eventi che alterna la mappa fornita nella proprietà del mittente. Questo evita un'istruzione if / then, ma ti dà un metodo che fa una cosa.

    
risposta data 29.08.2014 - 18:59
fonte

Leggi altre domande sui tag