Как называется слой между MVC-контроллером и back-end?

У меня есть приложение ASP.NET MVC со следующим контроллером и действием:

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

и AccountsManager:

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;
        }
    }
}

Итак, этот класс AccountsManager удаляет дублирование кода и инкапсулирует следующую логику:

  • Связь с внутренними концами
  • Разрешение зависимостей
  • Кэширование
  • Вход
  • Обработка ошибок
  • Отображение ViewModel
  • Запросить повторную попытку, службу auth и т. д.

Однако вызов этого класса XXXManager заставляет меня чувствовать себя некомфортно, поскольку это слово Manager неоднозначно.

Как обычно называется этот слой?

3 голоса | спросил Yeldar Kurmangaliyev 17 52017vEurope/Moscow11bEurope/MoscowFri, 17 Nov 2017 09:23:45 +0300 2017, 09:23:45

1 ответ


1

Используя шаблоны Мартин Фаулер архитектуры корпоративных приложений, терминологию, это будет называться Gateway , потому что это ворота для внутренней системы и инкапсулирует все детали взаимодействия с внутренним интерфейсом. Затем вы можете увидеть его как часть слоя источника данных, который отделяет M MVC от грязных деталей. Если back-end является базой данных, более конкретные имена шаблонов в зависимости от того, как именно вы получаете доступ к базе данных для работы с объектами.

Если вы поклонник гексагональной архитектуры , вы бы назвали этот AccountManager адаптер . В чистой архитектуре оно будет быть шлюзом в слое адаптера.


Несвязанное замечание: глядя на все обязанности этого класса, я просто задаюсь вопросом, соответствует ли он SRP .

ответил Christophe 17 52017vEurope/Moscow11bEurope/MoscowFri, 17 Nov 2017 10:57:27 +0300 2017, 10:57:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132