Mvvm pattern එක සරලව
මම අද කියල දෙන්නේ mvvm (model-view-viewmodel) basics ටිකක්.
programming කරන අය දන්නව ඇති app එකක code ලියද්දි හොද පැහැදිලි plan එකක් තියෙන්න ඕන කියල .. Windows app ලියද්දි භාවිතා කරන බොහොම ප්රසිද්ද pattern එක mvvm pattern එක ... ඉතින් මොකද්ද මේ mvvm pattern එක ..
සැලකිය යුතුය්:= මම හිතනවා ඔබට windows programming/ c# ගැන මුලික දැනුමක් තිබේ කියා ..
මෙතැනදී මුලික කරුණු 3ක් තියෙනවා .
1.model
2.viewmodel
3.view
ඒවගේම 4 හැටියට services ගන්න පුළුවන් .
model
මේක තමා අපේ business object එක .. අපි හිතමු අපේ app එක contact app එකක් කියල .. එතකොට මේකේ model එක හැටියට අපිට පුළුවන් contact object එකක් සලකන්න .. එකද තතියෙන්න පුළුවන් Name,Number වගේ properties..
view
view එක කියන්නේ අපේ app එකේ page එකක් ,, නැත්නම් window එකක් ..
මෙතැනදී මෙයාගේ code behind file එක තිඑන්න පුළුවන් visuals සම්බන්ද code විතරය්.. business Logic තියෙන්න බෑ. මොකද mvvm pattern එක මූලධර්මයක් තමා view එක model එක ගැන මොනවත් දැනගන්න බෑ කියන එක ..
viewmodel
මේක තමා view එක හා model එක අතර ඉදගෙන එදෙක අතර ගනුදෙනු කරන්නේ . හරියට සමාදාන විනිශ්චයකාරයෙක් වගේ. මොකද view එක කැමති නෑ කෙලින්ම model එක ගැන දන ගන්න.. ඇත්තටම කිව්වොත් view එක දන්නේ නෑ model එකේ තියෙන දෙවෙල් කොහොමද පාවිච්චි කරන්නේ කියල. viewmodel එක තමා දන්නේ model එකේ තියෙන දේවල් අරගෙන view එකට තේරෙන විදියට සකස් කරන්න ..
හිතන්න view එකට ඕන contact එකක් user ට පෙන්නන..හැබය් view එක දන්නේ නෑ contact එක කොහෙද තියෙන්නෙ , එකේ propertys මොනාද කියල ... දැන් තමා viewmodel එක වැඩ පෙන්නන්නේ.. viewmodel එක view එකට අවශ්ය contact එක තියෙන තැනකින් (database හෝ web service) අරගෙන එකේ තියෙන propertys view එකට තේරෙන විදියට සකස් කරනවා . නැත්නම් view එකට ලබාගන්න පුළුවන් විදියට එකේ properties expose කරනවා..
ඒවගේම අපි හිතමු user contact එකක් edit කරලා save කර කියල .view එක දන්නේ නෑ මේක කොහොමද කරන්නේ කියල ..නමුත් viewmodel එක දන්නවා . ඉතින් view එක viewmodel එකට කියනව මෙන්න මේ contact එක save කරන්න ,,කරලා එකේ සාර්ථකත්වය ගැන මට කියන්න කියල .
මෙතනදී තවත් දෙයක් මතක තියන්න ඕන මම උඩ expose කියන වචනය භාවිටකරේ හේතුවක් ඇතිව .. මොකද mvvm pattern එකේ තියෙන තවත් මුලධර්මයක් තමා viewmodel එක view එක ගැන මුකුත් දන්නේ නෑ කියන එක .නමුත් එක ප්රශ්නයක් වෙන්නේ නෑ ,, මොකද view එක දැනගන්න ඕන තමන්ට අවශ්ය viewmodel එක හොයාගන්න . ඒවගේම තමි view එක viewmodel එකට කතාකරන්න යොදාගන්නේ commands..(ICommand interface එක implement කරන classes).
මේ විදියට අපිට මොනාද viewmodel එකක ඇතුලත් කරන්න ඕන.. හරිවිදියටම pattern එක අනුගමනය කරනවානම් view එක visuals වලට අදාළ දේවල් හැර අනෙක් සැම දේම viewmodel එකෙක් තියෙන්න ඕන ,,(data ,commands ආදිය)..
services
services කියන්නෙ viewmodel ගේ වැඩ වලට උදව් දෙන කෙනෙක්. ඒ කියන්නේ viewmodel ට කරන්න ඕනෑතරම් වැඩ තියෙන නිසා සමහර දේවල් වලට (උදා:- database එකක් හා සම්ම්බනද දේවල් ,, file එකක් open කිරීම ) අවධානය යොමු කරන්න එයාට බෑ. එක හින්ද ඒවගේ දේවල් වල logic අපි වෙනම තැනක තියෙනවා..(abstraction) මේවට තමි services කියන්නේ.. අපි services හදන කොට හැමවෙලාවෙම පුළුවන් තරම් උත්සහ කන්න ඕන ඒවා dynamic විදියට එනම් viewmodel එකක් මත යැපෙන්නේ නැති විදියට ඒවා හදන්න .. එතකොට අපිට පුළුවන් මේ service viewmodel හැම එකේම පාවිච්චි කරන්න.
ඉතින් මේව තමි mvvm basics
,, ඉතින් අපි ඇත්තටම මොකටද මේ pattern එක අනුගමනය කරන්න ඕන?? ..
මේ pattern එක අනුගමනය කරාම අපිට පුළුවන් අපේ visuals හා business logic වෙන් කරන්න (Seperation of Concerns).එක බොහොම වැදගත් දෙයක්. මොකද developers ල ගොඩක් ඉන්න group එකක් නම් ,, කට්ටියකට පුළුවන් වෙනම visuals ගැන වැඩ කරන්න , අනිත් අයට පුළුවන් logic ගැන වැඩ කරන්න .. මොකද මේ දෙගොල්ලෝ එකිනෙකා මත යැපෙන්නේ නෑ .. group එකකට විතරක් නෙමෙය් තනි developer කෙනෙකුට උනත් මේ pattern එක අනුගමනය කරන එක ගොඩක් වැදගත්.. එතකොට app එකක් හදද්දී අපිට එන ගොඩක් ගැටළු එබෙම විසදෙනවා ..අපිට අපේ business logic check කරන්න UI එක ඕන නෑ .. මොකද අපිට පුළුවන් අපේ viewmodel එක unit test වලට භාජනය කරන්න .. ඉතින් මෙක බොහොම වටින දෙයක්..
ගොඩක් අය කියනවා mvvm pattern එක අමාරු දෙයක් කියල . හැබය් මූලධර්ම හරියට අවබෝධ කර ගත්තොත් එක හරිම ලේසි fun දෙයක්
..
ඉතින් මෙටික තමා අදට ..ඉදිරියේදී මම c# code වලිනුත් මේක තව පැහැදිලි කන්නනම්,,, තවත් article එකකින් හමුවෙමු.. මේකේ වැරදි මොනාහරි තියෙනවනම්
ඒවා comment කරන්න,,
මම අද කියල දෙන්නේ mvvm (model-view-viewmodel) basics ටිකක්.
programming කරන අය දන්නව ඇති app එකක code ලියද්දි හොද පැහැදිලි plan එකක් තියෙන්න ඕන කියල .. Windows app ලියද්දි භාවිතා කරන බොහොම ප්රසිද්ද pattern එක mvvm pattern එක ... ඉතින් මොකද්ද මේ mvvm pattern එක ..
සැලකිය යුතුය්:= මම හිතනවා ඔබට windows programming/ c# ගැන මුලික දැනුමක් තිබේ කියා ..
මෙතැනදී මුලික කරුණු 3ක් තියෙනවා .
1.model
2.viewmodel
3.view
ඒවගේම 4 හැටියට services ගන්න පුළුවන් .
model
මේක තමා අපේ business object එක .. අපි හිතමු අපේ app එක contact app එකක් කියල .. එතකොට මේකේ model එක හැටියට අපිට පුළුවන් contact object එකක් සලකන්න .. එකද තතියෙන්න පුළුවන් Name,Number වගේ properties..
view
view එක කියන්නේ අපේ app එකේ page එකක් ,, නැත්නම් window එකක් ..
මෙතැනදී මෙයාගේ code behind file එක තිඑන්න පුළුවන් visuals සම්බන්ද code විතරය්.. business Logic තියෙන්න බෑ. මොකද mvvm pattern එක මූලධර්මයක් තමා view එක model එක ගැන මොනවත් දැනගන්න බෑ කියන එක ..
viewmodel
මේක තමා view එක හා model එක අතර ඉදගෙන එදෙක අතර ගනුදෙනු කරන්නේ . හරියට සමාදාන විනිශ්චයකාරයෙක් වගේ. මොකද view එක කැමති නෑ කෙලින්ම model එක ගැන දන ගන්න.. ඇත්තටම කිව්වොත් view එක දන්නේ නෑ model එකේ තියෙන දෙවෙල් කොහොමද පාවිච්චි කරන්නේ කියල. viewmodel එක තමා දන්නේ model එකේ තියෙන දේවල් අරගෙන view එකට තේරෙන විදියට සකස් කරන්න ..
හිතන්න view එකට ඕන contact එකක් user ට පෙන්නන..හැබය් view එක දන්නේ නෑ contact එක කොහෙද තියෙන්නෙ , එකේ propertys මොනාද කියල ... දැන් තමා viewmodel එක වැඩ පෙන්නන්නේ.. viewmodel එක view එකට අවශ්ය contact එක තියෙන තැනකින් (database හෝ web service) අරගෙන එකේ තියෙන propertys view එකට තේරෙන විදියට සකස් කරනවා . නැත්නම් view එකට ලබාගන්න පුළුවන් විදියට එකේ properties expose කරනවා..
ඒවගේම අපි හිතමු user contact එකක් edit කරලා save කර කියල .view එක දන්නේ නෑ මේක කොහොමද කරන්නේ කියල ..නමුත් viewmodel එක දන්නවා . ඉතින් view එක viewmodel එකට කියනව මෙන්න මේ contact එක save කරන්න ,,කරලා එකේ සාර්ථකත්වය ගැන මට කියන්න කියල .
මෙතනදී තවත් දෙයක් මතක තියන්න ඕන මම උඩ expose කියන වචනය භාවිටකරේ හේතුවක් ඇතිව .. මොකද mvvm pattern එකේ තියෙන තවත් මුලධර්මයක් තමා viewmodel එක view එක ගැන මුකුත් දන්නේ නෑ කියන එක .නමුත් එක ප්රශ්නයක් වෙන්නේ නෑ ,, මොකද view එක දැනගන්න ඕන තමන්ට අවශ්ය viewmodel එක හොයාගන්න . ඒවගේම තමි view එක viewmodel එකට කතාකරන්න යොදාගන්නේ commands..(ICommand interface එක implement කරන classes).
මේ විදියට අපිට මොනාද viewmodel එකක ඇතුලත් කරන්න ඕන.. හරිවිදියටම pattern එක අනුගමනය කරනවානම් view එක visuals වලට අදාළ දේවල් හැර අනෙක් සැම දේම viewmodel එකෙක් තියෙන්න ඕන ,,(data ,commands ආදිය)..
services
services කියන්නෙ viewmodel ගේ වැඩ වලට උදව් දෙන කෙනෙක්. ඒ කියන්නේ viewmodel ට කරන්න ඕනෑතරම් වැඩ තියෙන නිසා සමහර දේවල් වලට (උදා:- database එකක් හා සම්ම්බනද දේවල් ,, file එකක් open කිරීම ) අවධානය යොමු කරන්න එයාට බෑ. එක හින්ද ඒවගේ දේවල් වල logic අපි වෙනම තැනක තියෙනවා..(abstraction) මේවට තමි services කියන්නේ.. අපි services හදන කොට හැමවෙලාවෙම පුළුවන් තරම් උත්සහ කන්න ඕන ඒවා dynamic විදියට එනම් viewmodel එකක් මත යැපෙන්නේ නැති විදියට ඒවා හදන්න .. එතකොට අපිට පුළුවන් මේ service viewmodel හැම එකේම පාවිච්චි කරන්න.
ඉතින් මේව තමි mvvm basics

