ViewModel al modello di dominio

0

È una domanda abbastanza semplice.

L'utente può creare un modello di dominio aziendale valido minimo come quello

public bool Create(CreateTemplateViewModel template)
{
    //logic and validation
    _service.Create(...)
    return true;
}


public class BusinessViewModel
{
    public string Name { get; set; }
    public int Type { get; set; }
    public bool IsOptional { get; set; }
    public int? ParentId { get; set; }
}

Dopo aver creato questo modello di dominio aziendale valido minimo queste altre proprietà saranno impostate su valori predefiniti o null in base alle impostazioni dell'utente e di altro tipo. E come un processo va, l'utente aggiornerà altri valori. Sarà in grado di farlo da pochi luoghi diversi (possiamo chiamare viste). Queste viste consentiranno all'utente di aggiornare solo determinate proprietà (potrebbe essere dovuto al livello di accesso dell'utente o al passaggio di un processo aziendale)

public bool UpdateProperties_One(UpdateTemplateViewModel_One template)
{
    //logic and validation
    _service.Update(...)
    return true;
}


public bool UpdateProperties_Two(UpdateTemplateViewModel_Two template)
{
    //logic and validation
    _service.Update(...)
    return true;
}

public class UpdateTemplateViewModel_One
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public bool IsOptional { get; set; }
    public int OrganizationId { get; set; }
    public int GroupId { get; set; }
}

public class UpdateTemplateViewModel_Two
{
    public Guid Id { get; set; }
    public int Type { get; set; }
    public bool IsOptional { get; set; }
    public bool IsOperational { get; set; }
    public bool IsGloballyVisible { get; set; }
}

E poi c'è un modello di dominio che ha le stesse proprietà di BusinessViewModel e altre 10-15 proprietà.

public class BusinessDomainModel
{
    public string Name { get; set; }
    public int Type { get; set; }
    public bool IsOptional { get; set; }
    public int? ParentId { get; set; }

    public Guid Id { get; set; }
    public int OrganizationId { get; set; }
    public int GroupId { get; set; }
    public bool IsOperational { get; set; }
    public bool IsGloballyVisible { get; set; }
    //etc....
}

Quindi mi chiedo dovrei:

  • usa pochi modelli di visualizzazione diversi per situazioni specifiche, recupera il modello di dominio nel controller, aggiorna le proprietà richieste e poi passa a un singolo metodo nel livello di servizio per ulteriore convalida (troppa logica nel controller? facade dove ho validatori, repository per la costruzione di un po 'di modelli complessi, regole di business e logica)?

  • usa pochi modelli di visualizzazione diversi per situazioni specifiche e passa solo le proprietà richieste come parametri del metodo a specifici metodi nel livello di servizio (sebbene i 3-6 parametri del metodo non siano buoni, più metodi di aggiornamento)?

  • usa il modello a vista singola per tutte le situazioni, converti in un modello a dominio singolo e passa a un singolo livello di servizio metodo, dove decido cosa aggiornare (vengono passate molte proprietà inutili)?

  • utilizzare alcuni modelli DTO diversi (anziché i modelli di visualizzazione) per situazioni specifiche e passarli a metodi specifici nel metodo di aggiornamento del servizio (più metodi di aggiornamento)?

Pensieri rapidi L'opzione 3 sembra più automatizzata per l'elaborazione del flusso di lavoro (quali proprietà devono essere aggiornate), perché tutta la logica aziendale e il controllo dei passaggi sono all'interno del servizio.

L'opzione 4 sembra più pulita e chiara, è più facile capire che cosa sta succedendo.

    
posta Mantas Čekanauskas 07.11.2017 - 10:06
fonte

0 risposte

Leggi altre domande sui tag