Come disaccoppiare il codice con la logica aziendale?

3

Sto attraversando un periodo difficile per disaccoppiare due classi.

Ho il mio codice dietro (lo chiamerò "classe A") che uso per modificare l'interfaccia (definita in xaml).

Avanti ho una classe B che è solo logica. Ma mentre la logica è in esecuzione, devo aggiornare l'interfaccia.

Il mio problema è che non posso "tornare" dalla classe B a A per aggiornare l'interfaccia utente perché B non ha finito di funzionare. E non posso dare la vista stessa alla modifica di B perché accoppierà A e B.

Suppongo di dover utilizzare alcune interfacce logiche ma non so come.

Ad esempio:

Class A
{
     private void OnClickEvent()
     {
         var B = new(B);
         b.work();
     }

     private void UpdateUI()
     {
        ...
     }
}


Class B
{
    public void work()
    {
        while (...)
        {
             ...
             //Here, how to call A.UpdateUI() ?
             ...
        }
    }
}

Grazie!

    
posta Doctor 10.01.2018 - 15:41
fonte

3 risposte

1

Probabilmente eseguirai work() in modo asincrono e quindi userai gli eventi per segnalare le modifiche che potrebbero causare l'aggiornamento dell'interfaccia utente. Il vantaggio degli eventi è che la fonte dell'evento non sa nulla degli abbonati, quindi puoi ancora mantenere la logica di business (B) disaccoppiata dalla vista (A).

    
risposta data 10.01.2018 - 15:51
fonte
0

Basta introdurre un'interfaccia:

class A : BUpdateTarget
{
     private void OnClickEvent()
     {
         var B = new(B);
         b.work(this);
     }

     public void UpdateUI()
     {
        ...
     }
}


interface BUpdateTarget
{
    UpdateUI();
}

class B
{
    public void work(BUpdateTarget updateTarget)
    {
        while (...)
        {
             //...
             updateTarget.UpdateUI()
             //...
        }
    }
}
    
risposta data 10.01.2018 - 20:43
fonte
0

Mi sembra che la tua classe B rappresenti la logica di qualche interfaccia utente, mentre A rappresenta la classe code-behind della stessa interfaccia utente.

Se semplicemente non puoi usare MVVM, ti consiglio di fare in modo che la classe B implementa l'interfaccia INotifyPropertyChanged , in modo che possa notificare al client (la classe A ) le modifiche nel suo stato (come gli aggiornamenti in una collezione, per esempio). Una volta avvenuta la modifica, A viene notificato e può fare tutto ciò che deve fare.

    
risposta data 15.01.2018 - 17:33
fonte

Leggi altre domande sui tag