Esiste un nome per questo pattern Registry-Slot-Updaters?

2

Ho notato uno schema nel mio codice. Si applica alle situazioni in cui le cose possono essere selezionate. Riguarda le classi che chiamo (e in codice spesso suffisso con) Registry, Slot e Updater.

Registro

Questa classe è praticamente una combinazione di ciò che è noto come il modello di registro : ( "Un pozzo -oggetto noto che altri oggetti possono utilizzare per trovare oggetti e servizi comuni. ") e alcuni metodi di filtro.
Questi dovrebbero essere l'elenco di tutti i [Type] s . Usano sempre una collezione internamente, ma i metodi che hanno sono determinati da ciò che le altre classi vogliono da loro. Potrebbe trattarsi di semplici wrapper per la classe di raccolta o per i metodi di filtro con nome specifici del dominio. Gli eventi, ad esempio quando viene rimosso un elemento, vengono aggiunti pragmaticamente quando necessario.

public class ProductRegistry
{
    private readonly List<Product> _products = new List<Product>();

    public void Add(Product product)
    {
        _products.Add(Product product)
    }

    public List<Product> GetAllProductsOnSale()
    {
        // domain specific filtering...
    }
}

Slot

Chiamato "Slot" perché può contenere un oggetto. Nella maggior parte dei casi, un oggetto tenuto qui significa che è l'oggetto attualmente selezionato. Contrariamente a Registry and Updaters, il codice per questo è sempre lo stesso ad eccezione del tipo di cosa viene selezionato. Potrei trasformarlo in una classe generica, ma sono arrivato a pensarlo mentre scrivevo questa domanda - e non è così che cambierebbe il modo in cui funziona questo modello.

public class ProductSlot
{
    public event Action WhenProductHasBeenChanged;

    public Product Product{get; private set;}

    public void Set(Product product)
    {
        Product = product;
        if(WhenProductHasBeenChanged!=null) WhenProductHasBeenChanged();
    }
}

Updaters

Questi aggiornano il registro e lo slot. Il modo in cui ottengono ciò varia selvaggiamente, quindi il codice di esempio non avrebbe senso qui.
Tuttavia, per dare un esempio di ciò che fanno, un ProductUpdater potrebbe supervisionare il processo di download di una stringa da un indirizzo web, analizzandolo in Products e quindi aggiungendolo a ProductRegistry .
Una cosa che ho fatto ripetutamente è stata la registrazione di un Updater all'evento change di uno slot per una cosa diversa. Ad esempio, un ContractSlotUpdater ascolta le modifiche in CustomerSlot , quindi può aggiornare ContractSlot con Contract che corrisponde al nuovo Customer .

Note aggiuntive

Ho aggiunto il tag C # perché quella è la lingua, e quindi le caratteristiche del linguaggio, che attualmente sto usando. Non vedo problemi nel trasferire questo concetto ad altre lingue, purché abbiano le funzionalità necessarie.

La domanda

Se questa non è una buona cosa da fare, per favore dimmi perché.
Altrimenti, vorrei sapere come chiamarlo.

    
posta Raphael Schmitz 02.01.2018 - 14:28
fonte

0 risposte

Leggi altre domande sui tag