MVC සහ MVVM අතර වෙනස කුමක්ද? [වසා ඇත]


1320

සම්මත "ආදර්ශ දර්ශන පාලක" රටාව සහ මයික්‍රොසොෆ්ට් හි ආදර්ශ / දර්ශන / දසුන් මොඩල් රටාව අතර වෙනසක් තිබේද?


55
MVVM මයික්‍රොසොෆ්ට් විසින් නිර්මාණය කරන ලද අතර, මයික්‍රොසොෆ්ට් නොවන සංවර්ධකයින් සහ ව්‍යාපෘති විශාල ප්‍රමාණයක් මෙම රටාව අනුගමනය කිරීමට පටන් ගෙන ඇති බව සලකන්න. මෙම ප්‍රකාශය ඔබ වෙත ගෙන එනු ලැබුවේ වෛරී-එම්එස්-වෛරී දෙපාර්තමේන්තුව විසිනි.
බෝල්ට් ක්ලොක්

1
එම්වීවීඑම් සමඟ දීර් time කාලයක් සේවය කර ඇති එම්වීවීඑම් සමඟ ඇති මගේ පළමු බුරුසුව කලකිරීමට පත්විය. නමුත් ජොයෙල් ඉහත සඳහන් කළ පරිදි බ්‍රව්සරයෙන් තත්වය නැවත ලබා ගත හැකි එකම ක්‍රමය වන්නේ ආකෘති පත්රයේ (නම / අගය භාවිතා කරන) යුගලවල වෙනස්කම් පළ කිරීමයි. ඔබට මෙම කරුණ හොඳින් තේරෙන්නේ නැත්නම්. MVC හි ඔබට දුෂ්කර කාලයක් වනු ඇත. දර්ශනය සඳහා පරායත්ත එන්නතක් ලෙස පාලකය දෙස බලන්න, ඔබ සියල්ල සූදානම්.
ජෝන් පීටර්ස්

3
ඉහළ මට්ටමේ [මෝස්තර රටා] පිළිබඳ එවැනි ඉහළ නංවන ලද ප්‍රශ්නයක්. පිළිතුරු සඳහා රූප සටහන් භාවිතා කිරීමට යෝජනා කිරීමට මම කාරුණිකව කැමතියි.
රිකාඩෝ

4
ජොයෙල්ගේ ලිපියේ සංරක්ෂිත පිටපතක් මෙන්න: web.archive.org/web/20150219153055/http://joel.inpointform.net/…
තෙරේසා ටොම්කෝවා

1
MVC ක්‍රමය මෙන් නොව, ViewModel පාලකයක් නොවේ. එය ඒ වෙනුවට දර්ශනය සහ ආකෘතිය අතර දත්ත බන්ධනය කරන බන්ධකයක් ලෙස ක්‍රියා කරයි. MVC ආකෘතිය විශේෂයෙන් නිර්මාණය කර ඇත්තේ ආකෘතිය සහ දර්ශනය අතර උත්සුකයන් වෙන් කිරීම සඳහා වන අතර, දත්ත බන්ධනය සහිත MVVM ආකෘතිය විශේෂයෙන් නිර්මාණය කර ඇත්තේ දර්ශනය සහ ආකෘතිය එකිනෙකා සමඟ කෙලින්ම සන්නිවේදනය කිරීමට ඉඩ සලසමිනි. hackernoon.com/...
blueray

Answers:


687

MVC / MVVM යනු එක් හෝ / හෝ තේරීමක් නොවේ.

ASP.Net සහ Silverlight / WPF යන දෙවර්ගයේම රටා දෙක විවිධාකාරයෙන් වර්ධනය වේ.

ASP.Net සඳහා, දර්ශන තුළ දත්ත ද්වි-මාර්ග බන්ධනය කිරීමට MVVM භාවිතා කරයි . මෙය සාමාන්‍යයෙන් සේවාදායක පාර්ශවයක් ක්‍රියාත්මක කිරීමකි (උදා: Knockout.js භාවිතා කිරීම). අනෙක් අතට MVC යනු සේවාදායකයාගේ පැත්තෙන් උත්සුකයන් වෙන් කිරීමේ ක්‍රමයකි .

Silverlight සහ WPF සඳහා, MVVM රටාව වඩාත් ක්රිව අතර හැකි පෙනී MVC (හෝ වෙන වෙනම වගකීම් මෘදුකාංග සංවිධානය වෙනත් රටා) ආදේශනයක් ලෙස ක්රියා කිරීමට. එක් උපකල්පනය, නිතර නිතර මෙම රටාව පිටතට පැමිණි බව, සතුටු විය හැකි ViewModelහුදෙක් පාලකය වෙනුවට MVC(ඔබ ආදේශ කළ හැකි නම් VMසඳහා Cසංකේත නාමය මුළු සමාව දෙනු ලැබේ) ...

මෙම ViewModel කරන්නේ නැහැ අවශ්යයෙන්ම වෙනම පාලක අවශ්යතාව වෙනුවට.

ගැටළුව වන්නේ: ස්වාධීනව පරීක්‍ෂා කළ හැකි වීම * සහ අවශ්‍ය වූ විට විශේෂයෙන් නැවත භාවිතා කිරීම, දර්ශන ආකෘතියකට එය පෙන්වන්නේ කුමන දෘෂ්ටියක් දැයි නොදැන සිටීමයි, නමුත් වඩා වැදගත් වන්නේ එහි දත්ත පැමිණෙන්නේ කොතැනින්ද යන්නයි .

* සටහන: ප්‍රායෝගිකව පාලකයන් විසින් ඒකක පරීක්ෂාව අවශ්‍ය වන ViewModel වෙතින් බොහෝ තර්කනයන් ඉවත් කරයි. වීඑම් පසුව ගොළු බහාලුමක් බවට පත්වන අතර එය පරීක්ෂා කිරීම සඳහා සුළු ප්‍රමාණයක් අවශ්‍ය වේ. වීඑම් යනු පාලමක් පමණක් බැවින් නිර්මාණකරු සහ කෝඩරය අතර මෙය හොඳ දෙයකි, එබැවින් සරලව තබා ගත යුතුය.

MVVM හි පවා, පාලකයන් සාමාන්‍යයෙන් සියළුම සැකසුම් තර්කනයන් අඩංගු වන අතර කුමන දර්ශන ආකෘති භාවිතා කරන්නේද යන්න පෙන්විය යුත්තේ කුමන දත්තද යන්න තීරණය කරයි.

XAML සංස්කරණය වඩාත් ස්වාධීන කාර්යයක් බවට පත් කිරීම සඳහා XAML කේත පිටුපසින් කේතය ඉවත් කිරීම ViewModel රටාවේ ප්‍රධාන වාසිය අප මෙතෙක් දැක ඇති දෙයින් . අපගේ යෙදුම්වල සමස්ත තර්කනය පාලනය කිරීම සඳහා (අවශ්‍ය නොවන විට) අපි තවමත් පාලකයන් නිර්මාණය කරමු.

අප අනුගමනය කරන මූලික MVCVM මාර්ගෝපදේශ:

  • දර්ශන මගින් දත්තවල යම් හැඩයක් පෙන්වයි . දත්ත පැමිණෙන්නේ කොහෙන්දැයි ඔවුන්ට අදහසක් නැත.
  • ViewModels දත්ත හා විධාන වල යම් හැඩයක් දරයි, දත්ත හෝ කේතය පැමිණෙන්නේ කොහෙන්ද යන්න හෝ එය දර්ශනය වන්නේ කෙසේදැයි ඔවුහු නොදනිති.
  • ආකෘති සත්‍ය දත්ත රඳවා තබා ගනී (විවිධ සන්දර්භය, ගබඩා හෝ වෙනත් ක්‍රම)
  • පාලකයන් සිදුවීම් වලට සවන් දී ප්‍රකාශයට පත් කරයි. පාලකයන් විසින් සපයනු ලබන දත්ත සහ කොතැනද යන්න පාලනය කරන තර්කනය සපයයි. පාලකයන් විසින් විධාන කේතය ViewModel වෙත සපයන අතර එමඟින් ViewModel නැවත භාවිතා කළ හැකිය.

මූර්ති කේත-ජාන රාමුව මගින් එම්වීවීඑම් සහ ප්‍රිස්මයට සමාන රටාවක් ක්‍රියාත්මක කරන බවත්, එමඟින් සියලු භාවිත-සිද්ධි තර්කනයන් වෙන් කිරීම සඳහා පාලකයන් පුළුල් ලෙස භාවිතා කරන බවත් අපි සටහන් කළෙමු .

දර්ශන ආකෘති මගින් පාලකයන් යල් පැන ගොස් ඇතැයි නොසිතන්න.

මම මෙම මාතෘකාව පිළිබඳ බ්ලොග් අඩවියක් ආරම්භ කර ඇති අතර එය මට හැකි සෑම විටම එකතු කරමි . බොහෝ සංචාලන පද්ධති දර්ශන සහ වීඑම් භාවිතා කරන බැවින් එම්වීසීවීඑම් පොදු සංචාලන පද්ධති සමඟ සංයෝජනය කිරීමේ ගැටළු තිබේ, නමුත් මම පසුව ලිපි වලින් ඒ වෙත යන්නෙමි.

MVCVM ආකෘතියක් භාවිතා කිරීමේ අමතර වාසියක් වන්නේ යෙදුමේ ආයු කාලය සඳහා පාලක වස්තු පමණක් මතකයේ පැවතීම සහ පාලකයන්ගේ ප්‍රධාන වශයෙන් කේත සහ කුඩා රාජ්‍ය දත්ත (එනම් කුඩා මතක උඩිස්) අඩංගු වීමයි. දර්ශන ආකෘති රඳවා තබා ගත යුතු විසඳුම් වලට වඩා මෙය මතක ශක්තියෙන් අඩු යෙදුම් සඳහා හේතු වන අතර එය ඇතැම් ආකාරයේ ජංගම සංවර්ධනය සඳහා වඩාත් සුදුසු වේ (උදා: වින්ඩෝස් මොබයිල් සිල්වර් ලයිට් / ප්‍රිස්ම් / එම්ඊඑෆ් භාවිතා කරයි). ප්‍රතිචාර දැක්වීම සඳහා ඉඳහිට හැඹිලි වීඑම් යන්ත්‍ර රඳවා තබා ගැනීමට ඔබට අවශ්‍ය විය හැකි බැවින් මෙය ඇත්ත වශයෙන්ම යෙදුම් වර්ගය මත රඳා පවතී.

සටහන: මෙම ලිපිය බොහෝ වාර ගණනක් සංස්කරණය කර ඇති අතර, අසන ලද පටු ප්‍රශ්නය නිශ්චිතවම ඉලක්ක කර නොතිබූ බැවින් දැන් එය ද ආවරණය වන පරිදි පළමු කොටස යාවත්කාලීන කර ඇත. සාකච්ඡාවේ වැඩි හරියක්, පහත දැක්වෙන අදහස් දැක්වීමේදී සම්බන්ධ වන්නේ ඒඑස්පී.නෙට් වෙත මිස පුළුල් චිත්‍රයට නොවේ. මෙම තනතුර සිල්වර් ලයිට්, ඩබ්ලිව්පීඑෆ් සහ ඒඑස්පී නෙට් හි එම්වීවීඑම් හි පුළුල් භාවිතය ආවරණය කිරීම සඳහා වන අතර පාලකයන් වෙනුවට විව්මොඩල්ස් ආදේශ කිරීමෙන් ජනතාව අධෛර්යමත් කිරීමට උත්සාහ කරයි.


