ඕනෑම MVC වෙබ් යෙදුමකම දක්නට ලැබෙන ප්රධාන අංගයන් 3ක් තියනවා. ඒවා Mode, View සහ Controller ලෙස හදුන්වනවා. මෙහි MVC යන නාමය ලැබිලා තියෙන්නේ ඒ නිසාබව මතක තබාගන්න. ඊට අමතරව මේ MVC කියන්නෙ ඇත්තටම design pattern එකක් එහෙම නැත්නම් ආදර්ශකයක් කිවොත් නිවැරදී. MVC කියන්නේ ASP.NET Core වලට විතරක් සීමාවුනු design pattern එකක් නෙවයි MVC Design Pattern එක භාවිතාකරල ඕනෑම භාෂාවකින් ක්රමලේකනය කරන්න අපිට පුලුවන්. ඇත්තෙන්ම මේක අචුවක් වගේ අපේ වැඩ පහසුකරන්න හදපු pattern එකක් කීවුවොත් නිවැරදීයි.
Model-View-Controller රටාව යෙදුමක් ප්රධාන කොටස් තුනකට වෙන් කරයි: Model, View සහ Controller. සාම්ප්රදායික Monolithic යෙදුම් වලට වඩා පරීක්ෂා කළ හැකි සහ යාවත්කාලීන කිරීමට පහසු යෙදුම් නිර්මාණය කිරීමට MVC රටාව ඔබට උපකාරී වේ. MVC මත පදනම් වූ යෙදුම් වල අඩංගු වන්නේ:
Model
යෙදුමේ දත්ත නියෝජනය කරන classes. Model Classes එම දත්ත සඳහා business rules බලාත්මක කිරීම සඳහා validation logic භාවිතා කරයි. සාමාන්යයෙන්, Model Object දත්ත ගබඩාවක(Database) Model ලබාගෙන data store කරයි. මෙම නිබන්ධනයේ දී, චිත්රපට ආකෘතියක් දත්ත සමුදායකින් චිත්රපට දත්ත ලබා ගනී, එය view එකට සපයයි හෝ යාවත්කාලීන කරයි. යාවත්කාලීන දත්ත දත්ත ගබඩාවකට ලියා ඇත.
Views
View යනු යෙදුමේ පරිශීලක අතුරුමුහුණත (UI) පෙන්වන සංරචක වේ. සාමාන්යයෙන්, මෙම UI ඉහත Model එක Database එක හරහා ලබාගන්න්නා දත්ත පෙන්වයි.
Controller
Web Browser එකෙන් එන requests controll කරනුලබන classes, controllers ලෙස හැදින්වේ . ඔවුන් Model Data ලබා ගන්නා අතර එම data පතිචාරයක් ලෙස request කරපු web browser එක වෙත යැවීම සිදු කරයි,. MVC යෙදුමක, View පමණක් තොරතුරු පෙන්වයි(UI); Controller එක පරිශීලක ආදානය (user inputs) සහ අන්තර්ක්රියා (interaction) වලට ප්රතිචාර දක්වයි. නිදසුනක් ලෙස, Controller එක route data සහ query-string අගයන් හසුරුවන අතර මෙම අගයන් Model එක ලබා දෙයි. දත්ත සමුදාය හරහා විමසීමට Models මෙම අගයන් භාවිතා කරයි. උදාහරණයක් ලෙස, https://localhost:5001/Home/Privacy හි Home (controller එක) සහ Privacy යන route data ඇත (Home Controller ඇමතීමේ ක්රියාකාරී ක්රමය). https://localhost: 5001/Movies/Edit/5 යනු Movie Controller එක භාවිතා කර ID = 5 සමඟ චිත්රපටය edit කිරීමට කරන ඉල්ලීමකි. Routing Data පසු නිබන්ධනයේදී විස්තර කෙරේ.
මෙම MVC pattern එක components අතර ලිහිල් සම්බන්ධතාවයක් (loosly couple) සපයන අතරම, යෙදුමේ විවිධ අංග (input logic, business logic සහ UI Logic) වෙන් කරන යෙදුම් නිර්මාණය කිරීමට MVC රටාව ඔබට උදව් කරයි. යෙදුම තුළ එක් එක් ආකාරයේ තර්කනයන් (logics) තිබිය යුත්තේ කොතැනදැයි රටාව නියම කරයි. UI Logic වලට View අයත් වේ. Input Logics, Controllers වලට අයත් වේ. Business Logic, Models වලට අයත් වේ. ඔබ යෙදුම ගොඩනඟන විට සංකීර්ණත්වය කළමනාකරණය කිරීමට මෙම වෙන් කිරීම (seperation) ඔබට උපකාරී වේ, මන්ද එය ක්රියාත්මක කිරීමේදී එක් අංගයක් වරකට තවත් කේතයකට බලපෑම් නොකර (impacting one another) වැඩ කිරීමට ඔබට ඉඩ සලසයි. උදාහරණයක් ලෙස, Business Logic කේතය මත පදනම්ව ඔබට View කේතය මත වැඩ කළ හැකිය.
මෙම නිබන්ධන මාලාවේ අපි මෙම සංකල්ප ආවරණය කරන අතර Movie Application යෙදුමක් තැනීමට ඒවා භාවිතා කරන්නේ කෙසේදැයි පෙන්වමු. MVC ව්යාපෘතියේ Controllers,Models සහ Views සඳහා ෆෝල්ඩර අඩංගු වේ.
Add a controller
Solution Explorer හි, Controllers (Right Click)> Add > Controller
Scaffold එක් කරන්න සංවාද කොටුව තුළ, MVC Controller- Empty තෝරන්න
Empty MVC Controller එකතු කිරීමේදී, Name සඳහා HelloWorldController ඇතුළු කර ADD තෝරන්න.
Controller එකේ – HelloWorldController.cs හි අන්තර්ගතය පහත සඳහන් දෑ සමඟ Replace කරන්න:
using Microsoft.AspNetCore.Mvc; using System.Text.Encodings.Web; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my default action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } } }
Contoller එකේ ඇති සෑම Public Method එකක්ම HTTP Endpoint එකක් ලෙස හැඳින්විය හැකිය. ඉහත code එකෙ ක්රම දෙකම නැවත String Value එක return කරයි.
HTTP Endpoint යනු https://localhost:5001/HelloWorld වැනි වෙබ් යෙදුමේ Targerted URL ය, සහ භාවිතා කරන Protocole ඒකාබද්ධ කරයි( HTTPS). වෙබ් Serverයේ Network පිහිටීම (TCP port ඇතුළුව): localhost: 5001 සහ Target URI HelloWorld ඇතුලත්ව.
යෙදුම non-debug mode ආකාරයෙන් Run කර Address තීරුවේ ඇති path එකට “HelloWorld” එකතු කරන්න. එවිට ඔබට Index Method එක මඟින් පහත පරිදි String එකක් පෙන්නුම් කරයි.
URL එක මත පදනම්ව MVC Controller Class (සහ ඒවා තුළ ඇති Action methods) Rquest කර සිටී. MVC විසින් භාවිතා කරන සුපුරුදු URL Routing Logic මඟින් Request කළ යුතු කේතය තීරණය කිරීම සඳහා මෙවැනි ආකෘතියක් භාවිතා කරයි:
/[Controller]/[ActionName]/[Parameters]
මෙම ආකෘතියට අදාල routing configuration එක Startup.cs file එක තුල ඇති Configure method එකේ ඔබට පහත අයුරින් දැක ගත හැකිවනු ඇතිඅ
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
ඊළඟ tutorial එකෙන් හමුවෙමු.