,, ඉතින් අපි ඇත්තටම මොකටද මේ pattern එක අනුගමනය කරන්න ඕන?? ..මේ pattern එක අනුගමනය කරාම අපිට පුළුවන් අපේ visuals හා business logic වෙන් කරන්න (Seperation of Concerns).එක බොහොම වැදගත් දෙයක්. මොකද developers ල ගොඩක් ඉන්න group එකක් නම් ,, කට්ටියකට පුළුවන් වෙනම visuals ගැන වැඩ කරන්න , අනිත් අයට පුළුවන් logic ගැන වැඩ කරන්න .. මොකද මේ දෙගොල්ලෝ එකිනෙකා මත යැපෙන්නේ නෑ .. group එකකට විතරක් නෙමෙය් තනි developer කෙනෙකුට උනත් මේ pattern එක අනුගමනය කරන එක ගොඩක් වැදගත්.. එතකොට app එකක් හදද්දී අපිට එන ගොඩක් ගැටළු එබෙම විසදෙනවා ..අපිට අපේ business logic check කරන්න UI එක ඕන නෑ .. මොකද අපිට පුළුවන් අපේ viewmodel එක unit test වලට භාජනය කරන්න .. ඉතින් මෙක බොහොම වටින දෙයක්..
ගොඩක් අය කියනවා mvvm pattern එක අමාරු දෙයක් කියල . හැබය් මූලධර්ම හරියට අවබෝධ කර ගත්තොත් එක හරිම ලේසි fun දෙයක්

..ඉතින් මෙටික තමා අදට ..ඉදිරියේදී මම c# code වලිනුත් මේක තව පැහැදිලි කන්නනම්,,, තවත් article එකකින් හමුවෙමු.. මේකේ වැරදි මොනාහරි තියෙනවනම්
ඒවා comment කරන්න,,
Last edited:
Assignment brief එකේමයි එහෙම තිබ්බේ කරන්න කියලා. අනේ මන්දා. පෙර කියූ පරිදි මාගේ දැනුම සීමිතය.. 