8
Oma ටොමාස් සියලින්ස්කි: ඇත්ත, නමුත් "ඒවා භාවිතා කරන්නේ කොතැනද" යන ප්‍රශ්නය නොවේ (හෝ මගේ පිළිතුරේ කාරණය). මගේ අදහස නම් MVVM හි පාලකයන් තවමත් ප්‍රයෝජනවත් බවයි.
ගොන් කෝඩින්

58
මම එකඟයි. මගේ ප්‍රකාශය ඇති වූයේ හදිසියේ ඇති වූ බුද්ධත්වය නිසා මිස මම ඔබ සමඟ එකඟ නොවූ නිසා නොවේ.
ටොමාස් සීලියස්කි

මායාකාරියක වැනි UI එකක දර්ශන "ගලායාම" පාලනය කිරීමට අපි පාලකයන් භාවිතා කළෙමු.
riezebosch

3
Ust ජස්ටින්: එම වාක්‍යයේ මගේ වචන ටිකක් අපැහැදිලි බව මට පෙනේ. මම ඇත්ත වශයෙන්ම අදහස් කරන්නේ සියලුම සංරචක සඳහා ඒකක පරීක්ෂාව වඩාත් පහසුවෙන් සහාය වන අතර, විශේෂයෙන්ම ViewModels හි පරීක්ෂණ වැඩි දියුණු කිරීම පමණක් නොවේ (ඔබ පෙන්වා දෙන පරිදි ඇත්ත වශයෙන්ම MVCVM හි එතරම් දෙයක් නොකරන්න ... ඔබට අවශ්‍ය දේ එයයි). පාලකයන්ගේ සැබෑ වාසිය නම්, ඔබ ඇත්ත වශයෙන්ම ViewModel වෙතින් පරීක්‍ෂා කිරීම සඳහා වන බොහෝ අවශ්‍යතා ඉවත් කර තිබීමයි (එහිදී මිනිසුන් පාලක තර්කනය වෙනස් කරමින් සිටී) සහ එය පරීක්‍ෂා කළ හැකි තැනක තැබීම (ප්‍රධාන වශයෙන් පාලකයන් සහ ආකෘති). නැවත භාවිතා කිරීමේ විවරණය එම වාක්‍යයේ VM වලට විශේෂිත වේ. මම එය සංස්කරණය කර ඇත්තෙමි.
කේන් කිරීම

7
@ ටොමාස්සිලින්ස්කි එම් (එම්වීවීඑම්) සී
මොහොමඩ් ඉමාඩ්

280

මෙම අක්ෂරවල අර්ථය කුමක්දැයි වටහා ගැනීමට ඇති පහසුම ක්‍රමය නම් ඒවා ගැන මොහොතකට අමතක කිරීමයි. ඒ වෙනුවට, ඔවුන් ආරම්භ කළ මෘදුකාංගය ගැන සිතා බලන්න. මුල් වෙබය සහ ඩෙස්ක්ටොප් එක අතර වෙනස දක්වා එය සැබවින්ම තම්බා ගනී.

2000 දශකයේ මැද භාගයේදී ඒවා සංකීර්ණ වූ විට, 1970 ගණන්වලදී මුලින් විස්තර කරන ලද එම්වීසී මෘදුකාංග සැලසුම් රටාව වෙබ් යෙදුම් සඳහා යොදා ගැනීමට පටන් ගත්තේය. දත්ත සමුදාය, HTML පිටු සහ කේත inbetween සිතන්න. MVC වෙත පැමිණීමට මෙය මඳක් පිරිපහදු කරමු: »දත්ත සමුදාය For සඳහා, දත්ත සමුදාය සහ අතුරු මුහුණත කේතය උපකල්පනය කරමු. »HTML පිටු For සඳහා, අපි HTML සැකිලි සහ අච්චු සැකසුම් කේතය උපකල්පනය කරමු. »කේත inbetween For සඳහා, කේත සිතියම්ගත කිරීම පරිශීලකයා ක්‍රියාවන්ට ක්ලික් කිරීම උපකල්පනය කරමු, එය දත්ත සමුදායට බලපානු ඇත, අනිවාර්යයෙන්ම වෙනත් දර්ශනයක් දර්ශනය වීමට හේතු වේ. අවම වශයෙන් මෙම සංසන්දනය සඳහා එය එයයි.

මෙම වෙබ් දේවල් වල එක් අංගයක් අද මෙන් නොව, මීට වසර දහයකට පෙර පැවති පරිදි, ජාවාස්ක්‍රිප්ට් පහත්, නින්දිත කරදරයක් වූ විට, සැබෑ ක්‍රමලේඛකයින් එයින් ඉවත් වීමට හොඳ විය: HTML පිටුව අත්‍යවශ්‍යයෙන්ම ගොළු සහ උදාසීන ය . බ්රවුසරය තුනී සේවාදායකයෙක් හෝ ඔබ කැමති නම් දුප්පත් සේවාදායකයෙක්. බ්රවුසරයේ බුද්ධියක් නොමැත. සම්පූර්ණ පිටු රීලෝඩ් රීතිය. සෑම අවස්ථාවකම »දර්ශනය« නැවත උත්පාදනය වේ.

මෙම වෙබ් ක්‍රමය, සියලු කෝපයෙන් පැවතියද, ඩෙස්ක්ටොප් එකට සාපේක්ෂව දරුණු ලෙස පසුගාමී වූ බව මතක තබා ගනිමු. ඩෙස්ක්ටොප් යෙදුම් යනු ඔබ කැමති නම් මේද සේවාදායකයින් හෝ පොහොසත් සේවාදායකයින් ය. (මයික්‍රොසොෆ්ට් වර්ඩ් වැනි වැඩසටහනක් පවා යම් ආකාරයක සේවාදායකයෙකු, ලේඛන සඳහා සේවාදායකයෙකු ලෙස සිතිය හැකිය.) ඔවුන් බුද්ධිමත්, ඔවුන්ගේ දත්ත පිළිබඳ දැනුමක් ඇති සේවාදායකයින් ය. ඒවා රාජ්‍යයි. ඔවුන් මතකයේ හසුරුවන දත්ත හැඹිලිගත කරයි. සම්පූර්ණ පිටු රීලෝඩ් කිරීම වැනි එවැනි කපටිකම් නොමැත.

මෙම පොහොසත් ඩෙස්ක්ටොප් ක්‍රමය බොහෝ විට දෙවන අක්ෂර මාලාව වන එම්වීවීඑම් විය හැකිය. අකුරු වලට රැවටෙන්න එපා, සී පාලකයන් මඟ හැරීම නිසා තවමත් පවතී. ඔවුන් විය යුතුයි. කිසිවක් ඉවත් නොවේ. අපි එක් දෙයක් පමණක් එකතු කරමු: රාජ්‍ය භාවය, සේවාදායකයා මත දත්ත තැන්පත් කිරීම (ඒ සමඟම එම දත්ත හැසිරවීමට බුද්ධිය). එම දත්ත, අත්‍යවශ්‍යයෙන්ම සේවාදායකයාගේ හැඹිලියක් වන අතර එය දැන් »ViewModel called ලෙස හැඳින්වේ. පොහොසත් අන්තර්ක්‍රියාකාරිත්වයට ඉඩ දෙන්නේ එයයි. ඒක තමයි.

  • MVC = ආකෘතිය, පාලකය, දර්ශනය = අත්‍යවශ්‍යයෙන්ම එක්-මාර්ග සන්නිවේදනය = දුර්වල අන්තර්ක්‍රියාකාරිත්වය
  • MVVM = ආකෘතිය, පාලකය, හැඹිලිය, දැක්ම = ද්වි-මාර්ග සන්නිවේදනය = පොහොසත් අන්තර්ක්‍රියාකාරිත්වය

ෆ්ලෑෂ්, සිල්වර් ලයිට් සහ - වඩාත්ම වැදගත් - ජාවාස්ක්‍රිප්ට් සමඟ වෙබය එම්වීවීඑම් වැලඳගෙන ඇති බව අපට දැක ගත හැකිය. බ්‍රව්සර් තවදුරටත් තුනී සේවාදායකයින් ලෙස නීත්‍යානුකූලව හැඳින්විය නොහැක. ඔවුන්ගේ ක්‍රමලේඛන හැකියාව දෙස බලන්න. ඔවුන්ගේ මතක පරිභෝජනය දෙස බලන්න. නවීන වෙබ් පිටුවල ඇති සියලුම ජාවාස්ක්‍රිප්ට් අන්තර්ක්‍රියාකාරිත්වය දෙස බලන්න.

පුද්ගලිකව, මෙම න්‍යාය සහ සංක්ෂිප්ත ව්‍යාපාරය තේරුම් ගත හැකි වන්නේ එය යථාර්ථය තුළ සඳහන් කර ඇති දේ දෙස බැලීමෙනි. වියුක්ත සංකල්ප ප්‍රයෝජනවත් වේ, විශේෂයෙන් කොන්ක්‍රීට් පදාර්ථ මත නිරූපණය කරන විට, අවබෝධය සම්පූර්ණ රවුමට පැමිණිය හැකිය.

 


48
MVC ආරම්භ වූයේ වෙබයේ නොවේ. ට්‍රිග්ව් රීන්ස්කොග් 1970 ගණන්වලදී එම්වීසී ස්මාල්ටෝක් -76 වෙත හඳුන්වා දුන්නේය.
ඇරියල්ඩෝ මාටිනි

11
එය "MVC වෙබ් යෙදුම් නිර්මාණය හරහා ජනප්‍රිය කරන ලදි" ලෙස වෙනස් කළද. මෙය නිසි උපුටා දැක්වීමකින් තොරව සමපේක්ෂනය යැයි මම තර්ක කරමි.
ඩෑන් බෙචර්ඩ්

4
ඇරියල්ඩෝ: ස්තූතියි, මම ස්මාල්ටෝක් -76 ගැන දැන සිටියේ නැත. (එකල වෙනත් සෙල්ලම් බඩු සමඟ සෙල්ලම් කර ඇත. :) විහිළු පසෙකට දමා, මෙම සංකල්ප සමහරක් කොතරම් පැරණිද යන්න සිත්ගන්නා කරුණකි. - an ඩෑන්, මා ලියූ දෙය නම්: "[වෙබයට] පෙර [එම්වීසී] එහි සිටින්නට ඇත, නමුත් වෙබ් යනු එය වෙබ් සංවර්ධකයින් අතර ජනප්‍රිය වූ ආකාරයයි." මම තවමත් සිතන්නේ එය නිවැරදි බවයි. මට ඒ සඳහා උපුටා දැක්වීමක් නොමැත, නමුත් පසුව මට එකක් අවශ්‍ය යැයි මට හැඟෙන්නේ නැත, මන්ද එම්වීසී සමූහය ජනප්‍රිය කරවීම පසුගිය දශකය ආරම්භයේ දී මම වෙබ් සංවර්ධකයෙකු ලෙස ආරම්භ කළ විට මගේ පෞද්ගලික අත්දැකීම්වල කොටසකි. එවකට අපචේ ස්ට්‍රට්ස් එම්වීසී සඳහා බෝංචි ගොඩක් සමඟ ප්‍රචලිත විය.
ලුමි

