Если под «хелперы» вы имеете в виду такие вещи, как HtmlHelper
то, нет, они не используются контроллером как в теории вы могли бы принять ваши контроллеры и повторно использовать их с совершенно другой рендеринга (например, WPF), поскольку контроллер не отвечает за рендеринг.
Если вы говорите, как мне кажется, вспомогательные классы/методы, которые манипулируют вашими данными, готовыми для его ввода в модель с помощью контроллера, а затем передаются в представление для презентации, тогда вы можете рассмотрим слой «бизнес-логики». Например, если вы говорите (когда-либо типичный) пример банковского счета, вы могли бы иметь:
public class BankAccountService
{
public IEnumerable<string> GetAllAccountIdsForCustomer(int customerId)
{
// Talk to the database here and retrieve the account id's for a customer
}
public string GetCustomerName(int customerId)
{
// Talk to the database here and retrieve the customer's name
}
}
Ваш контроллер будет тогда:
public ActionResult AccountNumbers(int customerId)
{
var model = new AccountNumbersModel();
model.CustomerId = customerId;
model.AccountNumbers = BankAccountService.GetAllAccountIdsForCustomer(customerId);
return View(model);
}
Очевидно, что в этом примере вы должны имеют класс, называемый AccountNumbersModel
, и вы также, вероятно, захотите рассмотреть возможность использования Dependency Injection, чтобы предоставить вашему контроллеру экземпляр BankAccountService
, но описывая, как обойти все, что не входит в рамки этого ответа.
Преимущества такой подход дает вам проверяемость и разделение, каждая часть кода отвечает за одну задачу, и вы уменьшить сложность каждого отдельного элемента и сделать его легче вносить изменения, не нарушая вещи.
Я тоже думал об этом, даже если он не используется на всех контроллерах? – Darren
просто не выходят из него, если вам это не нужно. –
Попытайтесь избежать кода, специфичного для данных, в ваших контроллерах, если просто не передадите значение данных на другой уровень сервиса, репозиторий и т. Д. –