MVC (ආදර්ශ, දර්ශනය, පාලකය) යනු නඩත්තු කිරීමේ හැකියාව වැඩි දියුණු කිරීම සඳහා යෙදුමක කේත සංවිධානය කිරීමේ රටාවකි.
චිත්රාගාරයක් තුළ ඡායාරූප ශිල්පියෙකු සිය කැමරාව සමඟ සිතන්න. ගනුදෙනුකරුවෙකු පෙට්ටියක ඡායාරූපයක් ගන්නා ලෙස ඔහුගෙන් ඉල්ලා සිටී.
එම්වීසී නොවන ගෘහ නිර්මාණ තදින් එකට ඒකාබද්ධ වීමට නැඹුරු වේ. පෙට්ටිය, පාලකය සහ කැමරාව එක හා සමාන වස්තුවක් නම්, අපට නව දර්ශනයක් ලබා ගැනීමට අවශ්ය සෑම අවස්ථාවකදීම වෙන් වී කොටුව සහ කැමරාව යන දෙකම නැවත ගොඩනඟා ගත යුතුය. එසේම, ඡායාරූප ගැනීම සෑම විටම සෙල්ෆි ගැනීමට උත්සාහ කිරීමක් වැනිය - එය සැමවිටම එතරම් පහසු නැත.
bwaha මෙසේ ලිවීය:
MVC නිර්මාණයේ උදාහරණයක් ලෙස කතුවරයා wxPython හි mvctree.py ගැන සඳහන් කරයි. කෙසේ වෙතත් මම තවමත් හරිතයි, එබැවින් එම උදාහරණය ඉතා සංකීර්ණ බව මට පෙනී යන අතර කතුවරයා නිර්දේශ කරන වෙන්වීම මට නොතේරේ.
එම්වීසී යනු උත්සුකයන් වෙන් කිරීමකි.
වැඩසටහනේ දත්ත කළමනාකරණය කිරීම සඳහා ආදර්ශය වගකීම දරයි (පුද්ගලික සහ සේවාදායක දත්ත). වැඩසටහනේ සේවාදායක දත්ත සමඟ අන්තර් ක්රියා කිරීමට බාහිර ලෝකයට සැපයීම සඳහා දැක්ම / පාලකය වගකිව යුතුය.
වැඩසටහනේ අනෙක් කොටස් සමඟ අන්තර් ක්රියා කිරීමට හැකි වන පරිදි ආදර්ශය අභ්යන්තර අතුරු මුහුණතක් (API) සපයයි. දර්ශනය සමඟ සෑම දෙයක්ම සන්නිවේදනය කිරීම සඳහා දර්ශනය / පාලකය බාහිර අතුරු මුහුණතක් (GUI / CLI / වෙබ් පෝරමය / ඉහළ මට්ටමේ IPC / යනාදිය) සපයයි.
වැඩසටහනේ දත්තවල අඛණ්ඩතාව පවත්වා ගැනීම සඳහා ආදර්ශය වගකිව යුතුය, මන්ද එය දූෂිත වුවහොත් එය සෑම දෙනාටම ක්රීඩාව අවසන් වේ. UI හි අඛණ්ඩතාව පවත්වා ගැනීම, සියලු පෙළ දසුන් යාවත්කාලීන අගයන් පෙන්වන බවට වග බලා ගැනීම, වත්මන් අවධානයට අදාළ නොවන මෙනු අයිතම අක්රීය කිරීම යනාදිය වගකිව යුතු ය.
මාදිලියේ දර්ශන / පාලක කේතයක් නොමැත; GUI විජට් පන්ති නොමැත, සංවාද කොටු තැබීමට හෝ පරිශීලක ආදානය ලබා ගැනීමට කේතයක් නොමැත. දර්ශන / පාලකයේ ආදර්ශ කේතයක් නොමැත; URL වලංගු කිරීම හෝ SQL විමසීම් සිදු කිරීම සඳහා කේතයක් නොමැත, සහ මුල් තත්වයක් ද නැත: විජට් සතුව ඇති ඕනෑම දත්ත ප්රදර්ශන අරමුණු සඳහා පමණක් වන අතර එය හුදෙක් ආකෘතියේ ගබඩා කර ඇති සත්ය දත්ත පිළිබිඹු කිරීමකි.
දැන්, සැබෑ MVC සැලසුමක පරීක්ෂණය මෙන්න: දර්ශනය / පාලකය අමුණා නොතිබුණද වැඩසටහන සාරභූතව ක්රියාත්මක විය යුතුය. හරි, බාහිර ලෝකයට එම ස්වරූපයෙන් එය සමඟ අන්තර් ක්රියා කිරීමට අපහසු වනු ඇත, නමුත් යමෙකු සුදුසු ආදර්ශ API ආභාෂය දන්නා තාක් කල්, වැඩසටහන සාමාන්ය පරිදි දත්ත රඳවා තබා ගනී.
මෙය කළ හැක්කේ ඇයි? හොඳයි, සරල පිළිතුර නම්, ඒ සියල්ලම ආදර්ශ සහ දර්ශන / පාලක ස්ථර අතර ඇති අඩු සම්බන්ධතාවයට ස්තූතියි. කෙසේ වෙතත්, මෙය සම්පූර්ණ කතාව නොවේ. සමස්ත එම්වීසී රටාවට යතුර වන්නේ එම සම්බන්ධතාවය ගමන් කරන දිශාවයි : සියලු උපදෙස් දර්ශන / පාලකයේ සිට ආකෘතිය දක්වා ගලා යයි . කළ යුතු දේ කවදාවත් / පාලකවරයාට ආදර්ශය නොකියයි.
මන්ද? MVC හි දී, දර්ශනය / පාලකයට ආකෘතිය ගැන මඳක් දැන ගැනීමට අවසර දී ඇති අතර (විශේෂයෙන්, මාදිලියේ API), නමුත් දර්ශනයට / පාලක ගැන කිසිවක් දැන ගැනීමට මොඩලයට අවසර නැත.
මන්ද? මක්නිසාද යත්, එම්වීසී යනු උත්සුකයන්ගෙන් පැහැදිලි වෙන්වීමක් නිර්මාණය කිරීමයි.
මන්ද? ක්රමලේඛ සංකීර්ණතාව පාලනයෙන් පිටතට යාම වැළැක්වීමට සහ ඒ යටතේ සංවර්ධකයා ඔබව භූමදාන කිරීම. වැඩසටහන විශාල වන තරමට එම වැඩසටහනේ සංරචක ගණන වැඩි වේ. එම සංරචක අතර වැඩි සම්බන්ධතා පවතින අතර, සංවර්ධකයින්ට තනි සංරචක නඩත්තු කිරීම / දීර් extend කිරීම / ප්රතිස්ථාපනය කිරීම දුෂ්කර ය, නැතහොත් සමස්ත පද්ධතියම ක්රියා කරන ආකාරය අනුගමනය කරන්න. ඔබෙන්ම මෙසේ අසන්න: වැඩසටහනේ ව්යුහයේ රූප සටහනක් දෙස බලන විට, ඔබ ගසක් හෝ බළලෙකුගේ තොටිල්ලක් දකින්නේද? MVC රටාව චක්රලේඛ සම්බන්ධතා තහනම් කිරීමෙන් දෙවැන්න වළක්වයි: B ට A හා සම්බන්ධ විය හැකිය, නමුත් A ට B හා සම්බන්ධ විය නොහැක. මේ අවස්ථාවේ දී, A යනු ආදර්ශය වන අතර B යනු දැක්ම / පාලකය වේ.
BTW, ඔබ තියුණු නම්, දැන් විස්තර කර ඇති 'එක්-මාර්ග' සීමාව පිළිබඳ ගැටළුවක් ඔබ දකිනු ඇත: මොඩලයට පවා ඉඩ නොදෙන විට මොඩලයේ පරිශීලක දත්තවල වෙනස්වීම් පිළිබඳ දර්ශනය / පාලකවරයාට මොඩලය දැනුම් දෙන්නේ කෙසේද? දර්ශනය / පාලකය, එයට පණිවිඩ යැවීමට කමක් නැතැයි දන්නවාද? නමුත් කණගාටු නොවන්න: මේ සඳහා විසඳුමක් ඇත, එය මුලින් මඳක් වටරවුමක් ලෙස පෙනුනත් එය පිළිවෙළකට තිබේ. අපි තව මොහොතකින් ඒ වෙත යමු.
ප්රායෝගිකව ගත් කල, දර්ශන / පාලක වස්තුවක්, මොඩලයේ ඒපීඅයි හරහා, 1. මොඩලයට දේවල් කිරීමට (විධාන ක්රියාත්මක කරන්න) කියන්න, සහ 2. ආදර්ශයට එය ලබා දෙන ලෙස පවසන්න (දත්ත ආපසු එවන්න). දර්ශන / පාලක ස්තරය
ආදර්ශ ස්ථරයට උපදෙස් තල්ලු කර ආදර්ශ ස්ථරයෙන් තොරතුරු ඇද ගනී.
ඔබේ පළමු MyCoolListControl උදාහරණය වැරදී ඇත්තේ එතැනිනි, මන්ද එම පංතිය සඳහා ඒපීඅයි වෙත තොරතුරු ඒ
තුළට තල්ලු කළ යුතුය, එබැවින් ඔබ නැවත ස්ථර අතර ද්වි-මාර්ග සම්බන්ධතාවයක් ඇති කර ගැනීමට, එම්වීසී නීති උල්ලං ting නය කරමින් ඔබව නැවත එම ස්ථානයට ඇද දමයි. ඔබ මුලින් අනුමාන කිරීමට උත්සාහ කළ බළලුන්ගේ තොටිල්ලේ ගෘහ නිර්මාණ ශිල්පය.
ඒ වෙනුවට, MyCoolListControl පන්තිය ප්රවාහය සමඟ යා යුතු අතර, එය අවශ්ය විටදී පහත ස්ථරයෙන් අවශ්ය දත්ත ඇද ගනී. ලැයිස්තු විජට් සම්බන්ධයෙන් ගත් කල, එයින් සාමාන්යයෙන් අදහස් වන්නේ කොපමණ අගයන් ඇත්දැයි විමසා පසුව ඒ සෑම අයිතමයක්ම ඉල්ලීමයි, මන්ද එය කළ හැකි සරලම හා ලිහිල්ම ක්රමය වන අතර එම නිසා එහි ඇති සම්බන්ධතාවය අවම මට්ටමක තබා ගනී. එම අගයන් පරිශීලකයාට අකාරාදී පිළිවෙලට ඉදිරිපත් කිරීමට විජට්ට අවශ්ය නම්, එය එහි පරමාදර්ශී ය; ඇත්ත වශයෙන්ම එහි වගකීම.
දැන්, මා කලින් ඉඟි කළ පරිදි, අන්තිම සංසිද්ධියක්: එම්වීසී මත පදනම් වූ පද්ධතියක යූඅයි හි දර්ශනය මොඩලයේ තත්වය සමඟ සමමුහුර්තව තබා ගන්නේ කෙසේද?
මෙන්න ගැටලුව: බොහෝ දර්ශන වස්තූන් රාජ්ය වේ, උදා: පිරික්සුම් කොටුවක් සලකුණු කර හෝ තෝරා නොගත හැක, පෙළ ක්ෂේත්රයක සංස්කරණය කළ හැකි පෙළක් අඩංගු විය හැකිය. කෙසේ වෙතත්, MVC විසින් සියලුම පරිශීලක දත්ත ආදර්ශ ස්ථරයේ ගබඩා කළ යුතු යැයි නියම කරයි, එබැවින් ප්රදර්ශන අරමුණු සඳහා වෙනත් ස්ථර වල ඇති ඕනෑම දත්තයක් (පිරික්සුම් කොටුවේ තත්වය, පෙළ ක්ෂේත්රයේ වත්මන් පෙළ) එම ප්රාථමික ආදර්ශ දත්තවල අනු පිටපතක් විය යුතුය. නමුත් මාදිලියේ තත්වය වෙනස් වුවහොත්, එම තත්වයේ දර්ශනයේ පිටපත තවදුරටත් නිවැරදි නොවන අතර එය නැවුම් කළ යුතුය.
නමුත් කෙසේද? MVC රටාව මඟින් එම තොරතුරු වල නැවුම් පිටපතක් දර්ශන ස්ථරයට තල්ලු කිරීම වළක්වයි. හෙක්, එය එහි තත්වය වෙනස් වී ඇති බව පැවසීමට දර්ශනයට පණිවිඩයක් යැවීමට මොඩලයට ඉඩ නොදේ.
හොඳයි, පාහේ. හරි, ආදර්ශ ස්ථරයට වෙනත් ස්ථර සමඟ කෙලින්ම කථා කිරීමට ඉඩ නොදේ, එසේ කිරීමට නම් එම ස්ථර ගැන යමක් දැන ගැනීමට අවශ්ය වන අතර MVC නීති එය වළක්වයි. කෙසේ වෙතත්, වනාන්තරයක ගසක් කඩා වැටී එය ඇසීමට කිසිවෙකු නොසිටින්නේ නම්, එය ශබ්දයක් කරයිද?
පිළිතුර, ඔබට පෙනෙන පරිදි, දැනුම්දීම් පද්ධතියක් සැකසීම, ආදර්ශ ස්ථරයට එය කිසිවෙකුට ප්රකාශ කළ හැකි ස්ථානයක් ලබා දීම, විශේෂයෙන් එය සිත්ගන්නා සුළු දෙයක් කර ඇති බව. වෙනත් ස්ථරවලට සවන්දෙන්නන්ට එම දැනුම්දීම් පද්ධතිය සමඟ ඔවුන් සැබවින්ම උනන්දුවක් දක්වන එම නිවේදනවලට සවන්දිය හැකිය. ආදර්ශ ස්ථරයට සවන් දෙන්නේ කවුරුන්ද යන්න ගැන කිසිවක් දැන ගැනීමට අවශ්ය නැත (හෝ කිසිවෙකු සවන් දුන්නද!); එය නිවේදනයක් පළ කර එය අමතක කරයි. යමෙකු එම නිවේදනය අසා පසුව යමක් කිරීමට කැමති යැයි හැඟේ නම් - මොඩලය නව දත්ත කිහිපයක් ඉල්ලා සිටීම වැනි දෙයක් වන අතර එමඟින් එහි තිරයේ දර්ශනය යාවත්කාලීන කළ හැකිය. මාදිලිය එහි API අර්ථ දැක්වීමේ කොටසක් ලෙස යවන දැනුම්දීම් ලැයිස්තුගත කරයි; එම දැනුමෙන් වෙනත් අය කරන දේ ඔවුන් සතු ය.
MVC සංරක්ෂණය කර ඇති අතර, සෑම කෙනෙකුම සතුටු වේ. ඔබගේ යෙදුම් රාමුව තුළ නිමැවුම් දැනුම්දීම් පද්ධතියක් සැපයිය හැකිය, නැතහොත් ඔබට ඔබේම දෑ ලිවිය හැකිය ('නිරීක්ෂක රටාව' බලන්න).
...
කෙසේ වෙතත්, එය උපකාරවත් වන බලාපොරොත්තුව. බැලූ බැල්මට - ඒවා අවශ්යතාවයට වඩා සංකීර්ණ බවක් පෙනෙන්නට තිබුණත්, එම්වීසී පිටුපස ඇති අභිප්රේරණයන් තේරුම් ගත් පසු, දේවල් සිදු වන ආකාරයටම ඒවා අර්ථවත් වීමට පටන් ගනී.
චියර්ස්,
ඇත