In un'applicazione web, le iscrizioni agli hook e agli eventi sono identiche?

1

Quando guardo alcune applicazioni PHP, in genere hanno degli hook. Drupal e Wordpress sono esempi. Quando guardo un'applicazione del mondo .NET come Orchard o Umbraco, ci si iscrive agli eventi.

D'altra parte, ho visto che Drupal ha anche eventi, link

WordPress ha solo gli hook (che ho trovato), anche se dicono che gli hook si agganciano agli eventi. link

Mi sembra che quando un'applicazione con un framework di estensibilità plug-in / modulo fa riferimento a un evento , significa un progetto orientato agli oggetti che utilizza l'iniezione di dipendenza, in genere con un contenitore che collega tutto . Ma se no, allora è un programma che salva i riferimenti in un array, usandoli in una parte appropriata della sequenza di esecuzione chiamando il hook . Sono vicini all'operazione ma non all'implementazione.

Sono gli hook le sottoscrizioni agli eventi la stessa cosa? Li ho visti anche come "Segnali".

    
posta johnny 05.05.2017 - 19:18
fonte

2 risposte

2

Bene, entrambi sono modi per implementare il polimorfismo.

Gli hook possono essere posizionati ovunque. Esiste una tecnica in cui si copia un po 'di codice macchina da qualche altra parte e al suo posto si inserisce il proprio codice. Puoi renderlo inopportuno se il tuo codice chiama anche "somehwere else" in modo da non perdere il comportamento nel codice che hai inserito. È un hack. Non si tratta di app web. Ma è da dove viene il nome.

Piuttosto che forzare l'hack, puoi progettare per questo offrendo punti nel codice in cui chiami qualsiasi cosa tu abbia ricevuto. Questo è anche chiamato hooking ma è anche chiamato composizione e delega. Può anche essere fatto con ereditarietà, puntatori di funzioni, funzioni di prima classe, tabelle virtuali ... Questi punti sono chiamati punti di estensione. Sono meno flessibili dell'hack perché funzionano solo dove sono stati progettati per funzionare. Ma sono molto più facili da capire durante la lettura del codice.

Le sottoscrizioni agli eventi utilizzano questi punti di estensione inserendoli in una raccolta che può essere modificata in fase di esecuzione. Un altro nome per loro è il Pattern degli osservatori .

C # delega, osservatori, eventi, tutti i nomi diversi per lo stesso modello.

Che in un guscio di noce è: chiamano il tuo foo() in modo da chiamare tutti foo() nella raccolta. Permetti loro di aggiungere e rimuovere foo() s come preferiscono.

È un pattern che funziona in OOP, programmazione funzionale e programmazione procedurale. Ma la programmazione funzionale vorrà essere formale quando puoi modificare la collezione.

Quindi sono uguali? No. Sono diversi come una banana e un mucchio di banane in una scatola a forma di banana. Posso vedere come potrebbero sembrare uguali.

    
risposta data 05.05.2017 - 20:23
fonte
1

Per me la differenza principale è che i ganci, una volta connessi, vengono effettivamente richiamati dal codice di hosting, cioè quando il codice principale raggiunge un punto accessibile dal gancio, esegue esplicitamente il codice di aggancio. D'altra parte nel modello di pubblicazione e sottoscrizione quando il codice principale raggiunge il punto di pubblicazione invia i dati appropriati, (i meccanismi variano) e procede allegramente per la sua strada senza preoccuparsi se qualcosa è in ascolto. Qualsiasi codice che abbia sottoscritto quell'evento specifico lo riceverà, quando riceverà la notifica di even, (ad esempio dal sistema operativo), e reagirà in modo totalmente indipendente all'evento.

Poiché tali hook sono sincroni e possono restituire valori, modificare i dati, ecc. e, normalmente, vengono eseguiti nello stesso thread del processo hooked ma pub-sub è asincrono, non possono restituire valori direttamente e verrebbero elaborati in un thread diverso, forse anche su una macchina diversa. Se è necessario trasferire i dati dagli hook, è semplice, supponendo che la definizione di hook consenta un ritorno, ma pub-sub dovrebbe pubblicare i propri risultati, sempre in un modo o nell'altro, e sperare che il processo originale sia in ascolto.

    
risposta data 05.05.2017 - 20:37
fonte

Leggi altre domande sui tag