Modelli di progettazione OO simili al sistema di aggancio di Drupal?

0

Il nucleo di CMS Drupal non è basato sull'orientamento agli oggetti nella versione 7. Per la scrittura di moduli collegabili, ha un sistema "hook", per cui è possibile modificare il comportamento (modificando i dati passati) per funzioni di sistema definite.

Ad esempio, Drupal ha e API attraverso cui si creano array per definire i moduli tradotti in HTML. Esiste un hook definito chiamato hook_form_alter in base al quale è possibile modificare qualsiasi matrice di moduli dopo la sua creazione e prima del rendering, consentendo di modificare completamente il modulo. Allo stesso modo, puoi fare lo stesso per query, e-mail, ecc. Generate tramite l'API.

Non sono esperto in OO o nei modelli di progettazione, quindi lo sfondo e le spiegazioni sono utili. Inoltre, sto uscendo solo da PHP (e MySQL), quindi non ho familiarità con gli esempi di come gli altri linguaggi fanno cose.

Poiché questi sono tutti basati su funzioni e callback, mi chiedo quali modelli di progettazione orientati agli oggetti forniscano questa funzionalità.

    
posta user1936 02.10.2015 - 17:52
fonte

2 risposte

2

Quello che stai cercando è Aspect Oriented Programming, che è un'estensione di OO che aggiunge una funzionalità per l'esecuzione di hook (chiamati "pointcuts") alle invocazioni di metodo selezionate da una descrizione delle chiamate da intercettare.

In alternativa, il pattern Decorator è un puro modo OO per ottenere alcuni degli stessi risultati, ma richiede più lavoro da impostare.

    
risposta data 02.10.2015 - 20:39
fonte
1

Non è questo il schema di delega ?

es. definisci un'interfaccia AlterFormProcessor per il tuo delegato hook, aggiungi .setAlterFormProcessor(AlterFormProcessor hook) al tuo servizio. Se il gancio è stato impostato, chiamalo e raccogli il risultato.

Per forme di elaborazione ancora più complesse, implementa .addWhateverProcessor() anziché .setWhateverProcessor ed esegui intere pipeline di processori delegati. Ricorda in che modo l'elaborazione degli eventi viene eseguita in AWT o JavaScript del browser.

    
risposta data 02.10.2015 - 20:20
fonte

Leggi altre domande sui tag