5
MVC යනු "අත්‍යවශ්‍යයෙන්ම එක්-මාර්ග සන්නිවේදනයක්" නොවේ. Gets සහ Posts යන දෙකටම විමසුම් දාමයේ ඇති ක්ෂේත්‍ර අගයන් වෙනස් කළ හැකිය. පාලක වෙත තොරතුරු ආපසු යැවීමට මෙය බ්‍රව්සරයට ඕනෑ තරම් අවස්ථාව ලබා දෙයි. MVC ගොඩනඟා ඇත්තේ HTTP 1.0 ට ඉහළින් වන අතර එය සෑම විටම දෙයාකාරයකින් සන්නිවේදනය කළ යුතුය.
ජෝන් පීටර්ස්

13
ස්තූතියි ලුමි. මෙය අනෙක් පිළිතුරු වලට වඩා මට බොහෝ අර්ථවත් විය. ඒක හරිද? මට අදහසක් නැහැ. නමුත් මගේ දෘෂ්ටි කෝණයෙන් එය අවම වශයෙන් සමපාත විය.
gcdev

175

MVVM Model-View ViewModel MVC, Model-View Controller හා සමාන වේ

පාලකය ViewModel සමඟ ප්‍රතිස්ථාපනය වේ . ViewModel යූඅයි ස්තරයට පහළින් පිහිටා ඇත. ViewModel මඟින් දර්ශනයට අවශ්‍ය දත්ත සහ විධාන වස්තු නිරාවරණය කරයි. ඔබට මෙය බහාලුම් වස්තුවක් ලෙස සිතිය හැකි අතර එහි දත්ත සහ ක්‍රියාවන් ලබා ගත හැකිය. ViewModel එහි දත්ත ආකෘතියෙන් ඇද ගනී.

රසල් ඊස්ට් බ්ලොග් අඩවියක් සවිස්තරාත්මකව සාකච්ඡා කරයි MVVM MVC ට වඩා වෙනස් වන්නේ ඇයි?


81
"පාලකය දර්ශන ආකෘතියක් මගින් ප්‍රතිස්ථාපනය වේ" යන වාක්‍යය නිවැරදි නොවේ. MVVM හි පාලකයේ කාර්යභාරය වන්නේ දත්ත සමුදායයි (හෝ ඔබ එය භාවිතා කරන්නේ නම් සම්මුතියට බැඳීම).
ඩැනීසී

9
MVVM අර්ථවත් වන්නේ WPF හි ද්වි-මාර්ග දත්ත බන්ධනය භාවිතා කරන විට පමණි. එසේ නොවුවහොත් MVC / MVP යනාදිය ප්‍රමාණවත් වේ.
ජෙෆ්

268
@DaniCE: ජොශ් ස්මිත්: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. …
එස්එල්එල්

7
11 ඔම්ෂංකර් 11 වන ස්ථානය ඔබෙන් නොවේ. මුළු පුද්ගලයින් 10 දෙනෙකු සිටින අතර, මුළු මත 12 ක් ඇත. මෙම රටාවේ අර්ථ දැක්වීම් අර්ථ නිරූපණයට කොතරම් විවෘතද යන්න ඇඟවීමට අදහස් කරන්නේ අවම වශයෙන් දෙදෙනෙකු එක් මතයකට වඩා ඇති තරම් ව්‍යාකූල වනු ඇති බවයි.
ඩෑන් බෙචර්ඩ්

7
An ඩැනීස් හොඳයි මෙය ඇත්ත වශයෙන්ම ඩබ්ලිව්පීඑෆ් හි දත්ත බන්ධනයේ ලක්ෂ්‍යය වන අතර මයික්‍රොසොෆ්ට් විසින් එම්වීවීඑම් සොයා ගන්නා ලදී, එමඟින් කෙනෙකුට පාලකය මුළුමනින්ම මග හැරිය හැකිය. තිරය ​​පිටුපස පාලකය, මූලික වශයෙන් “ඉහළ මට්ටමේ භාෂාව ගුප්ත යන්ත්‍ර කේත වෙනුවට වඩා කියවිය හැකි ඒවා වෙනුවට ආදේශ කරයි” යන ප්‍රකාශය වැරදියි. මන්ද තිරය පිටුපස යන්ත්‍ර භාෂාව තවමත් භාවිතා වන නිසාය ...)
බැවිනි

91

එක් දෙයක් නම්, MVVM යනු දර්ශනය හැසිරවීමට XAML භාවිතා කරන MVC රටාවේ ප්‍රගතියකි. මෙම ලිපියෙන් දෙදෙනාගේ සමහර අංගයන් දක්වා ඇත.

මොඩල් / වීව් / වීව් මොඩල් ගෘහ නිර්මාණ ශිල්පයේ ප්‍රධාන තෙරපුම වන්නේ දත්ත වලට ඉහළින් (”මොඩලය”), දෘශ්‍ය නොවන සංරචකවල තවත් ස්ථරයක් (“වීව් මොඩලය”) ඇති අතර දත්ත සංකල්ප වඩාත් සමීපව සිතියම් ගත කරයි. දත්තවල දර්ශනයේ සංකල්පවලට (”දර්ශනය”). View ජුවම මොඩලයට නොව දර්ශනය බැඳී ඇත්තේ ViewModel ය.


20
මම හිතන්නේ ඔබ උපුටා ගත් ඡේදය IMHO හි සාරාංශගත කරයි. ViewModel හි අංගයක් වන්නේ එය දර්ශනය සඳහා ආකෘතියේ සමතලා / වෙනස් කළ අනුවාදයකි. තවත් බොහෝ MV * රටා සැබෑ ආකෘතියට බැඳී ඇත .
ඩැනියෙල් ඔගර්

1
“වෙනත් බොහෝ එම්වී * රටා යළිත් සැබෑ ආකෘතිය බැඳ තබයි”? ඇත්තද? මම සිතුවේ සෑම විටම
එම්වීසී හි පාලකයට

9
නිශාචර: සම්භාව්‍ය එම්වීසී හි, දර්ශනයට පාලකය සමඟ වැඩි සම්බන්ධයක් නැත, එය බොහෝ දුරට මොඩලයට සම්බන්ධ වේ. එය රොබෝවෙකු ලෙස සිතන්න - මොඩලය රොබෝවරයාගේ සන්ධිවල පිහිටීම නිරූපණය කරයි, දර්ශනය යනු ඔබ රොබෝව දකින LCD මොනිටරයකි, පාලකය උදා යතුරුපුවරුවයි. එවැනි සැකසුමකදී, දර්ශනය මොඩලය මත රඳා පවතී, එනම් රොබෝගේ අවකාශීය පිහිටීම, ඔබට මොනිටරයේ දැකිය හැකි වන්නේ එය මොඩලයේ සෘජු නිරූපණයකි.
ටොමාස් සීලියස්කි

@Nocturne කුමක්ද ඩැනියෙල් කියා පෙනී අතර නිල වශයෙන් මහා විද්යාලය * වෙනම VM භාවිතා කළ යුතු බොහෝ සංවර්ධකයින් එය නොසලකා හරින්න බව, සහ සැබෑ ආකෘතිය සමත්, සහ ඇත්ත MVC උදාහරණයක් සඳහා පිරිවිතර කිසිවක් කෙසේ වෙතත් MVVM එක්, එය disallows වේ මාදිලිය සහ දැක්ම අතර සංක්‍රාන්තිය සඳහා VM වගකිව යුතු විය යුතුය
yoel halb

මම එය මෙසේ කියමි: ආකෘතිය ඩීබී ක්‍රමයට සමීප දෙයක්. විමසුමක් ක්‍රියාත්මක වන විට එය ආදර්ශ ස්ථරයේ දත්ත ශක්තිමත් ආකාරවලට ප්‍රක්ෂේපණය කළ හැකිය. දර්ශන මාදිලිය යනු ආදර්ශ වස්තූන් ද ඇතුළුව දේවල් එකතු කිරීමකි, නමුත් දත්ත වලට සාපේක්ෂව දර්ශනීය තත්වයක් තබා ගත හැකිය. පාලකය යනු දර්ශන මාදිලිය සහ දර්ශනය අතර රථවාහන පොලිස් නිලධාරියෙකු වන අතර ඇත්ත වශයෙන්ම දර්ශනය සැලකිලිමත් වන්නේ දර්ශන තත්වයන් සමඟ පමණි.
ජෝන් පීටර්ස්

52

මයික්‍රොසොෆ්ට් විසින් වින්ඩෝස් පරිසරය තුළ එම්වීවීඑම් රටාව පිළිබඳ පැහැදිලි කිරීමක් සපයන ලදී .

මෙන්න තීරණාත්මක කොටසක්:

Model-View-ViewModel සැලසුම් රටාවේ, යෙදුමක් පොදු සංරචක තුනකින් සමන්විත වේ. රූප විස්තරය මෙහි ඇතුළත් කරන්න

  • ආකෘතිය : මෙය ඔබගේ යෙදුම පරිභෝජනය කරන දත්ත ආකෘතිය නියෝජනය කරයි. උදාහරණයක් ලෙස, පින්තූර බෙදාගැනීමේ යෙදුමක, මෙම ස්තරය උපාංගයක ඇති පින්තූර සමූහය සහ පින්තූර පුස්තකාලයට කියවීමට හා ලිවීමට භාවිතා කරන API නියෝජනය කරයි.

  • බලන්න : යෙදුමක් සාමාන්‍යයෙන් UI හි පිටු කිහිපයකින් සමන්විත වේ. පරිශීලකයාට පෙන්වන සෑම පිටුවක්ම MVVM පාරිභාෂිතයේ දර්ශනයකි. දර්ශනය යනු පරිශීලකයා දකින දේ නිර්වචනය කිරීමට හා මෝස්තර කිරීමට භාවිතා කරන XAML කේතයයි. මාදිලියේ දත්ත පරිශීලකයාට දර්ශනය වන අතර, යෙදුමේ වත්මන් තත්වය මත පදනම්ව මෙම දත්ත යූඅයි පෝෂණය කිරීම ViewModel හි කාර්යය වේ. නිදසුනක් ලෙස, පින්තූර බෙදාගැනීමේ යෙදුමක, දර්ශන යනු පරිශීලකයාට උපාංගයේ ඇල්බම ලැයිස්තුව, ඇල්බමයේ පින්තූර සහ පරිශීලකයාට විශේෂිත පින්තූරයක් පෙන්වන තවත් එකක් ය.

  • ViewModel : ViewModel යෙදුමේ දත්ත ආකෘතිය හෝ සරලවම ආකෘතිය UI හෝ දර්ශන සමඟ සම්බන්ධ කරයි. ආකෘතියෙන් දත්ත කළමනාකරණය කළ යුතු තර්කනය එහි අඩංගු වන අතර XAML UI නොහොත් දර්ශන වලට බැඳිය හැකි ගුණාංග සමූහයක් ලෙස දත්ත නිරාවරණය කරයි. උදාහරණයක් ලෙස, පින්තූර බෙදාගැනීමේ යෙදුමක, ViewModel විසින් ඇල්බම ලැයිස්තුවක් හෙළි කරනු ඇති අතර සෑම ඇල්බමයක් සඳහාම පින්තූර ලැයිස්තුවක් නිරාවරණය වේ. පින්තූර පැමිණෙන්නේ කොහෙන්ද සහ ඒවා ලබා ගන්නේ කෙසේද යන්න පිළිබඳ UI අ nost ෙයවාදී ය. එය හුදෙක් ViewModel විසින් නිරාවරණය කර ඇති පින්තූර සමූහයක් ගැන දන්නා අතර ඒවා පරිශීලකයාට පෙන්වයි.


