Domanda

Quando e perché dovresti generalmente sacrificare la TypeSecy per un'interfaccia di programmazione più bella?

Lascia che ti faccia un esempio: se avessi la scelta tra due aggregatori di eventi, quale preferiresti e perché?

Versione riflettente:

SomeEvent.subscribe(instance, "nameOfAMethod"); //method called via reflection
SomeEvent.fire(arg1, arg2);  //the firing could actually even be statically typed

Versione digitata staticamente:

EventSystem.getEvent(SomeEvent.class).subscribe(new EventHandler<Payload>() {
   public void eventOccurred(Object sender, Payload payload) {
       //event handler code here
   }
});

EventSystem.getEvent(SomeEvent.class).fireEvent(payload);

Si prega di notare che in Java, a causa della cancellazione del tipo, non è possibile implementare un'interfaccia generica con parametri di tipo diversi più di una volta e devi ricorrere a classi anonime o esterne per i gestori.

Ora il sistema di eventi riflettenti ha un'interfaccia utente più bella, ma si perde la sicurezza del tipo. Quale preferiresti? Creeresti lezioni di eventi vuoti solo per avere un simbolo, come Microsoft lo fa con Prism nel suo aggregatore di eventi?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top