Dovrei preoccuparmi dell'interfaccia utente nel mio dominio? Domain Driven Design

0

Quindi sto imparando DDD e sto tentando di ridefinire un vecchio progetto usando questo approccio. È un'app piuttosto piccola per registrare i dipendenti per gli eventi. Questi dipendenti sono inizialmente popolati dal DB, registrati e salvati.

Una regola aziendale dice che se un dipendente è contrassegnato come CannotAttend = true e viene visualizzato, viene registrato normalmente e CannotAttend è impostato su false .

La mia domanda riguarda la preoccupazione dell'interfaccia utente. Un messaggio, ReceivedMsg , viene visualizzato in base allo stato in cui si trova l'oggetto quando si registra / tenta di registrarsi. Lo stato verrebbe inizialmente impostato quando l'oggetto viene popolato dal DB e, quando si registra, viene visualizzato un messaggio diverso in base al fatto che siano stati contrassegnati come CannotAttend o meno. Questo messaggio non è memorizzato nel DB.

Questo è un problema di cui il dominio dovrebbe preoccuparsi o devo tenere traccia di queste modifiche altrove?

Alcuni messaggi di esempio sono:

Conosciuto quando popolato da DB: Not Currenty Registered , Already Registered

Dopo la registrazione - Registered , Registered and set to attend event

L'interfaccia utente visualizza questo messaggio e un colore in base allo stato iniziale dal DB e quindi modificato una volta modificate le proprietà Registered e / o CannotAttend .

public class Employee
{
    //DB properties
    public int EmployeeId { get; private set; }
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public int BadgeId { get; private set; }
    public bool Registered { get; private set; }
    public int Swipes { get; private set; }
    public bool CannotAttend { get; private set; }

    //Not persisted
    public string ReceivedMsg { get; set; }
    public RegistrationType RegistrationType { get; private set;}


    public void Register(RegistrationType registrationType)
    {            
        if (!Registered)
        {
            Registered = true;
            Swipes = 0;                
        }

        if(CannotAttend)
        {
            CannotAttend = false;               
        }

        if (registrationType == RegistrationType.Badge) Swipes++;

    }      
}
    
posta 16.11.2016 - 16:46
fonte

1 risposta

1

La tua classe Employee contiene una logica alla quale non è interessato. Il metodo Register non dovrebbe far parte dell'oggetto Employee. I dipendenti non si registrano da soli, vengono inviati per la registrazione tramite una funzione astratta.

Quello che stai dicendo è lo stesso di un cliente McDonalds che crea il proprio pasto BigMac quando in realtà la cucina lo fa per loro.

Devi separare le funzioni di registrazione, ad esempio in una classe di registrazione che può essere adattata per gestire tutti i tipi di registrazione.

Una volta fatto questo, il problema dell'interfaccia utente andrà via.

Modifica: Inoltre, la tua classe di registrazione tiene traccia dei dipendenti registrati, il tuo dipendente non ha bisogno di farlo.

    
risposta data 16.11.2016 - 16:56
fonte

Leggi altre domande sui tag