7
මයික්‍රොසොෆ්ට් ස්ටැක් - විශේෂයෙන් වින්ඩෝස් දුරකථනය - සහ එක්ස්ඒඑම්එල් සමඟ සංවර්ධනය සඳහා යොමු කරන ලද ලිපිය අදාළ වන බව සලකන්න.
රිචඩ් නලෙසින්ස්කි

මෙම පිළිතුර "MVVM" යන නම සමඟ ඇති ගැටළුව ඉස්මතු කරයි - එය "VVMM" හෝ "MVMV" විය යුතුය - MV-VM සම්බන්ධතා සම්පූර්ණයෙන්ම වැරදි ආකාරයකින් ඇත!
ඊතර්මන්

45

මම සිතුවේ එක් ප්‍රධාන වෙනසක් නම් එම්වීසී හි ඔබේ වී ඔබේ එම් කෙලින්ම කියවන අතර දත්ත හැසිරවීම සඳහා සී හරහා යන අතර එම්වීවීඑම් හි ඔබේ වීඑම් එම් ප්‍රොක්සියක් ලෙස ක්‍රියා කරන අතරම ඔබට ලබා ගත හැකි ක්‍රියාකාරිත්වය සැපයීමයි. වී.

මම කුණු වලින් පිරී නොමැති නම්, කිසිවෙකු දෙමුහුන් වර්ගයක් නිර්මාණය කර නොමැති බව මට පුදුමයි, එහිදී ඔබේ වීඑම් හුදෙක් එම් ප්‍රොක්සියක් වන අතර සී සියළුම ක්‍රියාකාරීත්වය සපයයි.


1
+1. මෙම පදය මා සිතන නිවැරදි දෙයයි. නමුත් දෙමුහුන් M-MProxy-VC සෑදීම ගැන එතරම් වෙන්වීමක් නොවේද? එම්වීසී භාවිතා කිරීම ප්‍රමාණවත් යැයි මම සිතමි. එම් යනු බන්ධන සඳහා පූර්ණ සහාය ඇති ආදර්ශයකි. ;)
ktutnik

2
+1. මා ඉහත අදහස් දැක්වූ පරිදි, සමස්ත (වෙබ්) යෙදුම ගෘහ නිර්මාණ ශිල්පය සඳහා MVC භාවිතා කරන අතර MVCM MVC හි View සංරචකය තුළ භාවිතා වේ.
ටොමාස් සීලියස්කි

23
tktutnik: මාදිලිය සාමාන්‍යයෙන් සේවාදායකයේ වාඩි වී සිටින අතර ViewModel සේවාදායකයා මත ජීවත් වේ. එබැවින් HTML සේවාදායකයේ මාදිලියට කෙලින්ම බැඳීම කළ නොහැක්කකි. එබැවින් අපට ModelView අවශ්‍ය වන අතර එය උදා: AJAX / JSON භාවිතා කරමින් ආකෘතියෙන් උපුටා ගත් දේශීය, සුරකින ලද දත්ත සමූහයක් ලෙස ක්‍රියා කරයි.
ටොමාස් සීලියස්කි

1
ආකෘති දත්ත දැනටමත් "කියවීම" කරන්නේ එය පාලකය විසින් දැනටමත් එහි තබා ඇති බැවිනි. පාලක විසින් එය "දත්ත එන්නත් කිරීමක්" ලෙස හැඳින්වීමට මම කැමතියි. සියලු දෘෂ්ටීන් මගේ මනසෙහි සිදුවීම් සහ ගිනි සිදුවීම් සිදු කරයි.
ජෝන් පීටර්ස්

3
මම සමාව අයදින නමුත් එම්වීවීඑම් අර්ථ නිරූපණයට එකඟ නොවෙමි. ViewModel හට දර්ශනයක් පිළිබඳ අදහසක් හෝ දර්ශනයක් කෙබඳු වනු ඇත්ද යන්න හෝ එය ප්‍රතිචාර දක්වන්නේ කෙසේද යන්න පිළිබඳව කිසිදු අදහසක් නොමැති අතර ආකෘතියකටද ViewModel පිළිබඳ අදහසක් නොමැත. ඇත්ත වශයෙන්ම, දර්ශනයක් මොඩලයක් ගැන නොදැන සිටිය යුතුය, එය දර්ශන මොඩලයක් පමණි. මාදිලිය දත්ත සහ යෙදුම් තත්වය නිරූපණය කළ යුතු අතර, ViewModel විසින් UI හැකියාව ඇති දත්ත බවට පරිවර්තනය කළ යුතුය (මේ අවස්ථාවේ දී මම සියලු ප්‍රාථමිකයන් නිර්දේශ කරමි) සහ දර්ශනයක් ViewModels පරිවර්තනයට ප්‍රතිචාර දැක්විය යුතුය. දත්ත බොහෝ විට එක හා සමාන වන නමුත් එය තවමත් ViewModel හරහා ඔතා නැවත ලබා දිය යුතු අතර පාලකයන් නොමැත.
මයිකල් පැකට් II

26

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 යෙදුමක් සඳහා එයම කරන්න. එක් අයෙකුට ශුන්‍ය නම්යශීලීභාවයට වඩා වැඩි පාලනයක් ඇති අතර අනෙකාට පාලනයක් සහ අසීමිත නම්යතාවයක් නොමැත.

පාලක සමූහයකින් හෝ (තනි ප්‍රභවයකින්) සමස්ත යෙදුමම කළමනාකරණය කිරීම සඳහා පාලිත පරිසරයක් හොඳ වන අතර ප්‍රතික්‍රියාශීලී පරිසරය වෙනම ගබඩාවලට වෙන් කළ හැකිය. ක්ෂුද්‍ර කළමනාකරණය එදිරිව නිදහස් කළමනාකරණය.

මම ඔබව ව්‍යාකූල කර නොමැති නම් මා හා සම්බන්ධ වීමට උත්සාහ කරන්න ... නිදර්ශන සහ උදාහරණ සමඟ මෙය සවිස්තරාත්මකව බැලීමට මට අවශ්‍ය නැත.

දවස අවසානයේදී අපි සියල්ලෝම ක්‍රමලේඛකයින් වන අතර කේතීකරණයේදී එම අරාජිකත්වය අප තුළ ජීවත් වේ ... එබැවින් නීති කඩනු ඇත, න්‍යායන් වෙනස් වනු ඇත, මේ සියල්ලම හොග් වොෂ් අවසන් වනු ඇත ... නමුත් විශාල වශයෙන් වැඩ කරන විට ව්‍යාපෘති සහ විශාල කණ්ඩායම් මත, එය සැබවින්ම නිර්මාණ රටාවකට එකඟ වී එය බලාත්මක කිරීමට උපකාරී වේ. යම් දවසක එය ආරම්භයේ දී ගන්නා ලද කුඩා අමතර පියවර පසුව ඉතුරුම්වල පිම්මක් බවට පත් කරනු ඇත.


පුදුම සහගත සවිස්තරාත්මක හා නිවැරදි පිළිතුර! එය මට ඉතා පැහැදිලිය. :-)
ankush981

"අන්තර්ජාලයේ නරක තොරතුරු රාශියක් ඔබ සොයා ගන්නා බැවින් එය ඉගෙනීම ඉතා ව්‍යාකූල විය හැකිය." ඔව්. මෙම සැලසුම් රටා පිළිබඳ අත්දැකීම් ඇති අයෙකු ලෙස, හොඳ නිබන්ධන / මාර්ගෝපදේශ ගැන ඔබ දන්නවාද?
MarredCheese

1
ඇත්තම කිව්වොත්, මගේ එම්වීවීඑම් දැනුම වසර ගණනාවක් හෝ අත්හදා බැලීම් සහ දෝෂයන් හරහා ඇති අතර කණ්ඩායම් උත්සාහයන් මත පදනම්ව එය විවිධාකාරයෙන් භාවිතා කිරීම / කිරීම. මට මෑතකදී (මීට වසර 2 කට පෙර) මගේ අත්දැකීම් සාරාංශගත ක්‍රීඩා සැලැස්මක් තුළට ගෙන ඒමට සහ කණ්ඩායම් ආරම්භයක් අවසන් කිරීමට නායකත්වය දීමට හැකි වූ අතර අපි අතිශයින් සාර්ථක විය. එයින් කියැවුණේ, මට ඔබව එක තැනකට යොමු කර සමාව ඉල්ලිය නොහැක. ඔබ නිවැරදි යැයි මට පැවසිය හැකිය, විවිධ මත නිසා එය ඉතා ව්‍යාකූල නමුත් IMO, MVVM සමඟ එය හැකි තරම් සාමාන්‍ය විය යුතුය. දෘෂ්ටි කෝණයෙන් දත්ත සමඟ බැඳීමට හා ඕනෑම දෘෂ්ටියකට වැඩ කිරීමට ඉඩ සලසන ViewModels බවට පත් කරන්න ...
මයිකල් පැකට් II

1
වෙනත් වචන වලින් කිවහොත්, දර්ශනයක් ඕනෑම ආකාරයකින් පෙනෙනු ඇතැයි හෝ ක්‍රියා කරනු ඇතැයි උපකල්පනය නොකරන්න. මට අනුව ViewModel වඩාත් සුදුසු වන්නේ API වැනි, නමුත් දැඩි සන්නිවේදනයකින්. බන්ධනය, සංස්කරණය කිරීම, අණ කිරීම යනාදිය සඳහා ක්‍රීඩා සැලැස්ම අනුගමනය කරන්න. දර්ශනයට නිශ්චිත ආකාරයකින් ක්‍රියා කිරීමට අමතර තර්කනයක් අවශ්‍ය නම්, එයට යෙදුම හෝ දත්ත සමඟ කිසිදු සම්බන්ධයක් නැත (සජීවිකරණය හෝ පතන කොටුව වැනි ..) එවිට එම තර්කනය කොහේ හරි දර්ශන තලයට අයත් වේ. නැවතත්, විවිධ මත රාශියක් ඇති අතර මෙය මගේ පමණක් නමුත් මට මෙහි ශක්තිමත් පසුබිමක් සහ මෙතෙක් ස්ථිර වාර්තාවක් ඇත.
මයිකල් පැකට් II

