Metodo generico o metodo specifico?

3

Sto creando una relazione notificatore / notifee. Non sono abbastanza sicuro di quale sia il design migliore. Per quanto riguarda "meglio", il mio obiettivo è quello di ottenere qualcosa che sia amichevole per l'estensione. Ad esempio, vedi sotto:

alien_enthusiast.notify( UFO_Sighting( London, 1500 ) )

vs

alien_enthusiast.notify_ufo_sighting( London, 1500 )

Quale è meglio in termini di estensione? Se c'è un'alternativa migliore, sarebbe bello saperlo.

    
posta user2738698 11.09.2016 - 01:14
fonte

4 risposte

5

Preferisco

  • verbi semplici a scapito di nomi complessi

oltre

  • nomi semplici a scapito di verbi complessi

quindi equiparando i verbi con i metodi e i nomi con i loro parametri, allora sceglierei la prima delle tue scelte.

Le azioni (verbi) sono più difficili da ragionare in quanto stanno già collegando cose (nomi) e sono coinvolte in comportamenti, quindi trovo che la complessità aggiuntiva tende a complicare.

Questo è un principio alla base di CRUD, in cui i verbi sono semplici e i nomi potenzialmente complessi.

Penso che i tuoi utenti (di estensibilità) preferiranno implementare solo un listener invece di molti singoli.

    
risposta data 11.09.2016 - 01:22
fonte
2

Tra i tuoi due esempi, il primo è migliore semplicemente perché il secondo richiederebbe di modificare alien_enthusiast ogni volta che viene aggiunto un nuovo tipo di avvistamento.

Come in

alien_enthusiast.notify_weather_balloon_sighting( London, 1500 )

Ma anche il primo non è buono, poiché l'avvistamento è bloccato per essere un avvistamento UFO.

Suggerirei

sighting = Sighting( UFO, London, 1500 )
alien_enthusiast.notify( sighting )

quando, come sempre, si scopre che è stato un pallone meteo che puoi fare

sighting.updateCategory( WeatherBalloon )

Il tuo entusiasta resterà deluso, ma potrà girarsi con la sua auto e risparmiare benzina.

    
risposta data 11.09.2016 - 15:47
fonte
1

Sono d'accordo con Erik in questo caso perché sospetto che tu stia lavorando in un paradigma di programmazione orientata agli oggetti. OOP adora aggiungere nomi. Non è così bravo nell'aggiungere i verbi. Questo è il motivo principale per cui i nomi hanno nomi più complessi dei verbi.

In un ambiente funzionale puoi aggiungere facilmente i verbi. Sono nomi che sono difficili da aggiungere. Quindi qui tendi ad avere nomi più elaborati per i verbi.

    
risposta data 11.09.2016 - 04:38
fonte
1

Se può notificare Sightings, allora Sightings può essere un buon candidato per un'interfaccia / classe base. Quindi diventa più a prova di futuro fare notificare (implementazione di Sighting). UFightighting implementa l'avvistamento e forse in futuro hai AlienSighting.

    
risposta data 11.09.2016 - 15:11
fonte

Leggi altre domande sui tag