සම්මත "ආදර්ශ දර්ශන පාලක" රටාව සහ මයික්රොසොෆ්ට් හි ආදර්ශ / දර්ශන / දසුන් මොඩල් රටාව අතර වෙනසක් තිබේද?
සම්මත "ආදර්ශ දර්ශන පාලක" රටාව සහ මයික්රොසොෆ්ට් හි ආදර්ශ / දර්ශන / දසුන් මොඩල් රටාව අතර වෙනසක් තිබේද?
Answers:
ASP.Net සහ Silverlight / WPF යන දෙවර්ගයේම රටා දෙක විවිධාකාරයෙන් වර්ධනය වේ.
ASP.Net සඳහා, දර්ශන තුළ දත්ත ද්වි-මාර්ග බන්ධනය කිරීමට MVVM භාවිතා කරයි . මෙය සාමාන්යයෙන් සේවාදායක පාර්ශවයක් ක්රියාත්මක කිරීමකි (උදා: Knockout.js භාවිතා කිරීම). අනෙක් අතට MVC යනු සේවාදායකයාගේ පැත්තෙන් උත්සුකයන් වෙන් කිරීමේ ක්රමයකි .
Silverlight සහ WPF සඳහා, MVVM රටාව වඩාත් ක්රිව අතර හැකි පෙනී MVC (හෝ වෙන වෙනම වගකීම් මෘදුකාංග සංවිධානය වෙනත් රටා) ආදේශනයක් ලෙස ක්රියා කිරීමට. එක් උපකල්පනය, නිතර නිතර මෙම රටාව පිටතට පැමිණි බව, සතුටු විය හැකි ViewModel
හුදෙක් පාලකය වෙනුවට MVC
(ඔබ ආදේශ කළ හැකි නම් VM
සඳහා C
සංකේත නාමය මුළු සමාව දෙනු ලැබේ) ...
ගැටළුව වන්නේ: ස්වාධීනව පරීක්ෂා කළ හැකි වීම * සහ අවශ්ය වූ විට විශේෂයෙන් නැවත භාවිතා කිරීම, දර්ශන ආකෘතියකට එය පෙන්වන්නේ කුමන දෘෂ්ටියක් දැයි නොදැන සිටීමයි, නමුත් වඩා වැදගත් වන්නේ එහි දත්ත පැමිණෙන්නේ කොතැනින්ද යන්නයි .
* සටහන: ප්රායෝගිකව පාලකයන් විසින් ඒකක පරීක්ෂාව අවශ්ය වන ViewModel වෙතින් බොහෝ තර්කනයන් ඉවත් කරයි. වීඑම් පසුව ගොළු බහාලුමක් බවට පත්වන අතර එය පරීක්ෂා කිරීම සඳහා සුළු ප්රමාණයක් අවශ්ය වේ. වීඑම් යනු පාලමක් පමණක් බැවින් නිර්මාණකරු සහ කෝඩරය අතර මෙය හොඳ දෙයකි, එබැවින් සරලව තබා ගත යුතුය.
MVVM හි පවා, පාලකයන් සාමාන්යයෙන් සියළුම සැකසුම් තර්කනයන් අඩංගු වන අතර කුමන දර්ශන ආකෘති භාවිතා කරන්නේද යන්න පෙන්විය යුත්තේ කුමන දත්තද යන්න තීරණය කරයි.
XAML සංස්කරණය වඩාත් ස්වාධීන කාර්යයක් බවට පත් කිරීම සඳහා XAML කේත පිටුපසින් කේතය ඉවත් කිරීම ViewModel රටාවේ ප්රධාන වාසිය අප මෙතෙක් දැක ඇති දෙයින් . අපගේ යෙදුම්වල සමස්ත තර්කනය පාලනය කිරීම සඳහා (අවශ්ය නොවන විට) අපි තවමත් පාලකයන් නිර්මාණය කරමු.
මූර්ති කේත-ජාන රාමුව මගින් එම්වීවීඑම් සහ ප්රිස්මයට සමාන රටාවක් ක්රියාත්මක කරන බවත්, එමඟින් සියලු භාවිත-සිද්ධි තර්කනයන් වෙන් කිරීම සඳහා පාලකයන් පුළුල් ලෙස භාවිතා කරන බවත් අපි සටහන් කළෙමු .
මම මෙම මාතෘකාව පිළිබඳ බ්ලොග් අඩවියක් ආරම්භ කර ඇති අතර එය මට හැකි සෑම විටම එකතු කරමි . බොහෝ සංචාලන පද්ධති දර්ශන සහ වීඑම් භාවිතා කරන බැවින් එම්වීසීවීඑම් පොදු සංචාලන පද්ධති සමඟ සංයෝජනය කිරීමේ ගැටළු තිබේ, නමුත් මම පසුව ලිපි වලින් ඒ වෙත යන්නෙමි.
MVCVM ආකෘතියක් භාවිතා කිරීමේ අමතර වාසියක් වන්නේ යෙදුමේ ආයු කාලය සඳහා පාලක වස්තු පමණක් මතකයේ පැවතීම සහ පාලකයන්ගේ ප්රධාන වශයෙන් කේත සහ කුඩා රාජ්ය දත්ත (එනම් කුඩා මතක උඩිස්) අඩංගු වීමයි. දර්ශන ආකෘති රඳවා තබා ගත යුතු විසඳුම් වලට වඩා මෙය මතක ශක්තියෙන් අඩු යෙදුම් සඳහා හේතු වන අතර එය ඇතැම් ආකාරයේ ජංගම සංවර්ධනය සඳහා වඩාත් සුදුසු වේ (උදා: වින්ඩෝස් මොබයිල් සිල්වර් ලයිට් / ප්රිස්ම් / එම්ඊඑෆ් භාවිතා කරයි). ප්රතිචාර දැක්වීම සඳහා ඉඳහිට හැඹිලි වීඑම් යන්ත්ර රඳවා තබා ගැනීමට ඔබට අවශ්ය විය හැකි බැවින් මෙය ඇත්ත වශයෙන්ම යෙදුම් වර්ගය මත රඳා පවතී.
සටහන: මෙම ලිපිය බොහෝ වාර ගණනක් සංස්කරණය කර ඇති අතර, අසන ලද පටු ප්රශ්නය නිශ්චිතවම ඉලක්ක කර නොතිබූ බැවින් දැන් එය ද ආවරණය වන පරිදි පළමු කොටස යාවත්කාලීන කර ඇත. සාකච්ඡාවේ වැඩි හරියක්, පහත දැක්වෙන අදහස් දැක්වීමේදී සම්බන්ධ වන්නේ ඒඑස්පී.නෙට් වෙත මිස පුළුල් චිත්රයට නොවේ. මෙම තනතුර සිල්වර් ලයිට්, ඩබ්ලිව්පීඑෆ් සහ ඒඑස්පී නෙට් හි එම්වීවීඑම් හි පුළුල් භාවිතය ආවරණය කිරීම සඳහා වන අතර පාලකයන් වෙනුවට විව්මොඩල්ස් ආදේශ කිරීමෙන් ජනතාව අධෛර්යමත් කිරීමට උත්සාහ කරයි.
මෙම අක්ෂරවල අර්ථය කුමක්දැයි වටහා ගැනීමට ඇති පහසුම ක්රමය නම් ඒවා ගැන මොහොතකට අමතක කිරීමයි. ඒ වෙනුවට, ඔවුන් ආරම්භ කළ මෘදුකාංගය ගැන සිතා බලන්න. මුල් වෙබය සහ ඩෙස්ක්ටොප් එක අතර වෙනස දක්වා එය සැබවින්ම තම්බා ගනී.
2000 දශකයේ මැද භාගයේදී ඒවා සංකීර්ණ වූ විට, 1970 ගණන්වලදී මුලින් විස්තර කරන ලද එම්වීසී මෘදුකාංග සැලසුම් රටාව වෙබ් යෙදුම් සඳහා යොදා ගැනීමට පටන් ගත්තේය. දත්ත සමුදාය, HTML පිටු සහ කේත inbetween සිතන්න. MVC වෙත පැමිණීමට මෙය මඳක් පිරිපහදු කරමු: »දත්ත සමුදාය For සඳහා, දත්ත සමුදාය සහ අතුරු මුහුණත කේතය උපකල්පනය කරමු. »HTML පිටු For සඳහා, අපි HTML සැකිලි සහ අච්චු සැකසුම් කේතය උපකල්පනය කරමු. »කේත inbetween For සඳහා, කේත සිතියම්ගත කිරීම පරිශීලකයා ක්රියාවන්ට ක්ලික් කිරීම උපකල්පනය කරමු, එය දත්ත සමුදායට බලපානු ඇත, අනිවාර්යයෙන්ම වෙනත් දර්ශනයක් දර්ශනය වීමට හේතු වේ. අවම වශයෙන් මෙම සංසන්දනය සඳහා එය එයයි.
මෙම වෙබ් දේවල් වල එක් අංගයක් අද මෙන් නොව, මීට වසර දහයකට පෙර පැවති පරිදි, ජාවාස්ක්රිප්ට් පහත්, නින්දිත කරදරයක් වූ විට, සැබෑ ක්රමලේඛකයින් එයින් ඉවත් වීමට හොඳ විය: HTML පිටුව අත්යවශ්යයෙන්ම ගොළු සහ උදාසීන ය . බ්රවුසරය තුනී සේවාදායකයෙක් හෝ ඔබ කැමති නම් දුප්පත් සේවාදායකයෙක්. බ්රවුසරයේ බුද්ධියක් නොමැත. සම්පූර්ණ පිටු රීලෝඩ් රීතිය. සෑම අවස්ථාවකම »දර්ශනය« නැවත උත්පාදනය වේ.
මෙම වෙබ් ක්රමය, සියලු කෝපයෙන් පැවතියද, ඩෙස්ක්ටොප් එකට සාපේක්ෂව දරුණු ලෙස පසුගාමී වූ බව මතක තබා ගනිමු. ඩෙස්ක්ටොප් යෙදුම් යනු ඔබ කැමති නම් මේද සේවාදායකයින් හෝ පොහොසත් සේවාදායකයින් ය. (මයික්රොසොෆ්ට් වර්ඩ් වැනි වැඩසටහනක් පවා යම් ආකාරයක සේවාදායකයෙකු, ලේඛන සඳහා සේවාදායකයෙකු ලෙස සිතිය හැකිය.) ඔවුන් බුද්ධිමත්, ඔවුන්ගේ දත්ත පිළිබඳ දැනුමක් ඇති සේවාදායකයින් ය. ඒවා රාජ්යයි. ඔවුන් මතකයේ හසුරුවන දත්ත හැඹිලිගත කරයි. සම්පූර්ණ පිටු රීලෝඩ් කිරීම වැනි එවැනි කපටිකම් නොමැත.
මෙම පොහොසත් ඩෙස්ක්ටොප් ක්රමය බොහෝ විට දෙවන අක්ෂර මාලාව වන එම්වීවීඑම් විය හැකිය. අකුරු වලට රැවටෙන්න එපා, සී පාලකයන් මඟ හැරීම නිසා තවමත් පවතී. ඔවුන් විය යුතුයි. කිසිවක් ඉවත් නොවේ. අපි එක් දෙයක් පමණක් එකතු කරමු: රාජ්ය භාවය, සේවාදායකයා මත දත්ත තැන්පත් කිරීම (ඒ සමඟම එම දත්ත හැසිරවීමට බුද්ධිය). එම දත්ත, අත්යවශ්යයෙන්ම සේවාදායකයාගේ හැඹිලියක් වන අතර එය දැන් »ViewModel called ලෙස හැඳින්වේ. පොහොසත් අන්තර්ක්රියාකාරිත්වයට ඉඩ දෙන්නේ එයයි. ඒක තමයි.
ෆ්ලෑෂ්, සිල්වර් ලයිට් සහ - වඩාත්ම වැදගත් - ජාවාස්ක්රිප්ට් සමඟ වෙබය එම්වීවීඑම් වැලඳගෙන ඇති බව අපට දැක ගත හැකිය. බ්රව්සර් තවදුරටත් තුනී සේවාදායකයින් ලෙස නීත්යානුකූලව හැඳින්විය නොහැක. ඔවුන්ගේ ක්රමලේඛන හැකියාව දෙස බලන්න. ඔවුන්ගේ මතක පරිභෝජනය දෙස බලන්න. නවීන වෙබ් පිටුවල ඇති සියලුම ජාවාස්ක්රිප්ට් අන්තර්ක්රියාකාරිත්වය දෙස බලන්න.
පුද්ගලිකව, මෙම න්යාය සහ සංක්ෂිප්ත ව්යාපාරය තේරුම් ගත හැකි වන්නේ එය යථාර්ථය තුළ සඳහන් කර ඇති දේ දෙස බැලීමෙනි. වියුක්ත සංකල්ප ප්රයෝජනවත් වේ, විශේෂයෙන් කොන්ක්රීට් පදාර්ථ මත නිරූපණය කරන විට, අවබෝධය සම්පූර්ණ රවුමට පැමිණිය හැකිය.
MVVM Model-View ViewModel MVC, Model-View Controller හා සමාන වේ
පාලකය ViewModel සමඟ ප්රතිස්ථාපනය වේ . ViewModel යූඅයි ස්තරයට පහළින් පිහිටා ඇත. ViewModel මඟින් දර්ශනයට අවශ්ය දත්ත සහ විධාන වස්තු නිරාවරණය කරයි. ඔබට මෙය බහාලුම් වස්තුවක් ලෙස සිතිය හැකි අතර එහි දත්ත සහ ක්රියාවන් ලබා ගත හැකිය. ViewModel එහි දත්ත ආකෘතියෙන් ඇද ගනී.
රසල් ඊස්ට් බ්ලොග් අඩවියක් සවිස්තරාත්මකව සාකච්ඡා කරයි MVVM MVC ට වඩා වෙනස් වන්නේ ඇයි?
If you put ten software architects into a room and have them discuss what the Model-View-Controller pattern is, you will end up with twelve different opinions. …
එක් දෙයක් නම්, MVVM යනු දර්ශනය හැසිරවීමට XAML භාවිතා කරන MVC රටාවේ ප්රගතියකි. මෙම ලිපියෙන් දෙදෙනාගේ සමහර අංගයන් දක්වා ඇත.
මොඩල් / වීව් / වීව් මොඩල් ගෘහ නිර්මාණ ශිල්පයේ ප්රධාන තෙරපුම වන්නේ දත්ත වලට ඉහළින් (”මොඩලය”), දෘශ්ය නොවන සංරචකවල තවත් ස්ථරයක් (“වීව් මොඩලය”) ඇති අතර දත්ත සංකල්ප වඩාත් සමීපව සිතියම් ගත කරයි. දත්තවල දර්ශනයේ සංකල්පවලට (”දර්ශනය”). View ජුවම මොඩලයට නොව දර්ශනය බැඳී ඇත්තේ ViewModel ය.
මයික්රොසොෆ්ට් විසින් වින්ඩෝස් පරිසරය තුළ එම්වීවීඑම් රටාව පිළිබඳ පැහැදිලි කිරීමක් සපයන ලදී .
මෙන්න තීරණාත්මක කොටසක්:
Model-View-ViewModel සැලසුම් රටාවේ, යෙදුමක් පොදු සංරචක තුනකින් සමන්විත වේ.
ආකෘතිය : මෙය ඔබගේ යෙදුම පරිභෝජනය කරන දත්ත ආකෘතිය නියෝජනය කරයි. උදාහරණයක් ලෙස, පින්තූර බෙදාගැනීමේ යෙදුමක, මෙම ස්තරය උපාංගයක ඇති පින්තූර සමූහය සහ පින්තූර පුස්තකාලයට කියවීමට හා ලිවීමට භාවිතා කරන API නියෝජනය කරයි.
බලන්න : යෙදුමක් සාමාන්යයෙන් UI හි පිටු කිහිපයකින් සමන්විත වේ. පරිශීලකයාට පෙන්වන සෑම පිටුවක්ම MVVM පාරිභාෂිතයේ දර්ශනයකි. දර්ශනය යනු පරිශීලකයා දකින දේ නිර්වචනය කිරීමට හා මෝස්තර කිරීමට භාවිතා කරන XAML කේතයයි. මාදිලියේ දත්ත පරිශීලකයාට දර්ශනය වන අතර, යෙදුමේ වත්මන් තත්වය මත පදනම්ව මෙම දත්ත යූඅයි පෝෂණය කිරීම ViewModel හි කාර්යය වේ. නිදසුනක් ලෙස, පින්තූර බෙදාගැනීමේ යෙදුමක, දර්ශන යනු පරිශීලකයාට උපාංගයේ ඇල්බම ලැයිස්තුව, ඇල්බමයේ පින්තූර සහ පරිශීලකයාට විශේෂිත පින්තූරයක් පෙන්වන තවත් එකක් ය.
ViewModel : ViewModel යෙදුමේ දත්ත ආකෘතිය හෝ සරලවම ආකෘතිය UI හෝ දර්ශන සමඟ සම්බන්ධ කරයි. ආකෘතියෙන් දත්ත කළමනාකරණය කළ යුතු තර්කනය එහි අඩංගු වන අතර XAML UI නොහොත් දර්ශන වලට බැඳිය හැකි ගුණාංග සමූහයක් ලෙස දත්ත නිරාවරණය කරයි. උදාහරණයක් ලෙස, පින්තූර බෙදාගැනීමේ යෙදුමක, ViewModel විසින් ඇල්බම ලැයිස්තුවක් හෙළි කරනු ඇති අතර සෑම ඇල්බමයක් සඳහාම පින්තූර ලැයිස්තුවක් නිරාවරණය වේ. පින්තූර පැමිණෙන්නේ කොහෙන්ද සහ ඒවා ලබා ගන්නේ කෙසේද යන්න පිළිබඳ UI අ nost ෙයවාදී ය. එය හුදෙක් ViewModel විසින් නිරාවරණය කර ඇති පින්තූර සමූහයක් ගැන දන්නා අතර ඒවා පරිශීලකයාට පෙන්වයි.
මම සිතුවේ එක් ප්රධාන වෙනසක් නම් එම්වීසී හි ඔබේ වී ඔබේ එම් කෙලින්ම කියවන අතර දත්ත හැසිරවීම සඳහා සී හරහා යන අතර එම්වීවීඑම් හි ඔබේ වීඑම් එම් ප්රොක්සියක් ලෙස ක්රියා කරන අතරම ඔබට ලබා ගත හැකි ක්රියාකාරිත්වය සැපයීමයි. වී.
මම කුණු වලින් පිරී නොමැති නම්, කිසිවෙකු දෙමුහුන් වර්ගයක් නිර්මාණය කර නොමැති බව මට පුදුමයි, එහිදී ඔබේ වීඑම් හුදෙක් එම් ප්රොක්සියක් වන අතර සී සියළුම ක්රියාකාරීත්වය සපයයි.
MVC යනු පාලිත පරිසරයක් වන අතර MVVM යනු ප්රතික්රියාශීලී පරිසරයකි.
පාලිත පරිසරයක ඔබට අඩු කේතයක් සහ පොදු තර්කනයේ ප්රභවයක් තිබිය යුතුය; එය සැමවිටම පාලකය තුළ ජීවත් විය යුතුය. කෙසේවෙතත්; වෙබ් ලෝකයේ MVC පහසුවෙන් දර්ශන නිර්මාණය කිරීමේ තර්කනය හා ගතික තර්කනය ලෙස බෙදී යයි. නිර්මාණය සේවාදායකයේ ජීවත් වන අතර සේවාදායකයා මත ගතික ජීවිත ගත කරයි. ඔබ මෙය ASP.NET MVC සමඟ AngularJS සමඟ ඒකාබද්ධව දකින අතර සේවාදායකයා දර්ශනයක් නිර්මාණය කර මොඩලයක් තුළ සමත් වී එය සේවාදායකයාට යවනු ඇත. පසුව සේවාදායකයා දේශීය පාලකයෙකු ලෙස AngularJS පියවර තබන දර්ශනය සමඟ අන්තර් ක්රියා කරයි. මොඩලය ඉදිරිපත් කළ පසු හෝ නව මොඩලයක් නැවත සේවාදායක පාලකයට ලබා දී හසුරුවනු ලැබේ. (මේ අනුව චක්රය අඛණ්ඩව සිදුවන අතර සොකට් හෝ අජැක්ස් යනාදිය සමඟ වැඩ කිරීමේදී මෙම හැසිරවීමේ වෙනත් පරිවර්තන රාශියක් ඇත. නමුත් සියල්ලටම වඩා ගෘහ නිර්මාණ ශිල්පය සමාන වේ.)
MVVM යනු ප්රතික්රියාශීලී පරිසරයක් වන අතර එයින් අදහස් වන්නේ ඔබ සාමාන්යයෙන් කේත ලිවීම (ප්රේරක වැනි) යම් සිදුවීමක් මත පදනම්ව ක්රියාත්මක වන බවයි. MVVM සමෘද්ධිමත් වන XAML හි, මේ සියල්ල පහසුවෙන් ගොඩනගා ඇති දත්ත සමුදා රාමුව සමඟ කළ හැකි නමුත් සඳහන් කළ පරිදි මෙය ඕනෑම ක්රමලේඛන භාෂාවක් සමඟ ඕනෑම දර්ශනයක ඕනෑම පද්ධතියක ක්රියා කරනු ඇත. එය MS විශේෂිත නොවේ. ViewModel ගිනි ගනී (සාමාන්යයෙන් දේපල වෙනස් කළ සිදුවීමක්) සහ ඔබ නිර්මාණය කරන ඕනෑම ප්රේරකයක් මත පදනම්ව දර්ශනය එයට ප්රතික්රියා කරයි. මෙය තාක්ෂණික ලබා ගත හැකි නමුත් අවසාන කරුණ නම් දර්ශනය අස්ථායි සහ තර්කනයකින් තොරව ය. එය හුදෙක් සාරධර්ම මත පදනම්ව තත්වය වෙනස් කරයි. තව දුරටත්, ViewModels ඉතා සුළු තර්කනයකින් අස්ථායි වන අතර, ආකෘති යනු අත්යවශ්යයෙන්ම ශුන්ය තර්කනය සහිත රාජ්යය වන අතර ඒවා රාජ්යය පමණක් පවත්වා ගත යුතුය. මම මෙය යෙදුම් තත්වය (ආකෘතිය), රාජ්ය පරිවර්තකය (ViewModel) සහ දෘශ්ය තත්වය / අන්තර්ක්රියා (View) ලෙස විස්තර කරමි.
MVC ඩෙස්ක්ටොප් එකක හෝ ග්රාහක පාර්ශවීය යෙදුමක දී ඔබට ආකෘතියක් තිබිය යුතු අතර, ආකෘතිය පාලක විසින් භාවිතා කළ යුතුය. ආකෘතිය මත පදනම්ව පාලකය දර්ශනය වෙනස් කරයි. දර්ශන සාමාන්යයෙන් පාලකයන් සමඟ අතුරුමුහුණත් සමඟ බැඳී ඇති අතර එමඟින් පාලකයාට විවිධ දර්ශන සමඟ වැඩ කළ හැකිය. ASP.NET හි පාලක විසින් ආකෘති කළමනාකරණය කර තෝරාගත් දර්ශනයකට ආකෘති යවන බැවින් MVC සඳහා වන තර්කනය සේවාදායකයේ තරමක් පසුපසට යයි. දර්ශනය පසුව ආකෘතිය මත පදනම් වූ දත්ත වලින් පුරවා ඇති අතර එයටම ආවේණික තර්කනයක් ඇත (සාමාන්යයෙන් AngularJS සමඟ සිදු කරන ලද තවත් MVC කට්ටලයක්). ජනතාව තර්ක කර මෙය MVC යෙදුම සමඟ පටලවා ගෙන ව්යාපෘතිය නඩත්තු කිරීම අවසානයේදී ව්යසනයක් බවට පත්වනු ඇත. MVC භාවිතා කරන විට සෑම විටම තර්කනය සහ පාලනය එක් ස්ථානයක තබන්න. පාලක හෝ ආදර්ශ දත්ත සඳහා ඉඩ ලබා දීම සඳහා දර්ශනයේ පිටුපස ඇති කේතයේ (හෝ වෙබ් සඳහා JS හරහා දර්ශනයෙහි) දර්ශන තර්කනය ලියන්න එපා. දර්ශනය වෙනස් කිරීමට පාලකයට ඉඩ දෙන්න. දර්ශනයක ජීවත් විය යුතු එකම තර්කනය එය භාවිතා කරන අතුරුමුහුණත හරහා නිර්මාණය කිරීමට සහ ක්රියාත්මක කිරීමට අවශ්ය ඕනෑම දෙයකි. පරිශීලක නාමයක් සහ මුරපදයක් ඉදිරිපත් කිරීම මෙයට නිදසුනකි. ඩෙස්ක්ටොප් වේවා හෝ වෙබ් පිටුවක් වේවා (සේවාදායකයා මත) පාලක විසින් ඉදිරිපත් කිරීමේ ක්රියාවලිය හැසිරවිය යුතුය. නිවැරදිව සිදු කළ හොත් ඔබට සෑම විටම MVC වෙබ් හෝ දේශීය යෙදුමක් වටා පහසුවෙන් යා හැකිය. ඩෙස්ක්ටොප් වේවා හෝ වෙබ් පිටුවක් වේවා (සේවාදායකයා මත) පාලක විසින් ඉදිරිපත් කිරීමේ ක්රියාවලිය හැසිරවිය යුතුය. නිවැරදිව සිදු කළ හොත් ඔබට සෑම විටම MVC වෙබ් හෝ දේශීය යෙදුමක් වටා පහසුවෙන් යා හැකිය. ඩෙස්ක්ටොප් වේවා හෝ වෙබ් පිටුවක් වේවා (සේවාදායකයා මත) පාලක විසින් ඉදිරිපත් කිරීමේ ක්රියාවලිය හැසිරවිය යුතුය. නිවැරදිව සිදු කළ හොත් ඔබට සෑම විටම MVC වෙබ් හෝ දේශීය යෙදුමක් වටා පහසුවෙන් යා හැකිය.
MVVM සම්පූර්ණයෙන්ම ප්රතික්රියාශීලී බැවින් පුද්ගලිකව මගේ ප්රියතමය. මොඩලයක් වෙනස් වුවහොත් ViewModel සවන් දී එම තත්වය පරිවර්තනය කරයි. දර්ශනය පසුව රාජ්ය වෙනස සඳහා ViewModel ට සවන් දෙන අතර එය ViewModel හි පරිවර්තනය මත පදනම්ව යාවත්කාලීන වේ. සමහර අය එය පිරිසිදු එම්වීවීඑම් ලෙස හඳුන්වන නමුත් ඇත්ත වශයෙන්ම ඇත්තේ එකක් පමණක් වන අතර ඔබ එය තර්ක කරන්නේ කෙසේදැයි මට ප්රශ්නයක් නැත. එය සැමවිටම පිරිසිදු එම්වීවීඑම් වේ.
මෙන්න සුළු උදාහරණයක්: බොත්තම් එබීමෙන් ඔබට මෙනු විනිවිදකයක් ලබා ගැනීමට අවශ්ය යැයි කියමු. MVC හි ඔබේ අතුරුමුහුණතෙහි මෙනුප්රෙස්ඩ් ක්රියාවක් ඇත. ඔබ මෙනු බොත්තම ක්ලික් කළ විට පාලකය දැන ගනු ඇති අතර පසුව SlideMenuIn වැනි වෙනත් අතුරුමුහුණත් ක්රමයක් මත පදනම්ව මෙනුවේ ලිස්සා යාමට දර්ශනය කියන්න. වටකුරු ගමනක් කුමන හේතුවක් නිසාද? පාලක විසින් ඔබට වෙනත් දෙයක් කිරීමට නොහැකි බව හෝ ඒ වෙනුවට කළ යුතු යැයි තීරණය කරයි. පාලකවරයා එසේ නොකියන්නේ නම් කිසිවක් නොකර දර්ශනය සමඟ දර්ශනය භාරව සිටිය යුතුය. කෙසේවෙතත්; MVVM හි සජීවිකරණයේ විනිවිදක මෙනුව සෑදිය යුතු අතර එය සාමාන්යය විය යුතු අතර එය විනිවිද යාමට පවසනවා වෙනුවට යම් අගයක් මත පදනම්ව එසේ කරනු ඇත. එබැවින් එය ViewModel ට සවන් දෙන අතර ViewModel පවසන විට IsMenuActive = true (හෝ කෙසේ වෙතත්) ඒ සඳහා සජීවිකරණය සිදු වේ. දැන්, ඒ සමඟ මට තවත් කරුණක් පැවසීමට අවශ්යයි ඇත්ත වශයෙන්ම පැහැදිලි සහ කරුණාකර අවධානය යොමු කරන්න. IsMenuActive බොහෝ විට BAD MVVM හෝ ViewModel නිර්මාණය විය හැකිය. ViewModel එකක් නිර්මාණය කිරීමේදී ඔබ කිසි විටෙකත් දර්ශනයකට කිසියම් අංගයක් ඇති බව නොසිතිය යුතු අතර පරිවර්තනය කළ ආදර්ශ තත්වය පසුකර යන්න. ඒ ආකාරයෙන් ඔබ මෙනුව ඉවත් කිරීම සඳහා ඔබේ දැක්ම වෙනස් කර දත්ත / විකල්ප වෙනත් ආකාරයකින් පෙන්වීමට තීරණය කළහොත්, ViewModel එය ගණන් ගන්නේ නැත. ඉතින් ඔබ මෙනුව කළමනාකරණය කරන්නේ කෙසේද? දත්ත අර්ථවත් වන විට එය එසේ වේ. ඉතින්, මෙය කළ හැකි එක් ක්රමයක් නම් මෙනුවට විකල්ප ලැයිස්තුවක් ලබා දීමයි (බොහෝ විට අභ්යන්තර දර්ශන මොඩල සමූහයක්). එම ලැයිස්තුවට දත්ත තිබේ නම්, මෙනුව ප්රේරකය හරහා විවෘත කිරීමට දනී, එසේ නොවේ නම් එය ප්රේරකය හරහා සැඟවීමට දනී. ඔබට හුදෙක් මෙනුව සඳහා දත්ත තිබේද නැතිනම් ViewModel හි නොමැත. ViewModel හි එම දත්ත පෙන්වීමට / සැඟවීමට තීරණය නොකරන්න .. සරලවම ආකෘතියේ තත්වය පරිවර්තනය කරන්න. මේ ආකාරයෙන් දර්ශනය සම්පූර්ණයෙන්ම ප්රතික්රියාශීලී සහ සාමාන්ය වන අතර විවිධ අවස්ථා වලදී භාවිතා කළ හැකිය.
මේ වන විටත් ඔබ අවම වශයෙන් එක් එක් ගෘහ නිර්මාණ ශිල්පය ගැන මඳක් හුරු වී නොමැති නම් සහ ඉගෙනීම ඉතා ව්යාකූල විය හැකිය.
ඉතින් ... මෙම අයිතිය ලබා ගැනීම සඳහා මතක තබා ගත යුතු දේවල්. ඔබගේ යෙදුම සැලසුම් කරන්නේ කෙසේදැයි ඉදිරියෙන් තීරණය කර එය වෙත යොමු වන්න.
ඔබ එම්වීසී කරන්නේ නම් එය විශිෂ්ටයි, එවිට ඔබට පාලකය කළමනාකරණය කළ හැකි බවටත් ඔබේ දැක්ම සම්පූර්ණයෙන් පාලනය කිරීමටත් වග බලා ගන්න. ඔබට විශාල දර්ශනයක් තිබේ නම් විවිධ පාලකයන් ඇති දර්ශනයට පාලක එකතු කිරීම සලකා බලන්න. එම පාලකයන් විවිධ පාලකයන් වෙත යොමු නොකරන්න. නඩත්තු කිරීමට ඉතා කලකිරීමට පත්ව ඇත. මොහොතක් ගත කර වෙන වෙනම සංරචක ලෙස ක්රියා කරන ආකාරයට දේවල් වෙන වෙනම සැලසුම් කරන්න ... තවද සෑම විටම පාලකවරයා ආදර්ශයට පැවසීමට ඉඩ දෙන්න. MVC සඳහා වඩාත් සුදුසු පරායත්ත සැකසුම වන්නේ View ← Controller → Model හෝ ASP.NET සමඟ (මා ආරම්භ නොකරන්න) ආදර්ශ ← View ↔ Controller → Model (මෙහි ආකෘතිය සමාන විය හැකිය හෝ පාලක සිට දර්ශනය දක්වා සම්පූර්ණයෙන්ම වෙනස් ආකෘතියක් විය හැකිය)... ඇත්ත වශයෙන්ම මේ අවස්ථාවේ දී පාලක දර්ශනය පිළිබඳ දැන ගැනීමට ඇති එකම අවශ්යතාවය බොහෝ විට ආකෘතියක් පසුකර යා යුත්තේ කොතැනට දැයි දැන ගැනීම සඳහා අන්ත ලක්ෂ්ය යොමු කිරීම සඳහා ය.
ඔබ එම්වීවීඑම් කරන්නේ නම්, මම ඔබේ කාරුණික ආත්මයට ආශීර්වාද කරමි, නමුත් එය නිවැරදිව කිරීමට කාලය ගන්න! එකක් සඳහා අතුරුමුහුණත් භාවිතා නොකරන්න. සාරධර්ම මත පදනම්ව එය පෙනෙන්නේ කෙසේද යන්න තීරණය කිරීමට ඔබේ දර්ශනයට ඉඩ දෙන්න. මොක් දත්ත සමඟ දර්ශනය සමඟ සෙල්ලම් කරන්න. ඔබට දර්ශනයක් තිබීම අවසන් වුවහොත් ඔබට මෙනුවක් පෙන්වයි (නිදසුනක් අනුව) ඔබට ඒ අවස්ථාවේ එය අවශ්ය නොවූවත් හොඳයි. ඔබේ දැක්ම එය කළ යුතු ආකාරයට ක්රියාත්මක වන අතර එය කළ යුතු අගයන් මත පදනම්ව ප්රතික්රියා කරයි. ViewModel විශේෂිත පරිවර්තන තත්වයක පවතින විට මෙය සිදු නොවන බවට වග බලා ගැනීම සඳහා ඔබේ ප්රේරකයට තවත් අවශ්යතා කිහිපයක් එකතු කරන්න හෝ මෙම තත්වය හිස් කිරීමට ViewModel වෙත අණ කරන්න. ඔබගේ ViewModel හි මෙය අභ්යන්තර තර්කනයකින් ඉවත් නොකරන්න, ඔබ එය එතැනින් තීරණය කරන්නේ දර්ශනය එය දැකිය යුතුද නැද්ද යන්නයි. ViewModel හි මෙනුවක් තිබේද නැද්ද යන්න ඔබට උපකල්පනය කළ නොහැකි බව මතක තබා ගන්න. අවසාන වශයෙන්, මාදිලිය ඔබට වෙනස් කිරීමට ඉඩ දිය යුතු අතර බොහෝ දුරට ගබඩා තත්වය. වලංගු කිරීම සහ සියල්ල සිදුවන්නේ මෙතැනදීය; උදාහරණයක් ලෙස, මොඩලයට තත්වය වෙනස් කිරීමට නොහැකි නම් එය හුදෙක් අපිරිසිදු හෝ වෙනත් දෙයක් ලෙස සලකුණු කරයි. ViewModel මෙය වටහාගත් විට එය අපිරිසිදු දේ පරිවර්තනය කරනු ඇති අතර දර්ශනය පසුව මෙය වටහාගෙන වෙනත් ප්රේරකයක් හරහා යම් තොරතුරු පෙන්වනු ඇත. දර්ශනයේ ඇති සියලුම දත්ත ViewModel සමඟ බන්ධනය කළ හැකි බැවින් සෑම දෙයක්ම ගතික විය හැක්කේ මොඩලයට පමණක් වන අතර ViewModel හට බන්ධනයට ප්රතිචාර දක්වන්නේ කෙසේද යන්න පිළිබඳව කිසිඳු අදහසක් නොමැත. ඇත්ත වශයෙන්ම මොඩලයට ViewModel එකක් ගැන අදහසක් නැත. පරායත්තතා සැකසීමේදී ඒවා එසේ විය යුතු අතර එසේ විය යුතුය රාජ්යය වෙනස් කිරීම නොකළහොත් එය හුදෙක් අපිරිසිදු හෝ යමක් ලෙස සලකුණු කරයි. ViewModel මෙය වටහාගත් විට එය අපිරිසිදු දේ පරිවර්තනය කරනු ඇති අතර දර්ශනය පසුව මෙය වටහාගෙන වෙනත් ප්රේරකයක් හරහා යම් තොරතුරු පෙන්වනු ඇත. දර්ශනයේ ඇති සියලුම දත්ත ViewModel සමඟ බන්ධනය කළ හැකි බැවින් සෑම දෙයක්ම ගතික විය හැක්කේ මොඩලයට පමණක් වන අතර ViewModel හට බන්ධනයට ප්රතිචාර දක්වන්නේ කෙසේද යන්න පිළිබඳව කිසිඳු අදහසක් නොමැත. ඇත්ත වශයෙන්ම මොඩලයට ViewModel එකක් ගැන අදහසක් නැත. පරායත්තතා සැකසීමේදී ඒවා එසේ විය යුතු අතර එසේ විය යුතුය රාජ්යය වෙනස් කිරීම නොකළහොත් එය හුදෙක් අපිරිසිදු හෝ යමක් ලෙස සලකුණු කරයි. ViewModel මෙය වටහාගත් විට එය අපිරිසිදු දේ පරිවර්තනය කරනු ඇති අතර දර්ශනය පසුව මෙය වටහාගෙන වෙනත් ප්රේරකයක් හරහා යම් තොරතුරු පෙන්වනු ඇත. දර්ශනයේ ඇති සියලුම දත්ත ViewModel සමඟ බන්ධනය කළ හැකි බැවින් සෑම දෙයක්ම ගතික විය හැක්කේ මොඩලයට පමණක් වන අතර ViewModel හට බන්ධනයට ප්රතිචාර දක්වන්නේ කෙසේද යන්න පිළිබඳව කිසිඳු අදහසක් නොමැත. ඇත්ත වශයෙන්ම මොඩලයට ViewModel එකක් ගැන අදහසක් නැත. පරායත්තතා සැකසීමේදී ඒවා එසේ විය යුතු අතර එසේ විය යුතුය දර්ශනයේ ඇති සියලුම දත්ත ViewModel සමඟ බන්ධනය කළ හැකි බැවින් සෑම දෙයක්ම ගතික විය හැක්කේ මොඩලයට පමණක් වන අතර ViewModel හට බන්ධනයට ප්රතිචාර දක්වන්නේ කෙසේද යන්න පිළිබඳව කිසිඳු අදහසක් නොමැත. ඇත්ත වශයෙන්ම මොඩලයට ViewModel එකක් ගැන අදහසක් නැත. පරායත්තතා සැකසීමේදී ඒවා එසේ විය යුතු අතර එසේ විය යුතුය දර්ශනයේ ඇති සියලුම දත්ත ViewModel සමඟ බන්ධනය කළ හැකි බැවින් සෑම දෙයක්ම ගතික විය හැක්කේ මොඩලයට පමණක් වන අතර ViewModel හට බන්ධනයට ප්රතිචාර දක්වන්නේ කෙසේද යන්න පිළිබඳව කිසිඳු අදහසක් නොමැත. ඇත්ත වශයෙන්ම මොඩලයට ViewModel එකක් ගැන අදහසක් නැත. පරායත්තතා සැකසීමේදී ඒවා එසේ විය යුතු අතර එසේ විය යුතුය→ ViewModel → මාදිලිය බලන්න (සහ මෙහි පැත්තක සටහනක් ... මෙය බොහෝ විට තර්ක කරනු ඇත, නමුත් මම එය ගණන් ගන්නේ නැත ... එම මොඩලය වෙනස් කළ නොහැකි නම් මිස දර්ශනය බැලීමට නොයන්න ; එසේ නොමැතිනම් එය a නිසි දර්ශන මොඩලය. දර්ශනය ආදර්ශ කාල පරිච්ඡේදයක් නොපෙනේ. මම මීයන්ට ඔබ දුටු නිරූපණය හෝ ඔබ එය කළ ආකාරය වැරදියි.)
මෙන්න මගේ අවසාන ඉඟිය ... හොඳින් සැලසුම් කර ඇති නමුත් ඉතා සරල MVC යෙදුමක් දෙස බලා MVVM යෙදුමක් සඳහා එයම කරන්න. එක් අයෙකුට ශුන්ය නම්යශීලීභාවයට වඩා වැඩි පාලනයක් ඇති අතර අනෙකාට පාලනයක් සහ අසීමිත නම්යතාවයක් නොමැත.
පාලක සමූහයකින් හෝ (තනි ප්රභවයකින්) සමස්ත යෙදුමම කළමනාකරණය කිරීම සඳහා පාලිත පරිසරයක් හොඳ වන අතර ප්රතික්රියාශීලී පරිසරය වෙනම ගබඩාවලට වෙන් කළ හැකිය. ක්ෂුද්ර කළමනාකරණය එදිරිව නිදහස් කළමනාකරණය.
මම ඔබව ව්යාකූල කර නොමැති නම් මා හා සම්බන්ධ වීමට උත්සාහ කරන්න ... නිදර්ශන සහ උදාහරණ සමඟ මෙය සවිස්තරාත්මකව බැලීමට මට අවශ්ය නැත.
දවස අවසානයේදී අපි සියල්ලෝම ක්රමලේඛකයින් වන අතර කේතීකරණයේදී එම අරාජිකත්වය අප තුළ ජීවත් වේ ... එබැවින් නීති කඩනු ඇත, න්යායන් වෙනස් වනු ඇත, මේ සියල්ලම හොග් වොෂ් අවසන් වනු ඇත ... නමුත් විශාල වශයෙන් වැඩ කරන විට ව්යාපෘති සහ විශාල කණ්ඩායම් මත, එය සැබවින්ම නිර්මාණ රටාවකට එකඟ වී එය බලාත්මක කිරීමට උපකාරී වේ. යම් දවසක එය ආරම්භයේ දී ගන්නා ලද කුඩා අමතර පියවර පසුව ඉතුරුම්වල පිම්මක් බවට පත් කරනු ඇත.
සරල වෙනස: (යාකොව්ගේ Coursera AngularJS පා course මාලාවෙන් ආශ්වාදයක්)
MVC (ආදර්ශ දර්ශන පාලකය)
එම්.වී.වී.එම් (ආදර්ශ දර්ශන දර්ශන ආකෘතිය)
ViewModel :
එම්වීවීඑම් යනු ඉදිරිපත් කිරීමේ ආකෘති රටාවේ ශෝධනය (විවාදාත්මක) ය . මම විවාදාත්මක යැයි කියමි, මන්ද එකම වෙනස වන්නේ දත්ත බන්ධනය හා විධාන හැසිරවීමේ හැකියාව WPF සපයන ආකාරයයි.
වාස්තු විද්යාත්මක රටාවන් පිළිබඳ එතරම් දැනුමක් නැති කෙනෙකුට අනෙක් පිළිතුරු තේරුම් ගැනීම පහසු නොවනු ඇත. යෙදුම් ගෘහ නිර්මාණ ශිල්පයට අළුත් කෙනෙකු එහි තේරීම ප්රායෝගිකව ඇගේ යෙදුමට බලපාන්නේ කෙසේද යන්න සහ ප්රජාවන් තුළ ඇති සියලු විකාර මොනවාදැයි දැන ගැනීමට අවශ්ය විය හැකිය.
ඉහත කරුණු පිළිබඳව යම් ආලෝකයක් හෙළි කිරීමට උත්සාහ කරමින් මම මෙම තිර රචනය MVVM, MVP සහ MVC සම්බන්ධ කර ගතිමි. කථාව ආරම්භ වන්නේ පරිශීලකයෙකු චිත්රපට සෙවුම් යෙදුමක ඇති 'FIND' බොත්තම ක්ලික් කිරීමෙන්…:
පරිශීලකයා: ක්ලික් කරන්න…
බලන්න : ඒ කවුද? [ MVVM | MVP | MVC ]
පරිශීලක: මම සෙවුම් බොත්තම මත ක්ලික් කළෙමි…
බලන්න : හරි, තත්පරයක් ඉන්න…. [ MVVM | MVP | MVC ]
( බලන්න ඇමතුම් ViewModel | ඉදිරිපත් කිරීම | පාලක ...) [ MVVM | වයස් භේදයක් | MVC ]
බලන්න : හේයි වීව් මොඩල් | ඉදිරිපත් කරන්නා | පාලකය , පරිශීලකයෙකු සෙවුම් බොත්තම මත ක්ලික් කර ඇත, මා කුමක් කළ යුතුද? [ MVVM | MVP | MVC ]
ViewModel | ඉදිරිපත් කරන්නා | පාලක : හේයි වීව් , එම පිටුවේ කිසියම් සෙවුම් පදයක් තිබේද? [ MVVM | MVP | MVC ]
නරඹන්න : ඔව්,… මෙන්න එයයි… “පියානෝ” [ MVVM | MVP | MVC ]
M MVVM සහ MVP | අතර ඇති වැදගත්ම වෙනස මෙයයි MVC ———
ඉදිරිපත් කරන්නා : ස්තූතියි බලන්න ,… මේ අතර මම මාදිලියේ සෙවුම් පදය සොයමින් සිටිමි , කරුණාකර ඔහුට / ඇයට ප්රගති තීරුවක් පෙන්වන්න [ MVP | MVC ]
( ඉදිරිපත් කිරීම | පාලක ආරාධනා ආදර්ශ ...) [ වයස් භේදයක් | MVC ]
ViewController : ස්තූතියි, මම මාදිලියේ සෙවුම් පදය සොයා බලනු ඇත, නමුත් ඔබව කෙලින්ම යාවත්කාලීන නොකරමි . ඒ වෙනුවට, කිසියම් ප්රති .ලයක් තිබේ නම් මම සිදුවීම් සෙවුම් ප්රති results ල ලැයිස්තුගත කළ හැකිය. ඒ නිසා ඔබ ඒ ගැන හොඳින් නිරීක්ෂණය කළා. [ එම්.වී.වී.එම් ]
(SearchResultsListObservable ඕනෑම කොකා මත නිරීක්ෂණය කරමින්, එම දැක්ම නිසා එය, පරිශීලක කිරීමට යම් ප්රගතියක් තීරුව පෙන්විය යුතුයි සිතන ViewModel බව එය කතා නැහැ)
——————————————————————————————
ViewModel | ඉදිරිපත් කරන්නා | පාලක : හේයි මොඩල් , ඔබට මෙම සෙවුම් යෙදුමට කිසියම් ගැලපීමක් තිබේද?: “පියානෝ” [ එම්වීවීඑම් | එම්වීපී | MVC ]
ආකෘතිය : හේයි වීව් මොඩල් | ඉදිරිපත් කරන්නා | පාලකය , මට පරීක්ෂා කිරීමට ඉඩ දෙන්න… [ MVVM | එම්වීපී | එම්වීසී ]
( මොඩලය චිත්රපට දත්ත ගබඩාවට විමසීමක් කරයි…) [ එම්වීවීඑම් | එම්වීපී | MVC ]
( ටික මොහොතකට පසු … )
M මෙය MVVM , MVP සහ MVC අතර අපසරන ලක්ෂ්යයයි ————–
ආකෘතිය : මම ඔබ වෙනුවෙන් ලැයිස්තුවක් සොයා ගත්තා, ViewModel | ඉදිරිපත් කරන්නා , මෙන්න එය JSON “[{“ නම ”:“ පියානෝ ගුරු ”,” වර්ෂය ”: 2001}, {“ නම ”:“ පියානෝ ”,” වර්ෂය ”: 1993}]” [ MVVM | එම්වීපී ]
ආකෘතිය : යම් ප්රති result ලයක් ඇත, පාලකය. මම මගේ අවස්ථාවෙහිදී ක්ෂේත්ර විචල්යයක් නිර්මාණය කර ප්රති .ලයෙන් එය පුරවා ඇත්තෙමි. එහි නම “searchResultsList” [ MVC ]
( ඉදිරිපත් කරන්නා | පාලක ස්තූතියි ආදර්ශය සහ නැවත දර්ශනය වෙත පැමිණේ ) [ MVP | MVC ]
ඉදිරිපත් කරන්නා : දර්ශනය බලා සිටීම ගැන ස්තූතියි , මම ඔබට ගැලපෙන ප්රති results ල ලැයිස්තුවක් සොයා ගෙන ඒවා ඉදිරිපත් කළ හැකි ආකෘතියකින් සකස් කළෙමි: [“පියානෝ ගුරු 2001 ″,” පියානෝ 1993 ”]. කරුණාකර දැන් ප්රගති තීරුව සඟවන්න [ එම්වීපී ]
පාලකය : දර්ශනය බලා සිටීම ගැන ස්තූතියි , මම ඔබගේ සෙවුම් විමසුම ගැන මොඩල්ගෙන් විමසුවෙමි. එය පවසන්නේ එය ගැලපෙන ප්රති results ල ලැයිස්තුවක් සොයාගෙන ඇති අතර ඒවා “searchResultsList” නම් විචල්යයක ගබඩා කර ඇති බවයි. ඔබට එය එතැනින් ලබා ගත හැකිය. කරුණාකර දැන් ප්රගති තීරුව සඟවන්න [ MVC ]
ViewModel : searchResultsListObservable හි ඕනෑම නිරීක්ෂකයෙකුට මෙම නව ලැයිස්තුව ඉදිරිපත් කළ හැකි ආකෘතියෙන් ඇති බව දැනුම් දෙනු ලැබේ: [“Piano Teacher 2001 ″,” Piano 1993 ”]. [ MVVM ]
බලන්න : බොහොම ස්තූතියි ඉදිරිපත් කරන්නා [ එම්වීපී ]
දැක්ම : ස්තුතියි " පාලක " [ MVC ] (දැන් දැක්ම ම ප්රශ්න කරයි: මම කොහොමද සිට මම ලබා ප්රතිඵල ඉදිරිපත් කළ යුතු ආදර්ශ ? පරිශීලකයාට යුතු චිත්රපටය නිෂ්පාදනය වසර පළමු හෝ අවසන් එන්න ...)
නරඹන්න : ඔහ්, සෙවුම් ප්රති results ල ලැයිස්තුවේ නව ප්රේරකයක් තිබේ…, හොඳයි, ඉදිරිපත් කළ හැකි ලැයිස්තුවක් තිබේ, දැන් මට එය ලැයිස්තුවක් තුළ පමණක් පෙන්විය යුතුය. ප්රති the ලය මා සතුව ඇති බැවින් මම දැන් ප්රගති තීරුව සැඟවිය යුතුය. [ MVVM ]
ඔබ උනන්දුවක් දක්වන්නේ නම්, චිත්රපට සෙවුම් ඇන්ඩ්රොයිඩ් යෙදුමක් ක්රියාත්මක කිරීමෙන් MVVM, MVP සහ MVC සංසන්දනය කරමින් මම මෙහි ලිපි මාලාවක් ලියා ඇත .
Viewmodel යනු ඔබේ පරිශීලක අතුරුමුහුණත් අංග සඳහා “වියුක්ත” ආකෘතියකි. දෘශ්ය නොවන ආකාරයකින් ඔබේ දැක්මෙහි විධාන සහ ක්රියා ක්රියාත්මක කිරීමට එය ඔබට ඉඩ දිය යුතුය (උදාහරණයක් ලෙස එය පරීක්ෂා කිරීමට).
ඔබ එම්වීසී සමඟ වැඩ කර ඇත්නම්, ඔබේ දෘෂ්ටියේ තත්වය පිළිබිඹු කිරීම සඳහා ආදර්ශ වස්තු නිර්මාණය කිරීමට ඔබට යම් කලෙක ප්රයෝජනවත් විය හැකිය, නිදසුනක් ලෙස, සමහර සංස්කරණ සංවාද පෙන්වීමට හා සැඟවීමට යනාදිය. එවැනි අවස්ථාවක ඔබ දර්ශන මොඩලයක් භාවිතා කරයි.
MVVM රටාව යනු හුදෙක් සියලු UI මූලද්රව්යයන්ට එම පුහුණුව සාමාන්යකරණය කිරීමයි.
එය මයික්රොසොෆ්ට් රටාවක් නොවේ, WPF / Silverlight දත්ත බන්ධන මෙම රටාව සමඟ වැඩ කිරීමට විශේෂයෙන් සුදුසු වේ. නමුත් ජාවා සේවාදායක මුහුණු සමඟ එය භාවිතා කිරීමට කිසිවක් ඔබව වළක්වන්නේ නැත.
MSFT හි MVC යන්ත්රය එය අපෙන් සඟවන බැවින් මෙම ආකෘතියේ ඉල්ලීම හෝ ප්රතිචාර වස්තු සමඟ තවත් HTTP මට්ටමේ සම්බන්ධතාවයක් නොමැත .
ඉහත 6 වන අයිතමය පැහැදිලි කිරීමේදී (ඉල්ලීම අනුව) ...
මේ වගේ ViewModel එකක් උපකල්පනය කරන්න:
public class myViewModel{
public string SelectedValue {get;set;}
public void Post(){
//due to MVC model binding the SelectedValue string above will be set by MVC model binding on post back.
//this allows you to do something with it.
DoSomeThingWith(SelectedValue);
SelectedValue = "Thanks for update!";
}
}
තනතුරේ පාලක ක්රමය මේ ආකාරයට පෙනෙනු ඇත (පහත බලන්න), mvm හි උදාහරණය MVC බන්ධන යාන්ත්රණයන් මඟින් ස්වයංක්රීයව ස්ථාපනය වන බව සලකන්න. එහි ප්රති result ලයක් ලෙස ඔබ කිසි විටෙකත් විමසුම් නූල් ස්ථරයට බැසීමට අවශ්ය නැත! විමසුම් නූල් මත පදනම්ව MVC ඔබ වෙනුවෙන් ViewModel ස්ථාපනය කරයි!
[HTTPPOST]
public ActionResult MyPostBackMethod (myViewModel mvm){
if (ModelState.IsValid)
{
// Immediately call the only method needed in VM...
mvm.Post()
}
return View(mvm);
}
ඉහත ක්රියාකාරී ක්රියාව ඔබ අදහස් කරන ආකාරයට ක්රියාත්මක වීමට නම්, ඔබ විසින් තනතුරේ ආපසු නොඑන දේවල් ඇඟවුම් කරන ශුන්ය CTOR අර්ථ දැක්වීමක් තිබිය යුතුය. වෙනස් වූ දේවල් සඳහා පසුපසට ආපසු නම / අගය යුගල පළ කළ යුතුය. නම / වටිනාකම් යුගල නොමැති නම්, එම්වීසී බන්ධන එන්ජිම නිසි දේ නොකරයි. මෙය සිදුවුවහොත් "පෝස්ට් බැක් වල දත්ත මට අහිමි වේ" යැයි ඔබ කියනු ඇත ...
මෙම රටාවේ වාසිය වන්නේ ViewModel විසින් ආදර්ශ / මිලට ගැනීමේ තර්කනයට අන්තර් සම්බන්ධ වන සියලු "අවුල් සහගත" කාර්යයන් සිදු කරයි, පාලකය හුදෙක් විවිධාකාරයේ රවුටරයකි. එය ක්රියාත්මක වන්නේ SOC ය.
MVVM දර්ශන මාදිලිය මිශ්රණයට එක් කරයි. මෙය වැදගත් ය, එය ඔබගේ සාමාන්ය මාදිලියේ UI විශේෂිත කොටස් සියල්ලම නොතබා WPF හි බන්ධන ප්රවේශය භාවිතා කිරීමට ඉඩ සලසයි.
මම වැරදියි, නමුත් මට විශ්වාස නෑ MVVM ඇත්තටම පාලකය මිශ්රණයට බල කරයි. මෙම සංකල්පය වඩාත් ගැලපෙන බව මට පෙනේ: http://martinfowler.com/eaaDev/PresentationModel.html . මම හිතන්නේ මිනිසුන් එය එම්වීසී සමඟ ඒකාබද්ධ කිරීමට තෝරාගනී, එය රටාව තුළ ගොඩනගා ඇති බවක් නොවේ.
මට කිව හැකි දෙයින්, MVVM MVC හි MV වෙත සිතියම් ගත කරයි - එයින් අදහස් කරන්නේ සාම්ප්රදායික MVC රටාවකින් V M සමඟ කෙලින්ම සන්නිවේදනය නොවන බවයි. MVC හි දෙවන අනුවාදයේ M සහ V. MVVM අතර link ජු සම්බන්ධයක් ඇත. එම් සහ වී සන්නිවේදනයට අදාළ සියලු කාර්යයන් භාර ගන්නා අතර, එය සී වෙතින් වෙන් කිරීමට යුවළක් යොදන්න. ඇත්ත වශයෙන්ම, එම්වීවීඑම් හි සම්පූර්ණයෙන් ගණනය කර නොමැති විශාල විෂය පථ යෙදුම් කාර්ය ප්රවාහය (හෝ භාවිත අවස්ථා ක්රියාත්මක කිරීම) තවමත් පවතී. පාලකයේ කාර්යභාරය මෙයයි. පාලකයන්ගෙන් මෙම පහළ මට්ටමේ අංග ඉවත් කිරීමෙන් ඒවා පිරිසිදු වන අතර යෙදුමේ භාවිත අවස්ථා සහ ව්යාපාර තර්කනය වෙනස් කිරීම පහසු කරවන අතර පාලකයන් නැවත භාවිතා කළ හැකිය.
එම්වීවීඑම් හි මූලාරම්භය ගැන සඳහන් නොකර මෙය ඉහළ ඡන්ද ප්රතිශතයක් වීම මට පුදුමයකි. MVVM යනු මයික්රොසොෆ්ට් ප්රජාව තුළ භාවිතා වන ජනප්රිය යෙදුමකි. එය ආරම්භ වූයේ මාටින් ෆෝලර්ගේ ඉදිරිපත් කිරීමේ ආකෘතියෙනි . එබැවින් රටාවේ චේතනාව සහ අන් අය සමඟ ඇති වෙනස්කම් තේරුම් ගැනීමට, රටාව පිළිබඳ මුල් ලිපිය කියවිය යුතු පළමු දෙයයි.
හොඳයි, සාමාන්යයෙන් MVC වෙබ් සංවර්ධනය සඳහා භාවිතා කරන අතර MVVM WPF / Silverlight සංවර්ධනයේදී වඩාත් ජනප්රිය වේ. කෙසේ වෙතත්, සමහර විට වෙබ් ගෘහ නිර්මාණ ශිල්පයට MVC සහ MVVM මිශ්ර විය හැකිය.
උදාහරණයක් ලෙස: ඔබට knockout.js භාවිතා කළ හැකි අතර මේ අවස්ථාවේ දී ඔබේ සේවාදායකයාගේ පැත්තෙන් MVVM ඇත. ඔබේ MVC හි සේවාදායක පැත්තද වෙනස් විය හැකිය. සංකීර්ණ යෙදුම් වල කිසිවෙකු පිරිසිදු ආකෘතිය භාවිතා නොකරයි. MVC හි "ආකෘතියක්" ලෙස ViewModel භාවිතා කිරීමට හැඟීමක් තිබිය හැකි අතර ඔබේ සැබෑ ආකෘතිය මූලික වශයෙන් මෙම VM හි කොටසක් වනු ඇත. මෙය ඔබට අතිරේක වියුක්ත තට්ටුවක් ලබා දෙයි.
පාලකය MVVM හි ViewModel මගින් ප්රතිස්ථාපනය නොවේ, මන්ද ViewModel සම්පූර්ණයෙන්ම වෙනස් ක්රියාකාරිත්වයක් ඇති අතර පසුව පාලකය. ඔබට තවමත් පාලකයෙකු අවශ්යය, මන්ද පාලකයකු නොමැතිව ඔබේ ආකෘතිය, ViewModel සහ View බොහෝ දේ නොකරනු ඇත ... MVVM හි ඔබට පාලකයකු ද ඇත, MVVM යන නම අස්ථානගත වෙමින් පවතී.
මගේ නිහතමානී මතයේ නිවැරදි නම එම්වීවීඑම්සී ය.
ඔබට පෙනෙන පරිදි ViewModel යනු MVC රටාවට එකතු කිරීමකි. එය පරිවර්තක-තර්කනය (නිදසුනක් ලෙස වස්තුව නූලකට පරිවර්තනය කරයි) පාලකයේ සිට ViewModel වෙත ගෙන යයි.
මම මේ සඳහා මධ්යම ලිපියක් හැදුවා.
එම්.වී.වී.එම්
➡ ViewModel View ආකෘතිය බලන්න
ඔබ පාලක භාවිතා කරන්නේ නම්, එය වෙත යොමු පුළුවන් දසුන් හා ViewModels , එය පාලක පෙන්නුම් ලෙස අවශ්ය සෑම විටම නොවේ නමුත් SwiftUI .
class CustomView: UIView {
var viewModel = MyViewModel {
didSet {
self.color = viewModel.color
}
}
convenience init(viewModel: MyViewModel) {
self.viewModel = viewModel
}
}
struct MyViewModel {
var viewColor: UIColor {
didSet {
colorChanged?() // This is where the binding magic happens.
}
}
var colorChanged: ((UIColor) -> Void)?
}
class MyViewController: UIViewController {
let myViewModel = MyViewModel(viewColor: .green)
let customView: CustomView!
override func viewDidLoad() {
super.viewDidLoad()
// This is where the binder is assigned.
myViewModel.colorChanged = { [weak self] color in
print("wow the color changed")
}
customView = CustomView(viewModel: myViewModel)
self.view = customView
}
}
සැකසීමේ වෙනස්කම්
පොදු ලක්ෂණ
MVVM හි වාසි
MVC හි වාසි
MVVMC, හෝ සමහර විට MVC +, ව්යවසාය මෙන්ම වේගවත් යෙදුම් සංවර්ධනය සඳහා ශක්ය ප්රවේශයක් ලෙස පෙනේ. ව්යාපාර සහ අන්තර්ක්රියා තර්කනයෙන් UI වෙන් කිරීම සතුටක් වන අතර, 'පිරිසිදු' MVVM රටාව සහ ලබා ගත හැකි බොහෝ උදාහරණ ඒකීය අදහස් මත වඩාත් හොඳින් ක්රියාත්මක වේ.
ඔබගේ නිර්මාණ ගැන විශ්වාස නැත, නමුත් මගේ බොහෝ යෙදුම්වල පිටු සහ (නැවත භාවිතා කළ හැකි) දර්ශන කිහිපයක් අඩංගු වන අතර එම නිසා ViewModels යම් දුරකට අන්තර්ක්රියා කිරීමට අවශ්ය වේ. පිටුව පාලකය ලෙස භාවිතා කිරීම MVVM හි අරමුණ මුළුමනින්ම පරාජය කරනු ඇත, එබැවින් යටින් පවතින තර්කනය සඳහා "VM-C" ප්රවේශයක් භාවිතා නොකිරීම ප්රති result ල විය හැකිය .. හොඳයි .. යෙදුම පරිණත වන විට අභියෝගාත්මක ඉදිකිරීම්. VB-6 හි පවා අපගෙන් බොහෝ දෙනෙක් බොත්තම් සිද්ධියට ව්යාපාර තර්කනය කේතනය කිරීම නවතා පාලකයකුට 'රිලේ' විධාන ආරම්භ කළා නේද? මම මෑතකදී එම මාතෘකාව පිළිබඳ නැගී එන බොහෝ රාමු දෙස බැලුවෙමි; මගේ ප්රියතම දේ පැහැදිලිවම මැගෙලන් (කෝඩ්ප්ලෙක්ස් හි) ප්රවේශයයි. සුබ කේතීකරණයක්!
http://en.wikipedia.org/wiki/Model_View_ViewModel#References
ප්රායෝගික දෘෂ්ටි කෝණයකින්, MVC (Model-View-Controller) යනු රටාවකි. කෙසේ වෙතත්, MVC ASP.net MVC ලෙස භාවිතා කරන විට, ආයතන රාමුව (EF) හා “බල මෙවලම්” සමඟ සංයුක්ත වන විට දත්ත සමුදායන්, වගු සහ තීරු වෙබ් පිටුවකට ගෙන ඒම සඳහා ඉතා බලවත්, අර්ධ වශයෙන් ස්වයංක්රීය ප්රවේශයකි. CRUD මෙහෙයුම් හෝ R (ලබා ගැනීම හෝ කියවීම) මෙහෙයුම් සඳහා පමණි. අවම වශයෙන් මම එම්වීවීඑම් භාවිතා කරන විට, දර්ශන මාදිලි ව්යාපාරික වස්තූන් මත යැපෙන ආකෘති සමඟ අන්තර්ක්රියා කළ අතර ඒවා “අතින් සාදන ලද” ඒවා වූ අතර විශාල පරිශ්රමයකින් පසුව, ඊඑෆ් එකක් ලබා දෙන තරමට වඩා හොඳ ආකෘති ලබා ගැනීමට යමෙකු වාසනාවන්ත විය. -of-the-box ". ප්රායෝගික ක්රමලේඛන දෘෂ්ටි කෝණයකින් බලන කල, එම්වීසී හොඳ තේරීමක් ලෙස පෙනෙන්නේ එය එක් උපයෝගීතාවයක් පිටතදී ලබා දෙන බැවිනි, නමුත් සීනු හා විස්ල් එකතු කිරීමට තවමත් හැකියාවක් ඇත.
ලබා දී ඇති බොහෝ ප්රතිචාර වලට අනුපූරකව, නවීන සේවාදායක පාර්ශවීය වෙබ් - හෝ පොහොසත් වෙබ් යෙදුම් දෘෂ්ටි කෝණයෙන් අමතර ඉදිරිදර්ශනයක් එක් කිරීමට මට අවශ්ය විය .
ඇත්ත වශයෙන්ම මේ දිනවල සරල වෙබ් අඩවි සහ විශාල වෙබ් යෙදුම් බහුලව ගොඩනඟා ඇත්තේ බූට්ස්ට්රැප් වැනි ජනප්රිය පුස්තකාල සමඟ ය. ස්ටීව් Sanderson විසින් ඉදි, පිලිමළුන් පිටුදැකීම රටාව වඩාත් වැදගත් හැසිරීම් එකක් mimics මෙම MVVM රටාව සඳහා සහයෝගය සපයයි: දසුන මාදිලිය හරහා දත්ත-බන්ධන. කුඩා ජාවාස්ක්රිප්ට් සමඟ, දත්ත සහ තර්කනය ක්රියාත්මක කළ හැකි අතර එය බූට්ස්ට්රැප් හිdata-bind
බොහෝ අංග භාවිතා කිරීමට සමාන සරල HTML ගුණාංග සහිත පිටු මූලද්රව්යවලට එකතු කළ හැකිය . මෙම පුස්තකාල දෙක පමණක් එක්ව අන්තර්ක්රියාකාරී අන්තර්ගතයන් ඉදිරිපත් කරයි; මෙම ප්රවේශය මාර්ගගත කිරීම සමඟ සංයෝජනය වන විට තනි පිටු යෙදුම ගොඩනැගීම සඳහා සරල නමුත් බලවත් ප්රවේශයක් ලබා ගත හැකිය .
ඒ හා සමානව, කෝණික වැනි නවීන සේවාදායක පාර්ශවීය රාමුවක් සම්මුතිය අනුව එම්වීසී රටාව අනුගමනය කරන අතර සේවාවක් ද එක් කරයි. සිත්ගන්නා කරුණ නම්, එය ආදර්ශ-දර්ශනය-කුමක් වුවත් (MVW) ලෙස හැඳින්වේ. ( Stack Overflow හි මෙම ලිපිය බලන්න .)
මීට අමතරව, කෝණික 2 වැනි ප්රගතිශීලී වෙබ් රාමු වල නැගීමත් සමඟම, පාරිභාෂිතයේ වෙනසක් සහ සමහර විට නව වාස්තු විද්යාත්මක රටාවක් අපට දැකගත හැකිය, එහිදී සංරචක දර්ශන හෝ අච්චුවකින් සමන්විත වන අතර සේවාවක් සමඟ අන්තර් ක්රියා කරයි - මේ සියල්ලම a. මොඩියුලය; සහ මොඩියුල මාලාවක් යෙදුම සෑදී ඇත.
මම හිතුවා MVC සහ MVVM එක සමානයි කියලා. දැන් ෆ්ලක්ස් වල පැවැත්ම නිසා මට වෙනස කියන්න පුළුවන්:
MVC හි, ඔබගේ යෙදුමේ සෑම දර්ශනයක් සඳහාම, ඔබට ආකෘතියක් සහ පාලකයක් ඇත, එබැවින් මම එය දර්ශනය, දර්ශන ආකෘතිය, දර්ශන පාලකය ලෙස හඳුන්වන්නෙමි. එක් දර්ශනයක් තවත් දෘෂ්ටියක් සමඟ සන්නිවේදනය කරන්නේ කෙසේදැයි රටාව ඔබට නොකියයි. එබැවින් විවිධ රාමු තුළ ඒ සඳහා විවිධ ක්රියාත්මක කිරීම් තිබේ. උදාහරණයක් ලෙස පාලකයන් එකිනෙකා සමඟ කතා කරන ක්රියාත්මක කිරීම් ඇති අතර අනෙක් ක්රියාත්මක කිරීම් වලදී ඔවුන් අතර මැදිහත් වන තවත් අංගයක් ඇත. දර්ශන ආකෘති එකිනෙකා සමඟ සන්නිවේදනය කරන ක්රියාවට නැංවීම් පවා ඇත, එය එම්වීසී රටාවේ බිඳීමක් වන බැවින් දර්ශන ආකෘතියට ප්රවේශ විය යුත්තේ දර්ශන පාලකයට පමණි.
MVVM හි, ඔබට එක් එක් සංරචක සඳහා දර්ශන ආකෘතියක් ද ඇත. රටාව මඟින් දර්ශන මාදිලියට බලපෑම් කළ යුතු ආකාරය නිශ්චිතව දක්වා නැත, එබැවින් සාමාන්යයෙන් බොහෝ රාමු තුළ දර්ශන ආකෘතියේ පාලකයේ ක්රියාකාරිත්වය ඇතුළත් වේ. කෙසේ වෙතත්, MVVM ඔබට පවසන්නේ ඔබේ දර්ශන ආකෘතියේ දත්ත පැමිණිය යුත්තේ ආකෘතියෙන් වන අතර එය නිශ්චිත දර්ශනයකට නොදැන හෝ අභිරුචිකරණය නොකරන සමස්ත ආකෘතියයි.
වෙනස නිරූපණය කිරීම සඳහා, අපි ෆ්ලක්ස් රටාව ගනිමු. යෙදුමේ විවිධ අදහස් සන්නිවේදනය කළ යුතු ආකාරය ප්රවාහ රටාව පවසයි. සෑම දර්ශනයක්ම වෙළඳසැලකට ඇහුම්කන් දෙන අතර පිටත්කරුවා භාවිතයෙන් ක්රියා කරයි. යවා ඇති තැනැත්තා අනෙක් වෙළඳසැල් වලට දැන් කර ඇති ක්රියාව ගැන පවසන අතර වෙළඳසැල් යාවත්කාලීන වේ. ෆ්ලක්ස් හි ගබඩාවක් එම්වීවීඑම් හි (සාමාන්ය) ආකෘතියට අනුරූප වේ. එය කිසියම් නිශ්චිත දර්ශනයකට සිරිතක් නොවේ. එබැවින් සාමාන්යයෙන් මිනිසුන් ප්රතික්රියා සහ ප්රවාහ භාවිතා කරන විට, එක් එක් ප්රතික්රියා සංරචකය ඇත්ත වශයෙන්ම MVVM රටාව ක්රියාත්මක කරයි. ක්රියාවක් සිදු වූ විට, දර්ශන ආකෘතිය පිටත්කරුවා අමතයි, අවසානයේදී එය ගබඩාවේ වෙනස්කම් අනුව යාවත්කාලීන වේ, එය ආකෘතියයි. එක් එක් සංරචකය MVC ක්රියාත්මක කරන බව ඔබට පැවසිය නොහැක, මන්ද MVC හි පාලකවරයාට පමණක් දර්ශන ආකෘතිය යාවත්කාලීන කළ හැකිය.
mvc යනු සේවාදායක පාර්ශවයක් වන අතර mvvm යනු වෙබ් සංවර්ධනයේදී සේවාදායක පාර්ශවය (බ්රව්සරය) වේ.
බොහෝ විට javascript බ්රව්සරයේ mvvm සඳහා භාවිතා කරයි. mvc සඳහා බොහෝ සේවාදායක පාර්ශවීය තාක්ෂණයන් ඇත.
ඉතා කෙටියෙන් කිවහොත් - එම්වීසී හි පාලකය දෘෂ්ටිය (පාලනයන්) ගැන දන්නා අතර එම්වීවීඑම් හි වීව්මොඩෙල් එය පරිභෝජනය කරන්නේ කවුරුන්ද යන්න නොදැන සිටී. ViewModel විසින් එහි නිරීක්ෂණය කළ හැකි ගුණාංග සහ ක්රියාවන් එය භාවිතා කිරීමට උනන්දුවක් දක්වන ඕනෑම කෙනෙකුට නිරාවරණය කරයි. ViewModel තුළ UI ගැන සඳහනක් නොමැති බැවින් එම කරුණ පරීක්ෂා කිරීම පහසු කරයි.
ආදර්ශ-දර්ශන-පාලකය (සාමාන්යයෙන් MVC ලෙස හැඳින්වේ ) යනු මෘදුකාංග සැලසුම් රටාවකි, පරිශීලක අතුරුමුහුණත් සංවර්ධනය කිරීම සඳහා බහුලව භාවිතා වන අතර එය අදාළ වැඩසටහන් තර්කනය අන්තර් සම්බන්ධිත අංග තුනකට බෙදා ඇත. පරිශීලකයා විසින් තොරතුරු ඉදිරිපත් කරන හා පිළිගන්නා ආකාර වලින් තොරතුරු වල අභ්යන්තර නිරූපණයන් වෙන් කිරීම සඳහා මෙය සිදු කෙරේ. එම්වීසී වාස්තු විද්යාත්මක රටාව අනුගමනය කිරීමෙන් කේත නැවත භාවිතා කිරීමට හා සමාන්තරව සංවර්ධනය කිරීමට ඉඩ සලසන මෙම ප්රධාන කොටස් විසන්ධි කරයි.
ඩෙස්ක්ටොප් ග්රැෆික් පරිශීලක අතුරුමුහුණත් (GUIs) සඳහා සාම්ප්රදායිකව භාවිතා කරන මෙම රටාව වෙබ් යෙදුම් සැලසුම් කිරීම සඳහා ජනප්රිය වී තිබේ. ජාවාස්ක්රිප්ට්, පයිතන්, රූබි, පීඑච්පී, ජාවා, සහ සී # වැනි ජනප්රිය ක්රමලේඛන භාෂාවන් එම්වීසී රාමු ඇති අතර ඒවා වෙබ් යෙදුම් සංවර්ධනය සඳහා භාවිතා කරනු ලැබේ.
ආකෘතිය
රටාවේ කේන්ද්රීය අංගය. එය පරිශීලක අතුරුමුහුණතෙන් ස්වාධීනව යෙදුමේ ගතික දත්ත ව්යුහය වේ. එය යෙදුමේ දත්ත, තර්කනය සහ නීති කෙලින්ම කළමනාකරණය කරයි.
දැක්ම
ප්රස්ථාරයක්, රූප සටහනක් හෝ වගුවක් වැනි තොරතුරු නිරූපණය කිරීම. කළමනාකරණය සඳහා තීරු සටහනක් සහ ගණකාධිවරුන් සඳහා වගු දැක්වීමක් වැනි එකම තොරතුරු වල බහුවිධ අදහස් ලබා ගත හැකිය.
පාලකය
ආදානය පිළිගෙන එය ආකෘතිය හෝ දර්ශනය සඳහා විධාන බවට පරිවර්තනය කරයි.
යෙදුම මෙම සංරචක වලට බෙදීමට අමතරව, ආකෘති-දර්ශන-පාලක සැලසුම ඒවා අතර අන්තර්ක්රියා අර්ථ දක්වයි.
යෙදුමේ දත්ත කළමනාකරණය කිරීම සඳහා ආකෘතිය වගකිව යුතුය. එය පාලක වෙතින් පරිශීලක ආදානය ලබා ගනී.
දර්ශනය යනු ආකෘතිය නිශ්චිත ආකෘතියකින් ඉදිරිපත් කිරීමයි.
පාලකය පරිශීලක ආදානයට ප්රතිචාර දක්වන අතර දත්ත ආකෘති වස්තු මත අන්තර්ක්රියා සිදු කරයි. පාලකය ආදානය ලබා ගනී, විකල්පයක් ලෙස එය වලංගු කර ආදානය ආකෘතියට ලබා දෙයි.
Model-View-ViewModel (MVVM) යනු මෘදුකාංග වාස්තු විද්යාත්මක රටාවකි.
MVVM මඟින් චිත්රක පරිශීලක අතුරුමුහුණත සංවර්ධනය කිරීම සඳහා පහසුකම් සපයයි - එය සලකුණු භාෂාවක් හෝ GUI කේතයක් හරහා වේවා - ව්යාපාර තර්කනය හෝ පසු-තර්කනය (දත්ත ආකෘතිය) සංවර්ධනය කිරීමෙන්. එම්වීවීඑම් හි දර්ශන ආකෘතිය අගය පරිවර්තකයක් වන අතර, එයින් අදහස් වන්නේ වස්තු පහසුවෙන් කළමනාකරණය කර ඉදිරිපත් කළ හැකි ආකාරයට දත්ත වස්තු ආකෘතියෙන් නිරාවරණය කිරීම (පරිවර්තනය කිරීම) සඳහා දර්ශන ආකෘතිය වගකිව යුතු බවයි. මේ සම්බන්ධයෙන් ගත් කල, දර්ශන ආකෘතිය දර්ශනයකට වඩා ආදර්ශයක් වන අතර බොහෝ දර්ශන හසුරුවන්නේ දර්ශන දර්ශනයේ සියලු තර්කනයන් නොවේ. දර්ශන මාදිලිය මැදිහත්කරුවන්ගේ රටාවක් ක්රියාත්මක කළ හැකි අතර, දර්ශනය මඟින් සහාය දක්වන භාවිත අවස්ථා සමූහය වටා පසුපස අන්ත තර්කනයට ප්රවේශය සංවිධානය කරයි.
MVVM යනු මාටින් ෆෝලර්ගේ ඉදිරිපත් කිරීමේ ආකෘති නිර්මාණ රටාවේ විචලනයකි. එම්වීවීඑම් දර්ශනයක තත්වය සහ හැසිරීම එකම ආකාරයකින් සාරාංශ කරයි, නමුත් ඉදිරිපත් කිරීමේ ආකෘතියක් නිශ්චිත පරිශීලක අතුරුමුහුණත් වේදිකාවක් මත රඳා නොපවතින අයුරින් දර්ශනයක් (දර්ශන ආකෘතියක් නිර්මාණය කරයි) සාරාංශ කරයි.
මයික්රොසොෆ්ට් ගෘහ නිර්මාණ ශිල්පීන් වන කෙන් කූපර් සහ ටෙඩ් පීටර්ස් විසින් MVVM නිර්මාණය කරන ලද්දේ පරිශීලක අතුරුමුහුණත් වල සිදුවීම් මත පදනම් වූ වැඩසටහන් සරල කිරීම සඳහා ය. මෙම රටාව වින්ඩෝස් ඉදිරිපත් කිරීමේ පදනම (WPF) (මයික්රොසොෆ්ට් හි .NET ග්රැෆික් පද්ධතිය) සහ සිල්වර් ලයිට් (WPF හි අන්තර්ජාල යෙදුම් ව්යුත්පන්නය) සමඟ ඒකාබද්ධ කරන ලදී. මයික්රොසොෆ්ට් හි ඩබ්ලිව්පීඑෆ් සහ සිල්වර් ලයිට් ගෘහ නිර්මාණ ශිල්පියෙකු වන ජෝන් ගොස්මන් 2005 දී සිය බ්ලොග් අඩවියේ එම්වීවීඑම් නිවේදනය කළේය.
මොඩල්-වීව්-වීව් මොඩලය ආදර්ශ-දර්ශන-බයින්ඩර් ලෙසද හැඳින්වේ, විශේෂයෙන් .නෙට් වේදිකාවට සම්බන්ධ නොවන ක්රියාත්මක කිරීම් වලදී. ZK (ජාවා හි ලියා ඇති වෙබ් යෙදුම් රාමුවක්) සහ KnockoutJS (ජාවාස්ක්රිප්ට් පුස්තකාලයක්) ආකෘති-දර්ශන-බන්ධකය භාවිතා කරයි.