බෙදාහදා ගැනීමට මා අකමැති හෝ සරල සංදර්ශනයක් සැකසීමට අකමැති උදාහරණ යෙදුම් මා සතුව ඇති අතර ඔබට හෝ වෙනත් කෙනෙකුට අවශ්‍ය හෝ කුතුහලයෙන් සිටී නම් කියන්න.
මයිකල් පැකට් II

23

සරල වෙනස: (යාකොව්ගේ Coursera AngularJS පා course මාලාවෙන් ආශ්වාදයක්)

රූප විස්තරය මෙහි ඇතුළත් කරන්න

MVC (ආදර්ශ දර්ශන පාලකය)

  1. ආකෘති: ආකෘති වල දත්ත තොරතුරු අඩංගු වේ. පාලකය සහ දර්ශනය අමතන්න හෝ භාවිතා නොකරයි. ව්‍යාපාර තර්කනය සහ දත්ත නිරූපණය කිරීමේ ක්‍රම අඩංගු වේ. මෙම දත්ත සමහරක්, යම් ආකාරයකින්, දර්ශනයේ පෙන්වනු ඇත. කිසියම් ප්‍රභවයකින් දත්ත ලබා ගැනීම සඳහා තර්කනය ද එහි අඩංගු විය හැකිය.
  2. පාලකය: දර්ශනය සහ ආකෘතිය අතර සම්බන්ධතාවය ලෙස ක්‍රියා කරයි. ඇමතුම් බලන්න පාලක සහ පාලක ආකෘතිය අමතයි. එය මූලික වශයෙන් ආකෘතිය සහ / හෝ සුදුසු පරිදි වෙනස් කිරීමට දැක්ම දැනුම් දෙයි.
  3. බලන්න: UI කොටස සමඟ ගනුදෙනු. පරිශීලකයා සමඟ අන්තර් ක්‍රියා කරයි.

එම්.වී.වී.එම් (ආදර්ශ දර්ශන දර්ශන ආකෘතිය)

ViewModel :

  1. එය දර්ශනයේ තත්වය නිරූපණය කිරීමකි.
  2. එය දර්ශනයේ දර්ශනය වන දත්ත රඳවා තබා ගනී.
  3. සිදුවීම් බැලීමට ප්‍රතිචාර දක්වයි, ඉදිරිපත් කිරීමේ තර්කනය.
  4. ව්‍යාපාර තාර්කික සැකසුම් සඳහා වෙනත් ක්‍රියාකාරීත්වයන් අමතයි.
  5. කිසිවක් ප්‍රදර්ශනය කිරීමට කිසි විටෙකත් view ජුවම විමසන්නේ නැත.

18

එම්වීවීඑම් යනු ඉදිරිපත් කිරීමේ ආකෘති රටාවේ ශෝධනය (විවාදාත්මක) ය . මම විවාදාත්මක යැයි කියමි, මන්ද එකම වෙනස වන්නේ දත්ත බන්ධනය හා විධාන හැසිරවීමේ හැකියාව WPF සපයන ආකාරයයි.


1
2009 දී මෙම පිළිතුර බොහෝ විට හොඳ පිළිතුරක් විය හැකි නමුත් අද වන විට කිසිදු විවාදයක් නොමැත, එම්එස්එෆ්ටී වෙතින් HTML උපකාරක පාලකයන් පවා කුප්‍රකට “ෆෝ” උදව්කරුවන් භාවිතා කිරීමට බැඳී සිටී. Knockout යනු සේවාදායකයාගේ පැත්තෙන් දත්ත බන්ධනය කිරීමයි.
ජෝන් පීටර්ස්

1
මම මෙය 2009 දී ප්‍රකාශ කළේ ප්‍රජාවේ බොහෝ දෙනෙක් මෙම පිළිතුර පිළිගත් බැවිනි. එම්වීවීඑම් සහ ඉදිරිපත් කිරීමේ මාදිලිය විවිධ නම් වලින් එකම රටාවක් බැවින් එය විවාදාත්මක යැයි මම කීවෙමි. ඩබ්ලිව්පීඑෆ් හි ජනප්‍රියත්වයට ටැංකි, එය අද බොහෝ විට වෙනත් රාමු වල එම්වීවීඑම් ලෙස හැඳින්වේ, නමුත් එක්කෝ නම නිවැරදි ය.
wekempf

16

වාස්තු විද්‍යාත්මක රටාවන් පිළිබඳ එතරම් දැනුමක් නැති කෙනෙකුට අනෙක් පිළිතුරු තේරුම් ගැනීම පහසු නොවනු ඇත. යෙදුම් ගෘහ නිර්මාණ ශිල්පයට අළුත් කෙනෙකු එහි තේරීම ප්‍රායෝගිකව ඇගේ යෙදුමට බලපාන්නේ කෙසේද යන්න සහ ප්‍රජාවන් තුළ ඇති සියලු විකාර මොනවාදැයි දැන ගැනීමට අවශ්‍ය විය හැකිය.

ඉහත කරුණු පිළිබඳව යම් ආලෝකයක් හෙළි කිරීමට උත්සාහ කරමින් මම මෙම තිර රචනය 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 සංසන්දනය කරමින් මම මෙහි ලිපි මාලාවක් ලියා ඇත .


මෙහි ඇති සියලුම රස පා text යට හොඳ පිළිතුරක් ඇත ... සමහර හැඩතල ගැන්වීම් සහ සංරචක අතර කුඩා කතා කිරීම සමඟ මෙම පිටුවේ ඇති හොඳම එක මෙය විය හැකිය.
නියොන්බ්ලිට්සර්

එම්වීසී සහ එම්වීවීඑම් අතර ඇති වෙනස හොඳින් පැහැදිලි කර ඇති අතර ඉස්මතු කරයි
කේදාර්

15

Viewmodel යනු ඔබේ පරිශීලක අතුරුමුහුණත් අංග සඳහා “වියුක්ත” ආකෘතියකි. දෘශ්‍ය නොවන ආකාරයකින් ඔබේ දැක්මෙහි විධාන සහ ක්‍රියා ක්‍රියාත්මක කිරීමට එය ඔබට ඉඩ දිය යුතුය (උදාහරණයක් ලෙස එය පරීක්ෂා කිරීමට).

ඔබ එම්වීසී සමඟ වැඩ කර ඇත්නම්, ඔබේ දෘෂ්ටියේ තත්වය පිළිබිඹු කිරීම සඳහා ආදර්ශ වස්තු නිර්මාණය කිරීමට ඔබට යම් කලෙක ප්‍රයෝජනවත් විය හැකිය, නිදසුනක් ලෙස, සමහර සංස්කරණ සංවාද පෙන්වීමට හා සැඟවීමට යනාදිය. එවැනි අවස්ථාවක ඔබ දර්ශන මොඩලයක් භාවිතා කරයි.

MVVM රටාව යනු හුදෙක් සියලු UI මූලද්‍රව්‍යයන්ට එම පුහුණුව සාමාන්‍යකරණය කිරීමයි.

එය මයික්‍රොසොෆ්ට් රටාවක් නොවේ, WPF / Silverlight දත්ත බන්ධන මෙම රටාව සමඟ වැඩ කිරීමට විශේෂයෙන් සුදුසු වේ. නමුත් ජාවා සේවාදායක මුහුණු සමඟ එය භාවිතා කිරීමට කිසිවක් ඔබව වළක්වන්නේ නැත.


10

