Blazor ili MVC i Razor Pages za internu poslovnu aplikaciju?
MVC i Razor Pages su provjereni, a Microsoft za većinu web sučelja preporučuje Blazor. Gdje se razlika vidi i zašto rijetko morate birati samo jedno.
Vlado Pandžić · Osnivač · Senior .NET arhitekt
Objavljeno · 4 min čitanja
Sadržaj
.NET tim kreće s internom aplikacijom: narudžbe, odobrenja, izvještaji. Pola tima zna ASP.NET MVC ili Razor Pages u dušu, a oba su provjerena, stabilna i dobro dokumentirana. Netko predloži Blazor. Isplati li se?
Microsoftov vodič za odabir web sučelja je jasan: Blazor se preporučuje za većinu web scenarija. Ali to ne znači da svaku MVC aplikaciju treba prepisati. Prava pitanja su koliko su ekrani interaktivni i što već imate.
Razlika u tri rečenice
- MVC: kontroleri primaju zahtjev, pripremaju podatke i vraćaju pogled (view). Svaki klik koji treba server novi je zahtjev.
- Razor Pages: ista ideja, organizirana po stranicama umjesto po kontrolerima. Jednostavnije za aplikacije s puno formi.
- Blazor: ekran se slaže od C# komponenti. Mogu se renderirati na serveru kao Razor Pages ili raditi interaktivno, na serveru ili u pregledniku preko WebAssemblyja.
Ista forma u oba
Jednostavna forma za novu narudžbu. U Razor Pages to su stranica i njezin handler:
@page
@model NewOrderModel
<form method="post">
<input asp-for="Order.Customer" />
<span asp-validation-for="Order.Customer"></span>
<button>Save</button>
</form>
public class NewOrderModel(OrderService orders) : PageModel
{
[BindProperty]
public OrderInput Order { get; set; } = new();
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
return Page();
await orders.CreateAsync(Order);
return RedirectToPage("Index");
}
}
U Blazoru je to jedna komponenta:
@inject OrderService Orders
@inject NavigationManager Navigation
<EditForm Model="Order" OnValidSubmit="SaveAsync" FormName="new-order">
<DataAnnotationsValidator />
<InputText @bind-Value="Order.Customer" />
<ValidationMessage For="() => Order.Customer" />
<button>Save</button>
</EditForm>
@code {
[SupplyParameterFromForm]
private OrderInput? Order { get; set; }
protected override void OnInitialized() => Order ??= new();
private async Task SaveAsync()
{
await Orders.CreateAsync(Order!);
Navigation.NavigateTo("/orders");
}
}
Za jednostavnu formu to je otprilike jednako posla. Razlika se pojavi čim ekran mora reagirati: cijena se preračuna kad se promijeni količina, drugi padajući izbornik ovisi o prvom, popis se filtrira dok tipkate. U MVC-u i Razor Pagesu to je JavaScript uz C#. U Blazoru ostaje u C#-u, u istoj komponenti.
Usporedba po onome što je važno poslovanju
| Blazor | MVC i Razor Pages | |
|---|---|---|
| Interaktivni ekrani | U C#-u, bez zasebnog JavaScripta | JavaScript ili biblioteka poput htmx-a, uz C# |
| Jednostavne forme i popisi | Jednako lako | Jednako lako i vrlo zrelo |
| Dijelovi ekrana za višekratnu upotrebu | Komponente, kroz cijelu aplikaciju | Partial viewovi i tag helperi, manje prirodno |
| Javne stranice i SEO | Dobro uz statično renderiranje na serveru | Odlično, prirodno |
| Resursi servera | Interaktivni server mode drži vezu za svaku otvorenu karticu | Zahtjev, odgovor, ništa se ne čuva |
| Tim | C# developeri brzo postanu produktivni | Većina .NET developera ga već zna |
| Postojeća aplikacija | Može se dodati u nju, ekran po ekran | Ostaje kakva jest |
Redak o serveru zaslužuje rečenicu. Blazor u interaktivnom server modu drži živu vezu za svaku otvorenu karticu. Za internu aplikaciju s nekoliko stotina korisnika to nije problem. Za javnu stranicu s tisućama posjetitelja koristite za te stranice statično renderiranje ili WebAssembly. Kada koristiti što, pišemo u članku Blazor Server ili WebAssembly.
Kada MVC ili Razor Pages ostaje pravi izbor
- Velika MVC aplikacija već radi. Prepisivati je samo radi promjene frameworka rijetko se isplati.
- Uglavnom forme i statične stranice, s malo interakcije na ekranu.
- Javni sadržaj koji se mora brzo otvarati i rangirati na Googleu.
- Tim koji dobro zna MVC i ne treba bogatije ekrane.
Rijetko morate birati samo jedno
Blazor komponente mogu živjeti unutar postojeće MVC ili Razor Pages aplikacije. Zato je najsigurniji put postupan: postojeći ekrani ostaju kakvi jesu, a novi, interaktivniji, pišu se u Blazoru. Aplikacija se tako s vremenom mijenja tempom koji poslovanju odgovara, bez velikog prepisivanja. Isti pristup radi i za starije aplikacije, pogledajte članak o migraciji s Web Formsa na Blazor.
Pet pitanja prije odluke
- Koliko su aplikacije forme i popisi, a koliko ekrani koji reagiraju dok radite?
- Postoji li već MVC ili Razor Pages aplikacija i radi li?
- Je li aplikacija interna ili iza prijave, ili je javna i ovisi o Googleu?
- Koliko će je korisnika imati otvorenu u isto vrijeme?
- Tko je održava za pet godina i što ti ljudi znaju?
Ako odgovori upućuju na interaktivne ekrane, prijavu i C# tim, za novi posao izaberite Blazor. Ako upućuju na MVC aplikaciju koja radi i uglavnom ima forme, zadržite je i dodajte Blazor samo gdje ekran to stvarno treba. Kako se Blazor uspoređuje s JavaScript frameworcima, pišemo u člancima Blazor ili Angular i Blazor ili React.
Kako mi radimo
ProCoding je .NET studio iz Splita. Održavamo MVC i Razor Pages aplikacije, a Blazor isporučujemo u produkciju od 2020., pa nemamo razloga gurati jedno ili drugo. Pomažemo vam odabrati, gradimo nove Blazor aplikacije i uvodimo Blazor u postojeće aplikacije ekran po ekran. Prvi korak je besplatan razgovor od 30 minuta.
Izvori
- Choose an ASP.NET Core web UI, Microsoft Learn
- ASP.NET Core Blazor render modes, Microsoft Learn
- Integrate ASP.NET Core Razor components into ASP.NET Core apps, Microsoft Learn
Ovaj članak služi općem informiranju i nije pravni, porezni, financijski ni drugi stručni savjet. Scenariji, primjeri i izračuni su ilustrativni. Uvjeti korištenja i odricanje od odgovornosti.