Astrazione azione evento e controllo trigger

1

Sto pensando di astrarre l'azione Event per rendere più semplice l'alterazione / l'implementazione / la manutenzione dato che il progetto a cui sto lavorando ha requisiti volatili. Così ho pensato al seguente concetto. Ho creato un'implementazione di IEventAction che ex. gestisce la chiusura della pianificazione nella mia applicazione, ho reso IEventAction estende IEventAction in modo da poter gestire tutte le EventAction utilizzando una raccolta generica; e usando una fabbrica, otterrò l'evento appropriato passando il tasto di pressione in fabbrica per risolvere l'evento corretto come mostrato nel codice qui sotto.

interface IEventAction {

}

interface IEventAction<T> : IEvent {
    void Fire(T factor);
    bool CheckCondition(T factor); //check the condition to fire the event
}

class PlanningClose : IEventAction<string> {
    GroupBox _gpb;
    public PlanningClose(GroupBox gpb){
        this._gpb = gpb;
    }

    public void Fire(string factor) {
        this._gpb.SendToBack(); //hide planning groupeBox
    }

    public bool CheckCondition(string factor){
        return factor == "*"; //"*" is keyboard key for close.
    }
}

class frmMain : Form {
    //logic here
    void registerActions() {
        ActionsFactory.Register(new PlanningClose(this._gpbPlanning));
    }
    //logic here
    void frmMain_KeyPress(object sender, KeyPressEventArgs e){
        //during resolve the factory checks if the event is suited be executing 
        //CheckCondition(T factor) and return it if appropriate
        IEventAction evt = ActionsFactory.Resolve<string>(e.keychar);  
        evt.Fire(e.KeyChar);
    }
    //logic here
}

Il problema qui è che sto gestendo molte pressioni di tasti in frmMain_KeyPress dove sto usando la stessa chiave più volte per scopi diversi, il problema qui è che non riesco a trovare un modo corretto per gestire questo problema e mantenere Action come astratto il più possibile Ho pensato di registrare un'azione denominata e risolverli anche per nome, ma non ho mai usato questa tecnica.

//register
ActionsFactory.Register("close_planning", new PlanningClose(this._gpbPlanning);
//call
ActionsFactory.Resolve<string>("close_planning", e.KeyChar);

Qualcuno ha un modo migliore di implementare questo problema. Grazie.

    
posta MusuNaji 02.03.2015 - 12:10
fonte

1 risposta

0

Sembra che tu voglia risolvere azioni di eventi basate su più di e.KeyChar . Ho visto questo problema risolto passando un secondo argomento alla funzione Resolve che potrebbe essere chiamata qualcosa come KeyPressContext . Fondamentalmente si vorrebbe fornire un oggetto extra con i metadati sul contesto in cui è stato premuto il tasto e utilizzare tali informazioni per determinare come risolvere l'azione.

    
risposta data 02.03.2015 - 20:21
fonte

Leggi altre domande sui tag