MVC භාවිතා කරමින් දර්ශනයට තදින් ටයිප් කළ ViewModels එන්නත් කිරීම

  1. ViewModel අළුත් කිරීම සහ එය දර්ශනයට එන්නත් කිරීම පාලකගේ වගකීම වේ. (ඉල්ලීම් ලබා ගැනීම සඳහා)
  2. ViewModel යනු DataContext සඳහා වන බහාලුම වන අතර අවසන් වරට තෝරාගත් අයිතමය වැනි දර්ශන තත්වය.
  3. මාදිලියේ DB ආයතන අඩංගු වන අතර එය විමසීම් සහ පෙරහන් කරන DB යෝජනා ක්‍රමයට ඉතා සමීප වේ. (මම මේ සඳහා EF සහ LINQ වලට කැමතියි)
  4. ආකෘති විසින් නිධිය සහ ප්‍රති results ල ප්‍රබල වර්ග වලට ප්‍රක්ෂේපණය කිරීම ද සලකා බැලිය යුතුය (EF ට හොඳ ක්‍රමයක් තිබේ ... EF.Database. විමසුම් එන්නත් කිරීමට සහ ශක්තිමත් වර්ග ලබා ගැනීමට සෘජු ADO ප්‍රවේශය සඳහා (විමසුම්, කොටස්) තෝරන්න. මන්දගාමී තර්කයකි. EF පමා වී නැත !
  5. ViewModel දත්ත ලබාගෙන ව්‍යාපාර නීති සහ වලංගුකරණය කරයි
  6. මත පාලක නැවත පශ්චාත් ප්රතිඵල සඳහා ViewModel තැපැල් ක්රමය, බලා CAL ඇත.
  7. පාලකය විසින් අලුතින් යාවත්කාලීන කරන ලද Viewmodel දර්ශනයට එන්නත් කරනු ඇත. දර්ශනය භාවිතා කරන්නේ ශක්තිමත් ආකාරයේ බන්ධනයක් පමණි .
  8. දර්ශනය හුදෙක් දත්ත විදහා දක්වන අතර සිදුවීම් නැවත පාලකයට පළ කරයි. (පහත උදාහරණ බලන්න)
  9. MVC අභ්‍යන්තර ඉල්ලීම වලක්වා ශක්තිමත් දත්ත වර්ගයක් සහිත නිසි පාලකය වෙත යොමු කරයි

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 ය.


ඔබට 6 වන අයිතමය පැහැදිලි කළ හැකිද? ඔබ ASP.Net පමණක් ආවරණය කරන බව මට වැටහී ඇත, නමුත් එය ViewModel වෙත අනවශ්‍ය යැපීමක් එකතු කරන බවක් පෙනේ. (උදා: දත්ත පැමිණෙන්නේ / යන්නේ කොතැනටද යන්න පිළිබඳ දැනුම). කේත (ව්‍යාජ කේත?) උදාහරණයක් මෙම පිළිතුර පැහැදිලි කර සේවාදායකයේ පැත්ත සහ සේවාදායක පාර්ශවයේ කොටස් මොනවාද යන්න පෙන්වීම හොඳය.
ගොන් කෝඩින්

9

MVVM දර්ශන මාදිලිය මිශ්‍රණයට එක් කරයි. මෙය වැදගත් ය, එය ඔබගේ සාමාන්‍ය මාදිලියේ UI විශේෂිත කොටස් සියල්ලම නොතබා WPF හි බන්ධන ප්‍රවේශය භාවිතා කිරීමට ඉඩ සලසයි.

මම වැරදියි, නමුත් මට විශ්වාස නෑ MVVM ඇත්තටම පාලකය මිශ්‍රණයට බල කරයි. මෙම සංකල්පය වඩාත් ගැලපෙන බව මට පෙනේ: http://martinfowler.com/eaaDev/PresentationModel.html . මම හිතන්නේ මිනිසුන් එය එම්වීසී සමඟ ඒකාබද්ධ කිරීමට තෝරාගනී, එය රටාව තුළ ගොඩනගා ඇති බවක් නොවේ.


3
එම්.වී.වී.එම් යනු ඉදිරිපත් කිරීමේ ආකෘතියයි, නමුත් එම්.වී.වී.එම්. WPF නිශ්චිත රටාව සාක්ෂාත් කර ගැනීම සඳහා වඩාත් කැමති නම බවට පත්වෙමින් තිබේ.
wekempf

එකඟ විය. MVC හි Viewmodel දර්ශනය සඳහා වන රාජ්‍ය යන්ත්‍රය "IS" වේ. එහි දත්ත සමුදාය අඩංගු වන අතර තෝරාගත් සියලුම අයිතම තොරතුරු ලුහුබඳින අතර IValidatableObject අතුරුමුහුණත භාවිතා කර සියලුම වලංගු කිරීමේ තර්කනයන් අඩංගු විය හැකිය. ශක්තිමත් ටයිප් කළ ආකෘති භාවිතා කළ හැකි ආකෘති ස්තරයේ ඩීබී සමඟ ViewModel අතුරුමුහුණත්. WPF හි MVVM යනු MVC හි පාලකයයි. නමුත් MVC හි පාලකය වඩා පිරිසිදුයි, එය රවුටින් හසුරුවන්නෙකු අත්‍යවශ්‍ය වේ.
ජෝන් පීටර්ස්

9

මට කිව හැකි දෙයින්, MVVM MVC හි MV වෙත සිතියම් ගත කරයි - එයින් අදහස් කරන්නේ සාම්ප්‍රදායික MVC රටාවකින් V M සමඟ කෙලින්ම සන්නිවේදනය නොවන බවයි. MVC හි දෙවන අනුවාදයේ M සහ V. MVVM අතර link ජු සම්බන්ධයක් ඇත. එම් සහ වී සන්නිවේදනයට අදාළ සියලු කාර්යයන් භාර ගන්නා අතර, එය සී වෙතින් වෙන් කිරීමට යුවළක් යොදන්න. ඇත්ත වශයෙන්ම, එම්වීවීඑම් හි සම්පූර්ණයෙන් ගණනය කර නොමැති විශාල විෂය පථ යෙදුම් කාර්ය ප්‍රවාහය (හෝ භාවිත අවස්ථා ක්‍රියාත්මක කිරීම) තවමත් පවතී. පාලකයේ කාර්යභාරය මෙයයි. පාලකයන්ගෙන් මෙම පහළ මට්ටමේ අංග ඉවත් කිරීමෙන් ඒවා පිරිසිදු වන අතර යෙදුමේ භාවිත අවස්ථා සහ ව්‍යාපාර තර්කනය වෙනස් කිරීම පහසු කරවන අතර පාලකයන් නැවත භාවිතා කළ හැකිය.


1
IMHO මම 'පාලක වැඩි නැවත භාවිතා කල හැකි වන බවට "ද පුළුල් පොදු ASP.Net' පාලක" සඳහා ප්රකාශයක් සහ ප්රති-ඵලදායී (එනම් නොවන ව්යාපාර තර්කනය ස්ථරය) නොවන බව තර්ක කරන අය පාලකයන් සාමාන්යයෙන් බව අයදුම්පත් කොටස් අඩංගු ලෙස application- විශේෂිත . නැවත භාවිතා කළ යුතු වන්නේ දර්ශන, ආකෘති, දසුන් සහ ව්‍යාපාර තර්කනයයි. ව්‍යාපාරික තාර්කික මොඩියුලයන් පාලකයන් ලෙස නොව සේවා සපයන්නන් ලෙස සැලකීම වඩා හොඳ විකල්පයක් වනු ඇතැයි මම සිතුවෙමි.
ගොන් කෝඩින්

නමුත් ඔබ කතා කරන්නේ Asp.net හි "ViewModel" ගැන මිස MVVM සැලසුම් රටාව ගැන නොවේ. වෙනස් කරුණු දෙකක්.
ලුයිස්

9

එම්වීවීඑම් හි මූලාරම්භය ගැන සඳහන් නොකර මෙය ඉහළ ඡන්ද ප්‍රතිශතයක් වීම මට පුදුමයකි. MVVM යනු මයික්‍රොසොෆ්ට් ප්‍රජාව තුළ භාවිතා වන ජනප්‍රිය යෙදුමකි. එය ආරම්භ වූයේ මාටින් ෆෝලර්ගේ ඉදිරිපත් කිරීමේ ආකෘතියෙනි . එබැවින් රටාවේ චේතනාව සහ අන් අය සමඟ ඇති වෙනස්කම් තේරුම් ගැනීමට, රටාව පිළිබඳ මුල් ලිපිය කියවිය යුතු පළමු දෙයයි.


වාව් ... ඉතින් MVC සහ MVVM යන දෙකම ස්මාල්ටෝක් වෙතින් පැමිණියේ ?? පෙනෙන විදිහට ඔවුන් ඔවුන්ගේ කාලයට වඩා ඉදිරියෙන් සිට ඇත ...
මතෙ

ඇත්ත වශයෙන්ම, එය ආරම්භ වූයේ මාටින් ෆෝලර්ගේ ඉදිරිපත් කිරීමේ ආකෘතියෙන් යැයි පැවසීම නිවැරදි නොවේ. මුලින්ම පැමිණියේ කුමක්ද යන්න තීරණය කිරීම ඉතා අසීරු ය, නමුත් රටා දෙකම (ඒවා සැබවින්ම එකම රටාවක් බව ඉඩ දෙමින්) ස්වාධීනව හා දළ වශයෙන් එකම වේලාවට පැමිණියේය.
wekempf

6

හොඳයි, සාමාන්‍යයෙන් MVC වෙබ් සංවර්ධනය සඳහා භාවිතා කරන අතර MVVM WPF / Silverlight සංවර්ධනයේදී වඩාත් ජනප්‍රිය වේ. කෙසේ වෙතත්, සමහර විට වෙබ් ගෘහ නිර්මාණ ශිල්පයට MVC සහ MVVM මිශ්‍ර විය හැකිය.

උදාහරණයක් ලෙස: ඔබට knockout.js භාවිතා කළ හැකි අතර මේ අවස්ථාවේ දී ඔබේ සේවාදායකයාගේ පැත්තෙන් MVVM ඇත. ඔබේ MVC හි සේවාදායක පැත්තද වෙනස් විය හැකිය. සංකීර්ණ යෙදුම් වල කිසිවෙකු පිරිසිදු ආකෘතිය භාවිතා නොකරයි. MVC හි "ආකෘතියක්" ලෙස ViewModel භාවිතා කිරීමට හැඟීමක් තිබිය හැකි අතර ඔබේ සැබෑ ආකෘතිය මූලික වශයෙන් මෙම VM හි කොටසක් වනු ඇත. මෙය ඔබට අතිරේක වියුක්ත තට්ටුවක් ලබා දෙයි.


'MVC' යනු 'MVC' යන්නෙන් අදහස් කරන්නේ උත්සුකයන් වෙන් කිරීම මිස වෙබයට පෙර ඇති සත්‍ය MVC නොවේ.
ටෙරන්ස් බ්‍රැනන්

5

පාලකය MVVM හි ViewModel මගින් ප්‍රතිස්ථාපනය නොවේ, මන්ද ViewModel සම්පූර්ණයෙන්ම වෙනස් ක්‍රියාකාරිත්වයක් ඇති අතර පසුව පාලකය. ඔබට තවමත් පාලකයෙකු අවශ්‍යය, මන්ද පාලකයකු නොමැතිව ඔබේ ආකෘතිය, ViewModel සහ View බොහෝ දේ නොකරනු ඇත ... MVVM හි ඔබට පාලකයකු ද ඇත, MVVM යන නම අස්ථානගත වෙමින් පවතී.

මගේ නිහතමානී මතයේ නිවැරදි නම එම්වීවීඑම්සී ය.

ඔබට පෙනෙන පරිදි ViewModel යනු MVC රටාවට එකතු කිරීමකි. එය පරිවර්තක-තර්කනය (නිදසුනක් ලෙස වස්තුව නූලකට පරිවර්තනය කරයි) පාලකයේ සිට ViewModel වෙත ගෙන යයි.


5

මම මේ සඳහා මධ්‍යම ලිපියක් හැදුවා.

එම්.වී.වී.එම්

  1. ➡ ViewModel View ආකෘතිය බලන්න

    • දර්ශනයට ViewModel වෙත සඳහනක් ඇත, නමුත් අනෙක් අතට නොවේ.
    • ViewModel හි මාදිලිය ගැන සඳහනක් ඇත, නමුත් අනෙක් අතට නොවේ.
    • දර්ශනයට ආකෘතිය ගැන සඳහනක් නොමැති අතර අනෙක් අතට.
  2. ඔබ පාලක භාවිතා කරන්නේ නම්, එය වෙත යොමු පුළුවන් දසුන් හා ViewModels , එය පාලක පෙන්නුම් ලෙස අවශ්ය සෑම විටම නොවේ නමුත් SwiftUI .

  3. දත්ත බන්ධනය : අපි ViewModel Properties සඳහා සවන්දෙන්නන් නිර්මාණය කරමු.
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
   }
}

සැකසීමේ වෙනස්කම්

  1. ව්‍යාපාර තර්කනය MVC සඳහා පාලකයෙහි සහ MVVM සඳහා ViewModels තුළ පවතී.
  2. සිදුවීම් MVC හි දර්ශනයේ සිට පාලකය වෙත කෙලින්ම ලබා දෙන අතර MVVM සඳහා සිදුවීම් View වෙතින් ViewModel වෙත පාලක වෙත (එකක් තිබේ නම්) යවනු ලැබේ.

පොදු ලක්ෂණ

  1. MVVM සහ MVC යන දෙවර්ගයම ආදර්ශ / ය වෙත කෙලින්ම පණිවිඩ යැවීමට දර්ශනයට ඉඩ නොදේ.
  2. දෙදෙනාම ආකෘති ඇත.
  3. දෙදෙනාම අදහස් ඇත.

