Марк Прайс предложил свой набор из 60 вопросов (как технических, так и на софт-скилы), которые могут задать на собеседовании.
32. Синтаксис Razor
«Расскажите, что такое Razor и как он используется в приложениях ASP.NET Core? Приведите пример».
Хороший ответ
Razor — это синтаксис разметки, который позволяет встраивать код C# в HTML-документы для динамической генерации HTML-контента на сервере перед его отправкой клиенту. Он используется в основном в представлениях ASP.NET Core MVC, Razor Pages и веб-приложениях Blazor для создания динамических веб-страниц.
Блоки кода в Razor начинаются с символа @, который помогает компилятору отличать код C# от HTML. Это позволяет беспрепятственно интегрировать серверную логику в структурированный HTML-файл, расширяя возможности рендеринга веб-страниц на основе динамических данных.
В качестве примера синтаксиса Razor в представлении ASP.NET Core MVC рассмотрим простую модель, представляющую продукт:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
В следующем представлении показано, как отобразить список продуктов:
@model IEnumerable<Product>
<h2>Список Продуктов</h2>
<table>
<thead>
<tr>
<th>Название</th>
<th>Цена</th>
</tr>
</thead>
<tbody>
@foreach (var p in Model)
{
<tr>
<td>@p.Name</td>
@* Денежный формат *@
<td>@p.Price.ToString("C")</td>
</tr>
}
</tbody>
</table>
В этом примере синтаксис Razor используется для итерации по коллекции объектов Product, переданных в представление из контроллера. Он динамически генерирует строки таблицы (
<tr>) для каждого продукта с его названием и ценой. Символ @ используется для вставки кода C# в HTML для итерации по списку и отображения данных.Преимущества использования Razor включают:
- Повышение производительности: Razor снижает сложность написания и поддержки динамических веб-страниц, позволяя разработчикам писать код C# непосредственно в представлении.
- Строгая типизация: Используя C# в представлении, Razor поддерживает IntelliSense и проверку кода во время компиляции, уменьшая количество ошибок во время выполнения.
- Чёткое разделение: Razor помогает поддерживать чёткое разделение задач между логикой пользовательского интерфейса и логикой бэкэнда, придерживаясь паттерна MVC.
Часто встречающийся неверный ответ
«Синтаксис Razor — это просто использование символа @ для написания любого кода C# непосредственно в HTML. Можно выполнять любую бизнес-логику в представлении, чтобы манипулировать данными так, как вам нужно».
Почему это неправильно
- Неправильное использование Razor для бизнес-логики: Этот ответ предполагает ненадлежащее использование представлений Razor для выполнения бизнес-логики, что нарушает принцип разделения ответственности в MVC. Представления Razor предназначены для обработки логики представления, а не бизнес-логики.
- Потенциальные проблемы с избыточностью и поддержкой: Встраивание сложной логики C# в представления Razor может привести к избыточному, трудно поддерживаемому коду. Это затрудняет чтение и управление представлением, особенно для других разработчиков или при возвращении к коду через некоторое время.
- Проблемы с производительностью: Выполнение сложной логики в представлении может привести к проблемам с производительностью, поскольку она может обрабатываться для каждого запроса, а не более эффективно обрабатываться на уровне контроллера или сервиса.
Эта ошибка обычно возникает из-за непонимания ролей в паттерне MVC или из-за опыта работы с фреймворками веб-разработки, которые нечетко разделяют бизнес-логику и логику представления.
Источник: https://github.com/markjprice/tools-skills-net8/blob/main/docs/interview-qa/readme.md