Come viene chiamato il livello tra il controller MVC e il back-end?

3

Ho un'applicazione ASP.NET MVC con il seguente controller e azione:

public class AccountsController
{
    public ActionResult Index() 
    {
        var accounts = AccountsManager.GetAccounts();
        return View(accounts);
    }
}

e AccountsManager classe come questa:

public class AccountsManager
{ 
    private static ILogger Logger ...
    private static ICache Cache ...
    private static IAccountsService Service ...
    private static IMapper ViewModelMapper ...

    private const string CacheKey = "Accounts";

    public static AccountViewModel[] LoadAccounts() 
    {
        try 
        {
            if (Redis.TryGet(CacheKey, out var cached))
                return cached;

             var accounts = Service.GetAccounts();
             var vms = ViewModelMapper.Map<AccountViewModel[]>(accounts);

             Redis.Set(CacheKey, vms);
             return vms;
        } 
        catch (Exception ex)
        {
            Logger.Error(ex);
            throw;
        }
    }
}

Quindi, questa classe AccountsManager rimuove la duplicazione del codice e incapsula la seguente logica:

  • Comunicazione con back-end
  • Risoluzione delle dipendenze
  • Caching
  • Accesso
  • Gestione degli errori
  • ViewModel mapping
  • Richiedi riprovare, servizio auth ecc.

Tuttavia, chiamare queste classi XXXManager mi fa sentire a disagio poiché questa parola Manager è ambigua.

Come viene solitamente chiamato questo livello?

    
posta Yeldar Kurmangaliyev 17.11.2017 - 07:23
fonte

2 risposte

2

Normalmente direi "Service Layer"

Ma sembra che il tuo AccountManager sia un livello extra tra Hosting e Service Layers.

Vorrei mettere in discussione la logica di avere questo strato aggiuntivo.

  • Il tuo livello di servizio dovrebbe restituire gli stessi oggetti indipendentemente dal modo in cui è stato effettuato l'accesso. Non dovresti aver bisogno di AccountViewModel

  • La parte di cache del servizio o parte dell'hosting? Se stai semplicemente memorizzando il risultato finale nella cache, fallo sul livello di hosting e non clicchi affatto il codice.

  • Registrazione, ancora una volta immettevo ILogger nel servizio o lo tenevo sul livello di hosting per catturare errori come binding e routing

risposta data 17.11.2017 - 09:36
fonte
1

Utilizzando la terminologia di Patterns of Enterprise Application Architecture di Martin Fowler, questo sarebbe chiamato Gateway perché è la porta del sistema di back-end e incapsula tutti i dettagli dell'interazione back-end. Potresti quindi vederlo come parte di un livello di origine dati, che disaccoppia la M di MVC dai dettagli sporchi. Se il back-end è un database, ci sono nomi di pattern più specifici a seconda di come esattamente si accede al database per lavorare con gli oggetti.

Se sei fan di architettura esagonale , chiameresti questo AccountManager un adattatore . Nella architettura pulita sarebbe un gateway nell'adattatore strato.

Commento non correlato: quando osservo tutte le responsabilità di quella classe, mi chiedo solo se è conforme a SRP .

    
risposta data 17.11.2017 - 08:57
fonte

Leggi altre domande sui tag