MVVM හි වාසි

  1. ViewModels ව්‍යාපාර තර්කනය රඳවාගෙන ඇති නිසා ඒවා කුඩා කොන්ක්‍රීට් වස්තු වන අතර ඒවා ඒකක පරීක්ෂණ සඳහා පහසු කරයි. අනෙක් අතට, MVC හි, ව්‍යාපාරික තර්කනය ViewController හි ඇත. සියලු ක්‍රම සහ සවන්දෙන්නන් එකවර පරීක්‍ෂා නොකර දර්ශන පාලකයක ඒකක පරීක්ෂණයක් පුළුල් ලෙස ආරක්ෂිත යැයි ඔබ විශ්වාස කරන්නේ කෙසේද? ඒකක පරීක්ෂණ ප්‍රති .ල ඔබට සම්පූර්ණයෙන්ම විශ්වාස කළ නොහැක.
  2. MVVM හි, ව්‍යාපාර තර්කනය පාලකයෙන් පරමාණුක ViewModel ඒකක වලට වෙන් කර ඇති නිසා, ViewController හි ප්‍රමාණය හැකිලී යන අතර මෙය ViewController කේතය වඩාත් පැහැදිලිව පෙනේ.

MVC හි වාසි

  1. පාලකය තුළ ව්‍යාපාරික තර්කනය සැපයීම මඟින් අතු බෙදීමේ අවශ්‍යතාවය අඩු වන අතර එම නිසා ව්‍යාපාර තර්කනය ViewModels තුළට සම්බන්ධ කිරීම වඩා ක්‍රියාකාරී වන හැඹිලිය මත ප්‍රකාශ ක්‍රියාත්මක වීමට ඉඩ ඇත.
  2. එක් තැනක ව්‍යාපාරික තර්කනය සැපයීම මඟින් පරීක්ෂණ අවශ්‍ය නොවන සරල යෙදුම් සඳහා සංවර්ධන ක්‍රියාවලිය වේගවත් කළ හැකිය. පරීක්ෂණ අවශ්‍ය නොවන විට මම නොදනිමි.
  3. ViewController හි ව්‍යාපාර තර්කනය සැපයීම නව සංවර්ධකයින් සඳහා සිතීම පහසුය.

2
හොඳම පැහැදිලි කිරීම
p32094

4

MVVMC, හෝ සමහර විට MVC +, ව්‍යවසාය මෙන්ම වේගවත් යෙදුම් සංවර්ධනය සඳහා ශක්‍ය ප්‍රවේශයක් ලෙස පෙනේ. ව්‍යාපාර සහ අන්තර්ක්‍රියා තර්කනයෙන් UI වෙන් කිරීම සතුටක් වන අතර, 'පිරිසිදු' MVVM රටාව සහ ලබා ගත හැකි බොහෝ උදාහරණ ඒකීය අදහස් මත වඩාත් හොඳින් ක්‍රියාත්මක වේ.

ඔබගේ නිර්මාණ ගැන විශ්වාස නැත, නමුත් මගේ බොහෝ යෙදුම්වල පිටු සහ (නැවත භාවිතා කළ හැකි) දර්ශන කිහිපයක් අඩංගු වන අතර එම නිසා ViewModels යම් දුරකට අන්තර්ක්‍රියා කිරීමට අවශ්‍ය වේ. පිටුව පාලකය ලෙස භාවිතා කිරීම MVVM හි අරමුණ මුළුමනින්ම පරාජය කරනු ඇත, එබැවින් යටින් පවතින තර්කනය සඳහා "VM-C" ප්‍රවේශයක් භාවිතා නොකිරීම ප්‍රති result ල විය හැකිය .. හොඳයි .. යෙදුම පරිණත වන විට අභියෝගාත්මක ඉදිකිරීම්. VB-6 හි පවා අපගෙන් බොහෝ දෙනෙක් බොත්තම් සිද්ධියට ව්‍යාපාර තර්කනය කේතනය කිරීම නවතා පාලකයකුට 'රිලේ' විධාන ආරම්භ කළා නේද? මම මෑතකදී එම මාතෘකාව පිළිබඳ නැගී එන බොහෝ රාමු දෙස බැලුවෙමි; මගේ ප්‍රියතම දේ පැහැදිලිවම මැගෙලන් (කෝඩ්ප්ලෙක්ස් හි) ප්‍රවේශයයි. සුබ කේතීකරණයක්!

http://en.wikipedia.org/wiki/Model_View_ViewModel#References


2

ප්‍රායෝගික දෘෂ්ටි කෝණයකින්, MVC (Model-View-Controller) යනු රටාවකි. කෙසේ වෙතත්, MVC ASP.net MVC ලෙස භාවිතා කරන විට, ආයතන රාමුව (EF) හා “බල මෙවලම්” සමඟ සංයුක්ත වන විට දත්ත සමුදායන්, වගු සහ තීරු වෙබ් පිටුවකට ගෙන ඒම සඳහා ඉතා බලවත්, අර්ධ වශයෙන් ස්වයංක්‍රීය ප්‍රවේශයකි. CRUD මෙහෙයුම් හෝ R (ලබා ගැනීම හෝ කියවීම) මෙහෙයුම් සඳහා පමණි. අවම වශයෙන් මම එම්වීවීඑම් භාවිතා කරන විට, දර්ශන මාදිලි ව්‍යාපාරික වස්තූන් මත යැපෙන ආකෘති සමඟ අන්තර්ක්‍රියා කළ අතර ඒවා “අතින් සාදන ලද” ඒවා වූ අතර විශාල පරිශ්‍රමයකින් පසුව, ඊඑෆ් එකක් ලබා දෙන තරමට වඩා හොඳ ආකෘති ලබා ගැනීමට යමෙකු වාසනාවන්ත විය. -of-the-box ". ප්‍රායෝගික ක්‍රමලේඛන දෘෂ්ටි කෝණයකින් බලන කල, එම්වීසී හොඳ තේරීමක් ලෙස පෙනෙන්නේ එය එක් උපයෝගීතාවයක් පිටතදී ලබා දෙන බැවිනි, නමුත් සීනු හා විස්ල් එකතු කිරීමට තවමත් හැකියාවක් ඇත.


2

ලබා දී ඇති බොහෝ ප්‍රතිචාර වලට අනුපූරකව, නවීන සේවාදායක පාර්ශවීය වෙබ් - හෝ පොහොසත් වෙබ් යෙදුම් දෘෂ්ටි කෝණයෙන් අමතර ඉදිරිදර්ශනයක් එක් කිරීමට මට අවශ්‍ය විය .

ඇත්ත වශයෙන්ම මේ දිනවල සරල වෙබ් අඩවි සහ විශාල වෙබ් යෙදුම් බහුලව ගොඩනඟා ඇත්තේ බූට්ස්ට්‍රැප් වැනි ජනප්‍රිය පුස්තකාල සමඟ ය. ස්ටීව් Sanderson විසින් ඉදි, පිලිමළුන් පිටුදැකීම රටාව වඩාත් වැදගත් හැසිරීම් එකක් mimics මෙම MVVM රටාව සඳහා සහයෝගය සපයයි: දසුන මාදිලිය හරහා දත්ත-බන්ධන. කුඩා ජාවාස්ක්‍රිප්ට් සමඟ, දත්ත සහ තර්කනය ක්‍රියාත්මක කළ හැකි අතර එය බූට්ස්ට්‍රැප් හිdata-bind බොහෝ අංග භාවිතා කිරීමට සමාන සරල HTML ගුණාංග සහිත පිටු මූලද්‍රව්‍යවලට එකතු කළ හැකිය . මෙම පුස්තකාල දෙක පමණක් එක්ව අන්තර්ක්‍රියාකාරී අන්තර්ගතයන් ඉදිරිපත් කරයි; මෙම ප්‍රවේශය මාර්ගගත කිරීම සමඟ සංයෝජනය වන විට තනි පිටු යෙදුම ගොඩනැගීම සඳහා සරල නමුත් බලවත් ප්‍රවේශයක් ලබා ගත හැකිය .

ඒ හා සමානව, කෝණික වැනි නවීන සේවාදායක පාර්ශවීය රාමුවක් සම්මුතිය අනුව එම්වීසී රටාව අනුගමනය කරන අතර සේවාවක් ද එක් කරයි. සිත්ගන්නා කරුණ නම්, එය ආදර්ශ-දර්ශනය-කුමක් වුවත් (MVW) ලෙස හැඳින්වේ. ( Stack Overflow හි මෙම ලිපිය බලන්න .)

මීට අමතරව, කෝණික 2 වැනි ප්‍රගතිශීලී වෙබ් රාමු වල නැගීමත් සමඟම, පාරිභාෂිතයේ වෙනසක් සහ සමහර විට නව වාස්තු විද්‍යාත්මක රටාවක් අපට දැකගත හැකිය, එහිදී සංරචක දර්ශන හෝ අච්චුවකින් සමන්විත වන අතර සේවාවක් සමඟ අන්තර් ක්‍රියා කරයි - මේ සියල්ලම a. මොඩියුලය; සහ මොඩියුල මාලාවක් යෙදුම සෑදී ඇත.


2

මම හිතුවා MVC සහ MVVM එක සමානයි කියලා. දැන් ෆ්ලක්ස් වල පැවැත්ම නිසා මට වෙනස කියන්න පුළුවන්:

MVC හි, ඔබගේ යෙදුමේ සෑම දර්ශනයක් සඳහාම, ඔබට ආකෘතියක් සහ පාලකයක් ඇත, එබැවින් මම එය දර්ශනය, දර්ශන ආකෘතිය, දර්ශන පාලකය ලෙස හඳුන්වන්නෙමි. එක් දර්ශනයක් තවත් දෘෂ්ටියක් සමඟ සන්නිවේදනය කරන්නේ කෙසේදැයි රටාව ඔබට නොකියයි. එබැවින් විවිධ රාමු තුළ ඒ සඳහා විවිධ ක්‍රියාත්මක කිරීම් තිබේ. උදාහරණයක් ලෙස පාලකයන් එකිනෙකා සමඟ කතා කරන ක්‍රියාත්මක කිරීම් ඇති අතර අනෙක් ක්‍රියාත්මක කිරීම් වලදී ඔවුන් අතර මැදිහත් වන තවත් අංගයක් ඇත. දර්ශන ආකෘති එකිනෙකා සමඟ සන්නිවේදනය කරන ක්‍රියාවට නැංවීම් පවා ඇත, එය එම්වීසී රටාවේ බිඳීමක් වන බැවින් දර්ශන ආකෘතියට ප්‍රවේශ විය යුත්තේ දර්ශන පාලකයට පමණි.

MVVM හි, ඔබට එක් එක් සංරචක සඳහා දර්ශන ආකෘතියක් ද ඇත. රටාව මඟින් දර්ශන මාදිලියට බලපෑම් කළ යුතු ආකාරය නිශ්චිතව දක්වා නැත, එබැවින් සාමාන්‍යයෙන් බොහෝ රාමු තුළ දර්ශන ආකෘතියේ පාලකයේ ක්‍රියාකාරිත්වය ඇතුළත් වේ. කෙසේ වෙතත්, MVVM ඔබට පවසන්නේ ඔබේ දර්ශන ආකෘතියේ දත්ත පැමිණිය යුත්තේ ආකෘතියෙන් වන අතර එය නිශ්චිත දර්ශනයකට නොදැන හෝ අභිරුචිකරණය නොකරන සමස්ත ආකෘතියයි.

වෙනස නිරූපණය කිරීම සඳහා, අපි ෆ්ලක්ස් රටාව ගනිමු. යෙදුමේ විවිධ අදහස් සන්නිවේදනය කළ යුතු ආකාරය ප්‍රවාහ රටාව පවසයි. සෑම දර්ශනයක්ම වෙළඳසැලකට ඇහුම්කන් දෙන අතර පිටත්කරුවා භාවිතයෙන් ක්‍රියා කරයි. යවා ඇති තැනැත්තා අනෙක් වෙළඳසැල් වලට දැන් කර ඇති ක්‍රියාව ගැන පවසන අතර වෙළඳසැල් යාවත්කාලීන වේ. ෆ්ලක්ස් හි ගබඩාවක් එම්වීවීඑම් හි (සාමාන්‍ය) ආකෘතියට අනුරූප වේ. එය කිසියම් නිශ්චිත දර්ශනයකට සිරිතක් නොවේ. එබැවින් සාමාන්‍යයෙන් මිනිසුන් ප්‍රතික්‍රියා සහ ප්‍රවාහ භාවිතා කරන විට, එක් එක් ප්‍රතික්‍රියා සංරචකය ඇත්ත වශයෙන්ම MVVM රටාව ක්‍රියාත්මක කරයි. ක්‍රියාවක් සිදු වූ විට, දර්ශන ආකෘතිය පිටත්කරුවා අමතයි, අවසානයේදී එය ගබඩාවේ වෙනස්කම් අනුව යාවත්කාලීන වේ, එය ආකෘතියයි. එක් එක් සංරචකය MVC ක්‍රියාත්මක කරන බව ඔබට පැවසිය නොහැක, මන්ද MVC හි පාලකවරයාට පමණක් දර්ශන ආකෘතිය යාවත්කාලීන කළ හැකිය.


2

mvc යනු සේවාදායක පාර්ශවයක් වන අතර mvvm යනු වෙබ් සංවර්ධනයේදී සේවාදායක පාර්ශවය (බ්‍රව්සරය) වේ.

බොහෝ විට javascript බ්‍රව්සරයේ mvvm සඳහා භාවිතා කරයි. mvc සඳහා බොහෝ සේවාදායක පාර්ශවීය තාක්ෂණයන් ඇත.


1

ඉතා කෙටියෙන් කිවහොත් - එම්වීසී හි පාලකය දෘෂ්ටිය (පාලනයන්) ගැන දන්නා අතර එම්වීවීඑම් හි වීව්මොඩෙල් එය පරිභෝජනය කරන්නේ කවුරුන්ද යන්න නොදැන සිටී. ViewModel විසින් එහි නිරීක්ෂණය කළ හැකි ගුණාංග සහ ක්‍රියාවන් එය භාවිතා කිරීමට උනන්දුවක් දක්වන ඕනෑම කෙනෙකුට නිරාවරණය කරයි. ViewModel තුළ UI ගැන සඳහනක් නොමැති බැවින් එම කරුණ පරීක්ෂා කිරීම පහසු කරයි.


1

ආදර්ශ-දර්ශන-පාලකය (සාමාන්‍යයෙන් MVC ලෙස හැඳින්වේ ) යනු මෘදුකාංග සැලසුම් රටාවකි, පරිශීලක අතුරුමුහුණත් සංවර්ධනය කිරීම සඳහා බහුලව භාවිතා වන අතර එය අදාළ වැඩසටහන් තර්කනය අන්තර් සම්බන්ධිත අංග තුනකට බෙදා ඇත. පරිශීලකයා විසින් තොරතුරු ඉදිරිපත් කරන හා පිළිගන්නා ආකාර වලින් තොරතුරු වල අභ්‍යන්තර නිරූපණයන් වෙන් කිරීම සඳහා මෙය සිදු කෙරේ. එම්වීසී වාස්තු විද්‍යාත්මක රටාව අනුගමනය කිරීමෙන් කේත නැවත භාවිතා කිරීමට හා සමාන්තරව සංවර්ධනය කිරීමට ඉඩ සලසන මෙම ප්‍රධාන කොටස් විසන්ධි කරයි.

ඩෙස්ක්ටොප් ග්‍රැෆික් පරිශීලක අතුරුමුහුණත් (GUIs) සඳහා සාම්ප්‍රදායිකව භාවිතා කරන මෙම රටාව වෙබ් යෙදුම් සැලසුම් කිරීම සඳහා ජනප්‍රිය වී තිබේ. ජාවාස්ක්‍රිප්ට්, පයිතන්, රූබි, පීඑච්පී, ජාවා, සහ සී # වැනි ජනප්‍රිය ක්‍රමලේඛන භාෂාවන් එම්වීසී රාමු ඇති අතර ඒවා වෙබ් යෙදුම් සංවර්ධනය සඳහා භාවිතා කරනු ලැබේ.

ආකෘතිය

රටාවේ කේන්ද්‍රීය අංගය. එය පරිශීලක අතුරුමුහුණතෙන් ස්වාධීනව යෙදුමේ ගතික දත්ත ව්‍යුහය වේ. එය යෙදුමේ දත්ත, තර්කනය සහ නීති කෙලින්ම කළමනාකරණය කරයි.

දැක්ම

ප්‍රස්ථාරයක්, රූප සටහනක් හෝ වගුවක් වැනි තොරතුරු නිරූපණය කිරීම. කළමනාකරණය සඳහා තීරු සටහනක් සහ ගණකාධිවරුන් සඳහා වගු දැක්වීමක් වැනි එකම තොරතුරු වල බහුවිධ අදහස් ලබා ගත හැකිය.

පාලකය

ආදානය පිළිගෙන එය ආකෘතිය හෝ දර්ශනය සඳහා විධාන බවට පරිවර්තනය කරයි.

යෙදුම මෙම සංරචක වලට බෙදීමට අමතරව, ආකෘති-දර්ශන-පාලක සැලසුම ඒවා අතර අන්තර්ක්‍රියා අර්ථ දක්වයි.

යෙදුමේ දත්ත කළමනාකරණය කිරීම සඳහා ආකෘතිය වගකිව යුතුය. එය පාලක වෙතින් පරිශීලක ආදානය ලබා ගනී.

දර්ශනය යනු ආකෘතිය නිශ්චිත ආකෘතියකින් ඉදිරිපත් කිරීමයි.

පාලකය පරිශීලක ආදානයට ප්‍රතිචාර දක්වන අතර දත්ත ආකෘති වස්තු මත අන්තර්ක්‍රියා සිදු කරයි. පාලකය ආදානය ලබා ගනී, විකල්පයක් ලෙස එය වලංගු කර ආදානය ආකෘතියට ලබා දෙයි. රූප විස්තරය මෙහි ඇතුළත් කරන්න

Model-View-ViewModel (MVVM) යනු මෘදුකාංග වාස්තු විද්‍යාත්මක රටාවකි.

MVVM මඟින් චිත්‍රක පරිශීලක අතුරුමුහුණත සංවර්ධනය කිරීම සඳහා පහසුකම් සපයයි - එය සලකුණු භාෂාවක් හෝ GUI කේතයක් හරහා වේවා - ව්‍යාපාර තර්කනය හෝ පසු-තර්කනය (දත්ත ආකෘතිය) සංවර්ධනය කිරීමෙන්. එම්වීවීඑම් හි දර්ශන ආකෘතිය අගය පරිවර්තකයක් වන අතර, එයින් අදහස් වන්නේ වස්තු පහසුවෙන් කළමනාකරණය කර ඉදිරිපත් කළ හැකි ආකාරයට දත්ත වස්තු ආකෘතියෙන් නිරාවරණය කිරීම (පරිවර්තනය කිරීම) සඳහා දර්ශන ආකෘතිය වගකිව යුතු බවයි. මේ සම්බන්ධයෙන් ගත් කල, දර්ශන ආකෘතිය දර්ශනයකට වඩා ආදර්ශයක් වන අතර බොහෝ දර්ශන හසුරුවන්නේ දර්ශන දර්ශනයේ සියලු තර්කනයන් නොවේ. දර්ශන මාදිලිය මැදිහත්කරුවන්ගේ රටාවක් ක්‍රියාත්මක කළ හැකි අතර, දර්ශනය මඟින් සහාය දක්වන භාවිත අවස්ථා සමූහය වටා පසුපස අන්ත තර්කනයට ප්‍රවේශය සංවිධානය කරයි.

MVVM යනු මාටින් ෆෝලර්ගේ ඉදිරිපත් කිරීමේ ආකෘති නිර්මාණ රටාවේ විචලනයකි. එම්වීවීඑම් දර්ශනයක තත්වය සහ හැසිරීම එකම ආකාරයකින් සාරාංශ කරයි, නමුත් ඉදිරිපත් කිරීමේ ආකෘතියක් නිශ්චිත පරිශීලක අතුරුමුහුණත් වේදිකාවක් මත රඳා නොපවතින අයුරින් දර්ශනයක් (දර්ශන ආකෘතියක් නිර්මාණය කරයි) සාරාංශ කරයි.

මයික්‍රොසොෆ්ට් ගෘහ නිර්මාණ ශිල්පීන් වන කෙන් කූපර් සහ ටෙඩ් පීටර්ස් විසින් MVVM නිර්මාණය කරන ලද්දේ පරිශීලක අතුරුමුහුණත් වල සිදුවීම් මත පදනම් වූ වැඩසටහන් සරල කිරීම සඳහා ය. මෙම රටාව වින්ඩෝස් ඉදිරිපත් කිරීමේ පදනම (WPF) (මයික්‍රොසොෆ්ට් හි .NET ග්‍රැෆික් පද්ධතිය) සහ සිල්වර් ලයිට් (WPF හි අන්තර්ජාල යෙදුම් ව්‍යුත්පන්නය) සමඟ ඒකාබද්ධ කරන ලදී. මයික්‍රොසොෆ්ට් හි ඩබ්ලිව්පීඑෆ් සහ සිල්වර් ලයිට් ගෘහ නිර්මාණ ශිල්පියෙකු වන ජෝන් ගොස්මන් 2005 දී සිය බ්ලොග් අඩවියේ එම්වීවීඑම් නිවේදනය කළේය.

මොඩල්-වීව්-වීව් මොඩලය ආදර්ශ-දර්ශන-බයින්ඩර් ලෙසද හැඳින්වේ, විශේෂයෙන් .නෙට් වේදිකාවට සම්බන්ධ නොවන ක්‍රියාත්මක කිරීම් වලදී. ZK (ජාවා හි ලියා ඇති වෙබ් යෙදුම් රාමුවක්) සහ KnockoutJS (ජාවාස්ක්‍රිප්ට් පුස්තකාලයක්) ආකෘති-දර්ශන-බන්ධකය භාවිතා කරයි. රූප විස්තරය මෙහි ඇතුළත් කරන්න

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.