Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ǰ¶Ë¿ò¼ÜMVVMÊÇʲô£¨ÕûÀí£©
 
×÷Õߣº ·¶ÈÊÒå
 
  3272  次浏览      28
 2020-6-1
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËvm²ã£¨ÊÓͼģÐͲ㣩ͨ¹ý½Ó¿Ú´Óºǫ́m²ã£¨model²ã£©ÇëÇóÊý¾Ý£¬vm²ã¼Ì¶øºÍv£¨view²ã£©ÊµÏÖÊý¾ÝµÄË«Ïò°ó¶¨¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­ÍƼö¡£

Ò»¡¢×ܽᣨµã»÷ÏÔʾ»òÒþ²Ø×ܽáÄÚÈÝ£©

1¡¢ÎÒ´óǰ¶ËÓ¦¸Ã²»Ó¦¸Ã×ö¸´ÔÓµÄÊý¾Ý´¦ÀíµÄ¹¤×÷£¿

²»Ó¦¸Ã

Ö»Òªºó¶Ë±£Ö¤¶ÔÍâ½Ó¿Ú×ã¹»¼òµ¥¾ÍÐÐÁË£¬ÎÒÇëÇóapi£¬Äã°ÑÊý¾Ý·µ³öÀ´£¬ÔÛÁ©¾ÍÕâµã¹ØÏµ£¬ÆäËû¶¼³¶µ­¡£

ºó¶Ë£ºÎÒÃÇÕâÀïµÄÒµÎñÂß¼­ºÍÊý¾Ý´¦Àí»á·Ç³£¸´ÔÓ£¡

ǰ¶Ë£º¹ØÎÒÆ¨Ê£¡

ºó¶ËÒµÎñ´¦ÀíÔÙ¸´ÔÓ¸úÎÒÃÇǰ¶ËҲûÓаëëǮ¹ØÏµ£¬Ö»Òªºó¶Ë±£Ö¤¶ÔÍâ½Ó¿Ú×ã¹»¼òµ¥¾ÍÐÐÁË£¬ÎÒÇëÇóapi£¬Äã°ÑÊý¾Ý·µ³öÀ´£¬ÔÛÁ©¾ÍÕâµã¹ØÏµ£¬ÆäËû¶¼³¶µ­¡£

ËùÒÔÎÒÕâ±ß¿ª·¢Ò²ÊÇͬÑùµÄ£¬Ç°¶Ë¾Í¸ºÔðÇëÇóapi¾ÍºÃ£¬±ðµÄ¶¼²»ÐèÒª¡£

2¡¢mvcºÍmvvmµÄ¹ØÏµ£¿

¸Ä½ø°æ

Êý¾Ý·ÖÀë

ÊÓͼģÐͲã

c£¨¿ØÖƲ㣩±»»»³ÉÁËvm£¨viewmodel£©²ã

MVVMÊÇModel-View-ViewModelµÄ¼òд¡£Ëü±¾ÖÊÉϾÍÊÇMVC µÄ¸Ä½ø°æ¡£

mvvm²ãʵÏÖÁËǰºó¶Ë¸üºÃµÄ·ÖÀ루ǰ¶ËÐèÒªµÄÊý¾ÝÖ»ÐèÒªÇëÇóºó¶ËµÄ½Ó¿Ú¼´¿É£©

3¡¢MVVM¿ò¼Ü±àÂëʵÀý£¿

³¶ÁËÕâô¶à£¬²¢Ã»ÓÐʲôÂÑÓá£Ç§ÑÔÍòÓï²»ÈçÒ»¸öÀõ×ÓÀ´µÄ¸É´à£¬ÏÂÃæÓÃÒ»¸ö Vue ʵÀýÀ´ËµÃ÷ MVVM µÄ¾ßÌå±íÏÖ¡£

Vue µÄ View Ä£°å£º

<div id="app">
<p>{{message}}</p>
<button v-on:click="showMessage()">Click me</button>
</div>

Vue µÄ ViewModel ²ã£¨ÏÂÃæÊÇα´úÂ룩£º

var app = new Vue({
el: '#app',
data: { // ÓÃÓÚÃèÊöÊÓͼ״̬£¨ÓлùÓÚ Model ²ãÊý¾Ý¶¨ÒåµÄ£¬Ò²Óд¿Ç°¶Ë¶¨Ò壩
message: 'Hello Vue!', // ´¿Ç°¶Ë¶¨Òå
server: {}, // ´æ·Å»ùÓÚ Model ²ãÊý¾ÝµÄ¶þ´Î·â×°Êý¾Ý
},
methods: { // ÓÃÓÚÃèÊöÊÓͼÐÐΪ£¨Íêȫǰ¶Ë¶¨Ò壩
showMessage(){
let vm = this;
alert(vm.message);
}
},
created(){
let vm = this;
// Ajax »ñÈ¡ Model ²ãµÄÊý¾Ý
ajax({
url: '/your/server/data/api',
success(res){
// TODO ¶Ô»ñÈ¡µ½µÄ Model Êý¾Ý½øÐÐת»»´¦Àí£¬×ö¶þ´Î·â×°
vm.server = res;
}
});
}
})

·þÎñ¶ËµÄ Model ²ã£¨Ê¡ÂÔÒµÎñÂß¼­´¦Àí£¬Ö»ÃèÊö¶ÔÍâ½Ó¿Ú£©£º

{
"url": "/your/server/data/api",
"res": {
"success": true,
"name": "IoveC",
"domain": "www.cnblogs.com"
}
}

Õâ¾ÍÊÇÍêÕûµÄ MVVM ±à³Ìģʽ¡£

4¡¢Ç°¶Ë¿ò¼ÜMVVM³öÏÖµÄ×î´óÒâÒåÊÇʲô£¿

¿ª·¢Ð§ÂÊ

ǰºó¶Ë ÒµÎñÂß¼­ ·ÖÀë

½Ó¿Ú

MVVM µÄ³öÏÖ´Ù½øÁË GUI ǰ¶Ë¿ª·¢Óëºó¶ËÒµÎñÂß¼­µÄ·ÖÀ룬¼«´óµØÌá¸ßÁËǰ¶Ë¿ª·¢Ð§ÂÊ¡£

MVVMÓýӿÚʵÏÖÁËǰºó¶ËÊý¾ÝµÄͨÐÅ£¬ÕâÑù¿ÉÒÔʹǰºó¶ËÖ®¼äµÄÒµÎñÂß¼­Ã»ÓÐʲô¹ØÏµ¡£

MVVMÔڸоõÉÏÒª±Èmvcģʽǰºó¶ËÒª·ÖµÄ¸ü¿ª

5¡¢Ó¦ÓÃMVVM¿ò¼ÜµÄvue.js¿ò¼ÜµÄ×îÖ÷Òª×÷ÓÃÊÇʲô£¿

Ë«ÏòÊý¾Ý°ó¶¨

ǰ¶Ë”µ“þµÄ½yÒ»

ǰ¶Ë”µ“þµÄ½yÒ»£ºÇ°¶ËÓ¦ÓÃÏàͬÊý¾ÝµÄλÖÃʵÏÖÁËÊý¾ÝµÄͳһ

Ë«ÏòÊý¾Ý°ó¶¨£º½‰¶¨ºóvueºÃdom”µ“þ±£³Ö½yÒ»£¬Ò»„ÓÈ«„Ó£¬ÊÇǰ¶ËµÄ

Ë«ÏòÊý¾Ý°ó¶¨ÖеÄÁ½Ïò·Ö±ðΪ viewºÍviewmodel¡£

6¡¢Ç°¶Ë¿ò¼ÜMVVMÖеÄvm²ãÊǸÉÂïµÄ£¿

״̬ ÐÐΪ

DOM²Ù×÷

ViewModel ÊÇÓÉǰ¶Ë¿ª·¢ÈËÔ±×éÖ¯Éú³ÉºÍά»¤µÄÊÓͼÊý¾Ý²ã¡£ÔÚÕâÒ»²ã£¬Ç°¶Ë¿ª·¢Õß¶Ô´Óºó¶Ë»ñÈ¡µÄ Model Êý¾Ý½øÐÐת»»´¦Àí£¬×ö¶þ´Î·â×°£¬ÒÔÉú³É·ûºÏ View ²ãʹÓÃÔ¤ÆÚµÄÊÓͼÊý¾ÝÄ£ÐÍ¡£ÐèҪעÒâµÄÊÇ ViewModel Ëù·â×°³öÀ´µÄÊý¾ÝÄ£ÐͰüÀ¨ÊÓͼµÄ״̬ºÍÐÐΪÁ½²¿·Ö£¬¶ø Model ²ãµÄÊý¾ÝÄ£ÐÍÊÇÖ»°üº¬×´Ì¬µÄ£¬±ÈÈçÒ³ÃæµÄÕâÒ»¿éչʾʲô£¬ÄÇÒ»¿éչʾʲôÕâЩ¶¼ÊôÓÚÊÓͼ״̬£¨Õ¹Ê¾£©£¬¶øÒ³Ãæ¼ÓÔØ½øÀ´Ê±·¢Éúʲô£¬µã»÷ÕâÒ»¿é·¢Éúʲô£¬ÕâÒ»¿é¹ö¶¯Ê±·¢ÉúʲôÕâЩ¶¼ÊôÓÚÊÓͼÐÐΪ£¨½»»¥£©£¬ÊÓͼ״̬ºÍÐÐΪ¶¼·â×°ÔÚÁË ViewModel Àï¡£ÕâÑùµÄ·âװʹµÃ ViewModel ¿ÉÒÔÍêÕûµØÈ¥ÃèÊö View ²ã¡£ÓÉÓÚʵÏÖÁËË«Ïò°ó¶¨£¬ViewModel µÄÄÚÈÝ»áʵʱչÏÖÔÚ View ²ã£¬ÕâÊǼ¤¶¯ÈËÐĵģ¬ÒòΪǰ¶Ë¿ª·¢ÕßÔÙÒ²²»±ØµÍЧÓÖÂé·³µØÍ¨¹ý²Ù×Ý DOM È¥¸üÐÂÊÓͼ£¬MVVM ¿ò¼ÜÒѾ­°Ñ×îÔà×îÀÛµÄÒ»¿é×öºÃÁË£¬ÎÒÃÇ¿ª·¢ÕßÖ»ÐèÒª´¦ÀíºÍά»¤ ViewModel£¬¸üÐÂÊý¾ÝÊÓͼ¾Í»á×Ô¶¯µÃµ½ÏàÓ¦¸üУ¬ÕæÕýʵÏÖÊý¾ÝÇý¶¯¿ª·¢¡£¿´µ½Á˰ɣ¬View ²ãÕ¹ÏֵIJ»ÊÇ Model ²ãµÄÊý¾Ý£¬¶øÊÇ ViewModel µÄÊý¾Ý£¬ÓÉ ViewModel ¸ºÔðÓë Model ²ã½»»¥£¬Õâ¾ÍÍêÈ«½âñîÁË View ²ãºÍ Model ²ã£¬Õâ¸ö½âñîÊÇÖÁ¹ØÖØÒªµÄ£¬ËüÊÇǰºó¶Ë·ÖÀë·½°¸ÊµÊ©µÄÖØÒªÒ»»·¡£

ViewÒ»°ã¾ÍÊÇÎÒÃÇÆ½³£ËµµÄHTMLÎı¾µÄJsÄ£°å£¬ÀïÃæ¿ÉÒÔǶÈëһЩjsÄ£°åµÄ´úÂ룬±ÈÈçMustache£¬±ÈÈçjstlÀàËÆµÄÄ£°åα´úÂë

ViewModule²ãÀïÃæ¾ÍÊÇÎÒÃǶÔÓÚÕâ¸öÊÓÍ¼ÇøÓòµÄÒ»ÇÐjs¿ÉÊÓÒµÎñÂß¼­£¬¾Ù¸öÀý×Ó£¬±ÈÈçͼƬ×ßÂíµÆÌØÐ§£¬±ÈÈç±íµ¥°´Å¥µã»÷Ìá½»£¬ÕâЩ×Ô¶¨ÒåʼþµÄ×¢²áºÍ´¦ÀíÂß¼­¶¼Ð´ÔÚViewModuleÀïÃæÁË

Module¾Í¸ü¼òµ¥ÁË£¬¾ÍÊǶÔÓÚ´¿Êý¾ÝµÄ´¦Àí£¬±ÈÈçÔöɾ¸Ä²é£¬Óëºǫ́CGI×ö½»»¥

7¡¢MVVM×îÖ÷ÒªµÄÌØÕ÷ÊÇʲô£¿

ǰºó¶Ë·ÖÀë

ǰºó¶Ë·ÖÊÖ´óʦ¡ª¡ªMVVM ģʽ

»òÕß˵ǰºó¶Ë¸üºÃµÄ·ÖÀ루½Ó¿ÚÀ´ÊµÏÖǰºó¶ËµÄͨÐÅ£©

¶þ¡¢MVVM°Ù¶È°Ù¿Æ

MVVMÊÇModel-View-ViewModelµÄ¼òд¡£Ëü±¾ÖÊÉϾÍÊÇMVC µÄ¸Ä½ø°æ¡£MVVM ¾ÍÊǽ«ÆäÖеÄView µÄ״̬ºÍÐÐΪ³éÏ󻯣¬ÈÃÎÒÃǽ«ÊÓͼ UI ºÍÒµÎñÂß¼­·Ö¿ª¡£µ±È»ÕâЩÊ ViewModel ÒѾ­°ïÎÒÃÇ×öÁË£¬Ëü¿ÉÒÔÈ¡³ö Model µÄÊý¾Ýͬʱ°ïæ´¦Àí View ÖÐÓÉÓÚÐèҪչʾÄÚÈݶøÉæ¼°µÄÒµÎñÂß¼­¡£Î¢ÈíµÄWPF´øÀ´ÁËеļ¼ÊõÌåÑ飬ÈçSilverlight¡¢ÒôƵ¡¢ÊÓÆµ¡¢3D¡¢¶¯»­¡­¡­£¬Õâµ¼ÖÂÁËÈí¼þUI²ã¸ü¼Óϸ½Ú»¯¡¢¿É¶¨ÖÆ»¯¡£Í¬Ê±£¬ÔÚ¼¼Êõ²ãÃæ£¬WPFÒ²´øÀ´ÁË ÖîÈçBinding¡¢Dependency Property¡¢Routed Events¡¢Command¡¢DataTemplate¡¢ControlTemplateµÈÐÂÌØÐÔ¡£MVVM£¨Model-View-ViewModel£©¿ò¼ÜµÄÓÉÀ´±ãÊÇMVP£¨Model-View-Presenter£©Ä£Ê½ÓëWPF½áºÏµÄÓ¦Ó÷½Ê½Ê±·¢Õ¹Ñݱä¹ýÀ´µÄÒ»ÖÖÐÂÐͼܹ¹¿ò¼Ü¡£ËüÁ¢×ãÓÚÔ­ÓÐMVP¿ò¼Ü²¢ÇÒ°ÑWPFµÄÐÂÌØÐÔôۺϽøÈ¥£¬ÒÔÓ¦¶Ô¿Í»§ÈÕÒæ¸´ÔÓµÄÐèÇó±ä»¯¡£

ÍâÎÄÃû

Model-View-ViewModel

¼ò ³Æ

MVVM

Àý Èç

Silverlight¡¢ÒôƵ

Á¥ Êô

΢Èí

MVVMÓŵã

µÍñîºÏ ¿ÉÖØÓÃÐÔ

Èý¡¢Ç°ºó¶Ë·ÖÊÖ´óʦ¡ª¡ªMVVM ģʽ£¨×ª£©

ת×Ô£ºÇ°ºó¶Ë·ÖÊÖ´óʦ¡ª¡ªMVVM ģʽ - DOM¸ç - ²©¿ÍÔ°

¼ò¶øÑÔÖ®

֮ǰ¶Ô MVVM ģʽһֱֻÊÇģģºýºýµÄÈÏʶ£¬ÕýËùνûÓÐʵ¼ù¾ÍûÓз¢ÑÔȨ£¬Í¨¹ýÕâÁ½Äê¶Ô Vue ¿ò¼ÜµÄÉîÈëѧϰºÍÏîĿʵ¼ù£¬ÖÕÓÚ¿ÉÒÔ×°BÁËÓÐÁ˲¦¿ªÔÆÎí¼ûÔÂÃ÷µÄ¸Ð¾õ¡£

Model¨CView¨CViewModel(MVVM) ÊÇÒ»¸öÈí¼þ¼Ü¹¹Éè¼ÆÄ£Ê½£¬ÓÉ΢Èí WPF ºÍ Silverlight µÄ¼Ü¹¹Ê¦ Ken Cooper ºÍ Ted Peters ¿ª·¢£¬ÊÇÒ»ÖÖ¼ò»¯Óû§½çÃæµÄʼþÇý¶¯±à³Ì·½Ê½¡£ÓÉ John Gossman£¨Í¬ÑùÒ²ÊÇ WPF ºÍ Silverlight µÄ¼Ü¹¹Ê¦£©ÓÚ2005ÄêÔÚËûµÄ²©¿ÍÉÏ·¢±í¡£

MVVM Ô´×ÔÓÚ¾­µäµÄ Model¨CView¨CController£¨MVC£©Ä£Ê½£¨ÆÚ¼ä»¹ÑÝ»¯³öÁË Model-View-Presenter£¨MVP£©Ä£Ê½£¬¿ÉºöÂÔ²»¼Æ£©¡£MVVM µÄ³öÏÖ´Ù½øÁË GUI ǰ¶Ë¿ª·¢Óëºó¶ËÒµÎñÂß¼­µÄ·ÖÀ룬¼«´óµØÌá¸ßÁËǰ¶Ë¿ª·¢Ð§ÂÊ¡£MVVM µÄºËÐÄÊÇ ViewModel ²ã£¬Ëü¾ÍÏñÊÇÒ»¸öÖÐתվ£¨value converter£©£¬¸ºÔðת»» Model ÖеÄÊý¾Ý¶ÔÏóÀ´ÈÃÊý¾Ý±äµÃ¸üÈÝÒ×¹ÜÀíºÍʹÓ㬸òãÏòÉÏÓëÊÓͼ²ã½øÐÐË«ÏòÊý¾Ý°ó¶¨£¬ÏòÏÂÓë Model ²ãͨ¹ý½Ó¿ÚÇëÇó½øÐÐÊý¾Ý½»»¥£¬Æð³ÊÉÏÆôÏÂ×÷Óá£ÈçÏÂͼËùʾ£º

MVVMģʽ

MVVM ÒѾ­Ï൱³ÉÊìÁË£¬Ö÷ÒªÔËÓõ«²»½ö½öÔÚÍøÂçÓ¦ÓóÌÐò¿ª·¢ÖС£KnockoutJS ÊÇ×îÔçʵÏÖ MVVM ģʽµÄǰ¶Ë¿ò¼ÜÖ®Ò»£¬µ±ÏÂÁ÷ÐÐµÄ MVVM ¿ò¼ÜÓÐ Vue£¬Angular µÈ¡£

×é³É²¿·Ö

¼òµ¥»­ÁËÒ»ÕÅͼÀ´ËµÃ÷ MVVM µÄ¸÷¸ö×é³É²¿·Ö£º

MVVM·Ö²ãʾÒâͼ

·Ö²ãÉè¼ÆÒ»Ö±ÊÇÈí¼þ¼Ü¹¹µÄÖ÷Á÷Éè¼ÆË¼ÏëÖ®Ò»£¬MVVM Ò²²»ÀýÍâ¡£

# View ²ã

View ÊÇÊÓͼ²ã£¬Ò²¾ÍÊÇÓû§½çÃæ¡£Ç°¶ËÖ÷ÒªÓÉ HTML ºÍ CSS À´¹¹½¨£¬ÎªÁ˸ü·½±ãµØÕ¹ÏÖ ViewModel »òÕß Model ²ãµÄÊý¾Ý£¬ÒѾ­²úÉúÁ˸÷ÖÖ¸÷ÑùµÄǰºó¶ËÄ£°åÓïÑÔ£¬±ÈÈç FreeMarker¡¢Marko¡¢Pug¡¢Jinja2µÈµÈ£¬¸÷´ó MVVM ¿ò¼ÜÈç KnockoutJS£¬Vue£¬Angular µÈÒ²¶¼ÓÐ×Ô¼ºÓÃÀ´¹¹½¨Óû§½çÃæµÄÄÚÖÃÄ£°åÓïÑÔ¡£

# Model ²ã

Model ÊÇÖ¸Êý¾ÝÄ£ÐÍ£¬·ºÖ¸ºó¶Ë½øÐеĸ÷ÖÖÒµÎñÂß¼­´¦ÀíºÍÊý¾Ý²Ù¿Ø£¬Ö÷ÒªÎ§ÈÆÊý¾Ý¿âϵͳչ¿ª¡£ºó¶ËµÄ´¦Àíͨ³£»á·Ç³£¸´ÔÓ£º

ǰºó¶Ë¶Ô±È

ºó¶Ë£ºÎÒÃÇÕâÀïµÄÒµÎñÂß¼­ºÍÊý¾Ý´¦Àí»á·Ç³£¸´ÔÓ£¡

ǰ¶Ë£º¹ØÎÒÆ¨Ê£¡

ºó¶ËÒµÎñ´¦ÀíÔÙ¸´ÔÓ¸úÎÒÃÇǰ¶ËҲûÓаëëǮ¹ØÏµ£¬Ö»Òªºó¶Ë±£Ö¤¶ÔÍâ½Ó¿Ú×ã¹»¼òµ¥¾ÍÐÐÁË£¬ÎÒÇëÇóapi£¬Äã°ÑÊý¾Ý·µ³öÀ´£¬ÔÛÁ©¾ÍÕâµã¹ØÏµ£¬ÆäËû¶¼³¶µ­¡£

# ViewModel ²ã

ViewModel ÊÇÓÉǰ¶Ë¿ª·¢ÈËÔ±×éÖ¯Éú³ÉºÍά»¤µÄÊÓͼÊý¾Ý²ã¡£ÔÚÕâÒ»²ã£¬Ç°¶Ë¿ª·¢Õß¶Ô´Óºó¶Ë»ñÈ¡µÄ Model Êý¾Ý½øÐÐת»»´¦Àí£¬×ö¶þ´Î·â×°£¬ÒÔÉú³É·ûºÏ View ²ãʹÓÃÔ¤ÆÚµÄÊÓͼÊý¾ÝÄ£ÐÍ¡£ÐèҪעÒâµÄÊÇ ViewModel Ëù·â×°³öÀ´µÄÊý¾ÝÄ£ÐͰüÀ¨ÊÓͼµÄ״̬ºÍÐÐΪÁ½²¿·Ö£¬¶ø Model ²ãµÄÊý¾ÝÄ£ÐÍÊÇÖ»°üº¬×´Ì¬µÄ£¬±ÈÈçÒ³ÃæµÄÕâÒ»¿éչʾʲô£¬ÄÇÒ»¿éչʾʲôÕâЩ¶¼ÊôÓÚÊÓͼ״̬£¨Õ¹Ê¾£©£¬¶øÒ³Ãæ¼ÓÔØ½øÀ´Ê±·¢Éúʲô£¬µã»÷ÕâÒ»¿é·¢Éúʲô£¬ÕâÒ»¿é¹ö¶¯Ê±·¢ÉúʲôÕâЩ¶¼ÊôÓÚÊÓͼÐÐΪ£¨½»»¥£©£¬ÊÓͼ״̬ºÍÐÐΪ¶¼·â×°ÔÚÁË ViewModel Àï¡£ÕâÑùµÄ·âװʹµÃ ViewModel ¿ÉÒÔÍêÕûµØÈ¥ÃèÊö View ²ã¡£ÓÉÓÚʵÏÖÁËË«Ïò°ó¶¨£¬ViewModel µÄÄÚÈÝ»áʵʱչÏÖÔÚ View ²ã£¬ÕâÊǼ¤¶¯ÈËÐĵģ¬ÒòΪǰ¶Ë¿ª·¢ÕßÔÙÒ²²»±ØµÍЧÓÖÂé·³µØÍ¨¹ý²Ù×Ý DOM È¥¸üÐÂÊÓͼ£¬MVVM ¿ò¼ÜÒѾ­°Ñ×îÔà×îÀÛµÄÒ»¿é×öºÃÁË£¬ÎÒÃÇ¿ª·¢ÕßÖ»ÐèÒª´¦ÀíºÍά»¤ ViewModel£¬¸üÐÂÊý¾ÝÊÓͼ¾Í»á×Ô¶¯µÃµ½ÏàÓ¦¸üУ¬ÕæÕýʵÏÖÊý¾ÝÇý¶¯¿ª·¢¡£¿´µ½Á˰ɣ¬View ²ãÕ¹ÏֵIJ»ÊÇ Model ²ãµÄÊý¾Ý£¬¶øÊÇ ViewModel µÄÊý¾Ý£¬ÓÉ ViewModel ¸ºÔðÓë Model ²ã½»»¥£¬Õâ¾ÍÍêÈ«½âñîÁË View ²ãºÍ Model ²ã£¬Õâ¸ö½âñîÊÇÖÁ¹ØÖØÒªµÄ£¬ËüÊÇǰºó¶Ë·ÖÀë·½°¸ÊµÊ©µÄÖØÒªÒ»»·¡£

ûÓÐʲôÊÇÒ»¸öÀõ×Ó²»Äܽâ¾öµÄ

³¶ÁËÕâô¶à£¬²¢Ã»ÓÐʲôÂÑÓá£Ç§ÑÔÍòÓï²»ÈçÒ»¸öÀõ×ÓÀ´µÄ¸É´à£¬ÏÂÃæÓÃÒ»¸ö Vue ʵÀýÀ´ËµÃ÷ MVVM µÄ¾ßÌå±íÏÖ¡£

Vue µÄ View Ä£°å£º

<div id="app">
<p>{{message}}</p>
<button v-on:click="showMessage()">Click me</button>
</div>

Vue µÄ ViewModel ²ã£¨ÏÂÃæÊÇα´úÂ룩£º

var app = new Vue({
el: '#app',
data: { // ÓÃÓÚÃèÊöÊÓͼ״̬£¨ÓлùÓÚ Model ²ãÊý¾Ý¶¨ÒåµÄ£¬Ò²Óд¿Ç°¶Ë¶¨Ò壩
message: 'Hello Vue!', // ´¿Ç°¶Ë¶¨Òå
server: {}, // ´æ·Å»ùÓÚ Model ²ãÊý¾ÝµÄ¶þ´Î·â×°Êý¾Ý
},
methods: { // ÓÃÓÚÃèÊöÊÓͼÐÐΪ£¨Íêȫǰ¶Ë¶¨Ò壩
showMessage(){
let vm = this;
alert(vm.message);
}
},
created(){
let vm = this;
// Ajax »ñÈ¡ Model ²ãµÄÊý¾Ý
ajax({
url: '/your/server/data/api',
success(res){
// TODO ¶Ô»ñÈ¡µ½µÄ Model Êý¾Ý½øÐÐת»»´¦Àí£¬×ö¶þ´Î·â×°
vm.server = res;
}
});
}
})

·þÎñ¶ËµÄ Model ²ã£¨Ê¡ÂÔÒµÎñÂß¼­´¦Àí£¬Ö»ÃèÊö¶ÔÍâ½Ó¿Ú£©£º

{
"url": "/your/server/data/api",
"res": {
"success": true,
"name": "IoveC",
"domain": "www.cnblogs.com"
}
}

Õâ¾ÍÊÇÍêÕûµÄ MVVM ±à³Ìģʽ¡£

´úÂëÖ´ÐÐÖ®ºóË«Ïò°ó¶¨µÄЧ¹ûÈçÏÂ:

VueʵÏÖµÄÏìÓ¦µÄÊý¾Ý°ó¶¨

ºÙºÙ£¬Ç°ºó¶Ë¿ÉÒԳɹ¦·ÖÊÖÁË£¬ÒÔºóÔÙÒ²²»ÓùØÐĺó¶Ë¸ö´¸×Ó¿ª·¢½ø¶È\±©Å­Á³£¬¸´ÔÓʵÏÖ£¬blabla...£¬¾¡ÇéÏíÓÃǰ¶ËÈçË¿°ã˳»¬µÄ¿ª·¢¿ì¸Ð°É:)

ËÄ¡¢²»ÒªÌý´µÅ£±ÆÊ²Ã´Ç°¶ËMVVM¿ò¼Ü¾ÍÊǺã¬Æäʵ¶¼ÊÇÒ»°ïûѧºÃ·Ö²ãÉè¼ÆµÄ¸ã³öÀ´µÄ£¬ÈÃÄã³¹µ×¿´Çåǰ¶ËMVVMµÄ±¾ÖÊ£¨×ª£©

ת×Ô£º²»ÒªÌý´µÅ£±ÆÊ²Ã´Ç°¶ËMVVM¿ò¼Ü¾ÍÊǺã¬Æäʵ¶¼ÊÇÒ»°ïûѧºÃ·Ö²ãÉè¼ÆµÄ¸ã³öÀ´µÄ£¬ÈÃÄã³¹µ×¿´Çåǰ¶ËMVVMµÄ±¾ÖÊ - Ѧ¶ËÑô - ²©¿ÍÔ°

×î½üǰ¶ËȦ×ÓÀïÃæ£¬·¢ÏÖ´ó¼Ò¶¼ÔÚÈȳ´¸ÅÄʲôknockout£¬angularJs£¬¶¼±»Åõ³ÉÉñÁË£¬±ÉÈ˲»²Å£¬×î½üÐÄÇéÒ²²»ºÃ£¬ÌصØÐ´ÕâÆªÎÄÕÂÀ´ÕÒÂî

д´úÂëµÄÂëÅ©¶¼ÖªµÀ£¬JavaÉçÇøËäÈ»²»ÊÇÒ»¸öÌá³ö·Ö²ã˼ÏëµÄ£¬È·Êµ¹á³¹µÄ×îºÃµÄ£¬Èç½ñÊǸöJava¿ª·¢¶¼²»»á²»ÖªµÀSSHµÄ¿ª·¢Ä£Ê½£¬´ÓMVCµ½MVVMµÄ¸ÅÄîµÄÈȳ´£¬ÆäÊµÕæÃ»Ê²Ã´¼¼Êõ½ø²½

£¨Èç¹ûÄã¾õµÃ±¾ÎÄÑԴǼ¤ÁÒ£¬¹ýÓÚ·ßÊÀ¼µË×£¬ÊµÔÚ¿´²»ÏÂÈ¥£¬»¶Ó­ÒƲ½Áíһλ԰ÓÑµÄ·Ö²ã½ø»¯Ê·¿ÆÆÕÎÄÕÂhttp://www.cnblogs.com/indream/p/3602348.html£©

ÏÈ¿´Ê²Ã´ÊÇMVVM

ViewÒ»°ã¾ÍÊÇÎÒÃÇÆ½³£ËµµÄHTMLÎı¾µÄJsÄ£°å£¬ÀïÃæ¿ÉÒÔǶÈëһЩjsÄ£°åµÄ´úÂ룬±ÈÈçMustache£¬±ÈÈçjstlÀàËÆµÄÄ£°åα´úÂë

ViewModule²ãÀïÃæ¾ÍÊÇÎÒÃǶÔÓÚÕâ¸öÊÓÍ¼ÇøÓòµÄÒ»ÇÐjs¿ÉÊÓÒµÎñÂß¼­£¬¾Ù¸öÀý×Ó£¬±ÈÈçͼƬ×ßÂíµÆÌØÐ§£¬±ÈÈç±íµ¥°´Å¥µã»÷Ìá½»£¬ÕâЩ×Ô¶¨ÒåʼþµÄ×¢²áºÍ´¦ÀíÂß¼­¶¼Ð´ÔÚViewModuleÀïÃæÁË

Module¾Í¸ü¼òµ¥ÁË£¬¾ÍÊǶÔÓÚ´¿Êý¾ÝµÄ´¦Àí£¬±ÈÈçÔöɾ¸Ä²é£¬Óëºǫ́CGI×ö½»»¥

ÄÇôʲôÊÇMVVM¿ò¼ÜÄØ£¿£¿Ò»°ãËûÃǶ¼ÊÇÕâô×öµÄ

1. ¶¨ÒåÒ»´®ËùνµÄαģ°å´úÂ룬ÀýÈçͨ¹ýclassName±ê×¢£¬»òÕß×Ô¶¨ÒåtagµÄ·½Ê½£¬½«Ò»¶ÎhtmlÎı¾ÇøÓò¸ø±ê×¢ÉùÃ÷ÆðÀ´£¬Òâ˼¾ÍÊǺ°Ò»É¤×Ó£¬¡°Î¹£¬ÐÖµÜÃÇ£¬Õâ¿éµØ·½ÎÒÕ¼ÁË£¬ÒªÀ­ÊºÈ¥±ð´¦À­È¥¡±

2. ͨ¹ýÀàËÆjstlÖ®Ààlamda±í´ïʽ£¬À´×öjsÄ£°å£¬¡°°ÝÍÐ»ï¼Æ£¬ÌìÌÃÓзÄã²»×ߣ¬·ÇÒª×Ô¼º¸ãÒ»Ì×£¬Äã¾Í²»Äܱ©Â¶½Ó¿ÚÈôó¼ÒÓÃ×Ô¼ºµÄÄ£°åÓïÑÔ£¬±ÈÈçMustache»òÕßjtplÂ𣿡±

3. ºÜɵ±ÈµÄ·â×°Ò»´®×Ô¼ºµÄËùνÊý¾ÝÄ£¿é×é¼þ£¬Ó벻ͬÀàÐ͵ÄÊý¾ÝÔ´×öÊý¾Ý´«ÊäºÍÊÊÅ䣬һ°ã¶¼²»»á·Ö²ãºÜÇåÎú£¬¼ÓÈëºǫ́Êý¾Ý×ֶθÄÁË£¬Ð´¿ò¼ÜµÄ¶¼Ã»ÄÔ×ӵ쬴ÓÀ´²»×öÊý¾Ý×ֶεÄ×Ô¶¨ÒåÊÊÅ䣨¾Ù¸öÀý×Ó£¬Ô­À´ºǫ́´«µÝµÄ×Ö¶ÎÊÇperson.userName£¬ÏÖÔڸijÉÁËСд£¬person.username£¬Äã¾Íɵ±ÆµÄÈ¥°ÉÄ£°åÔÙ¸Äһϰɣ¬ÆäʵҪ½â¾öÕâ¸öÎÊÌ⣬·Ç³£¼òµ¥£¬ÔÚMVVM²ãÖÐÒýÈëÒ»²ãDO£¬ÁìÓò¶ÔÏó²ã£¬Moduleµ½DOÖ®¼ä»¹ÓÐÒ»²ãת»»¾Í¿ÉÒԸ㶨Õâ¸öÎÊÌ⣩

4. ·Ç²»±©Â¶×Ô¼ºµÄ×Ô¶¨ÒåʼþÄ£ÐÍ£¬¾ÍÊÇÄǸö¹Û²ìÕßģʽÀ²£¬×Ô¼ºÂÒÆß°ËÕÐÔÚÒ³ÃæÉϰó¶¨Ò»¶Ñform changeÖ®ÀàµÄʼþ£¬ÒÔʵÏÖViewÓëModuleµÄµ¥Ïò°ó¶¨

5. ËùνµÄË«Ïò°ó¶¨£¬Ò²¾ÍÊÇOOPÓïÑÔÖÐÔç±»ÀÃ͸Á˵Ägetter£¬setterÄ£ÐÍ£¬ES5+¿ÉÒÔÓÃdefineProperty£¬µÍ°æ±¾¾ÍÐèÒª×Ô¼ºÔÚjs object¸³ÖµµÄʱ¼ä×öдËÀ´úÂ뷽ʽµÄ´¦ÀíÁË

ÎÒÃÇÔÙÀ´¿´Ï¸½Ú

1. Ë«Ïò°ó¶¨

ºÅ³ÆÊÇ×îÄÑÀí½âµÄµØ·½£¬ÆäʵÊÇ¿ò¼ÜµÄ×÷Õ߸ù±¾¾ÍûÀí½âJavaÉçÇø¶ÔÓÚÈí¼þ¿ª·¢·Ö²ãÀí½âµÄ¾«Ëè

±ê×¼µÄÊý¾ÝÇý¶¯¿ª·¢£¬Ó¦¸ÃÈçÉÏͼËùʾ£¬ÔÚÒ»¸öViewµÄÉúÃüÖÜÆÚÄÚ£¬Ò»¸öViewModule»á¹ÜÀíÒ»¸öDomainObject£¨ÒµÎñÄ£ÐÍ£©£¬Ò»¸öDO¿ÉÄܰüÀ¨¶à¸öModuleÊý¾ÝÄ£ÐÍ£¬Ò»¸öModule¿ÉÄÜÀ´×Ô¶à¸öÊý¾ÝÔ´£¬¶ø²»ÊÇÏëºÜ¶àËùνµÄMVVM¿ò¼ÜÄÇÑùÇ¿ÆÈÒ»¸öMÀ´Ò»¸öÊý¾ÝÔ´

°´ÕÕÉÏͼ±ê×¼·Ö²ã·½Ê½À´»®·ÖµÄºÃ´¦£¬ÔÚÓÚ£¬Âß¼­ÇåÎú£¬Module²ãÁ£¶È¹»Ï¸£¬¿ÉÒÔ±»¶à´Î¸´ÓÃ

DO²ãÓëVM²ãView²ãÊôÓÚÒ»Ò»¶ÔÓ¦¹ØÏµ£¬·½±ã¶ÔÊý¾Ý×öÔöɾ¸Ä²éµÄͬ²½

ÿһ²ãÓ¦¸ÃÊǶÀÁ¢µÄ£¬·ÇÒ»¶¨ÒªÊ¹ÓÃMVVM¿ò¼ÜµÄ½ôñîºÏ£¬¿ÉÒÔÓÃ×Ô¼ºÊ¹Óò»Í¬µÄjs²å¼þ»òÕßÄ£¿éʵÏÖMVVM

ÎÒÃÇÅׯú¿ò¼Ü£¬µ¥´¿µÄ¿´Êý¾Ý£¬ÆäʵÎÒÃÇÒª½â¾öµÄÎÊÌâºÜ¼òµ¥

a) µ±DO¶ÔÏóÊôÐÔ·ÅÉú±ä»¯Ê±ºò£¬Í¨ÖªView¸üÐÂ

b) µ±ViewÉÏ±íµ¥Öµ·ÅÉú±ä»¯Ê±£¬Í¨ÖªDO¸üУ¬²¢Ò첽֪ͨ¶ÓÁÐͬ²½µ½Êý¾ÝÔ´

ÏÈÀ´¿´ÎÊÌâa£¬Õâ¸ö×î¼òµ¥£¬DOÊÇÒ»¸ö»ù±¾µÄJavascript Object£¬ÎÒÃÇÔÚViewÉϵÄÄ£°åÏÔʾÊÇÕâ¸öObject.property£¬

¸Ä±äÒ»¸öObject¶ÔÏóµÄ·½Ê½Î޷Ǽ¸ÖÖ£¬Ò»ÖÖÊÇ

a) ÏÔʾObject.property = ¡®ÎÒÊÇɵ±Æ¡¯

b) xxxx.methodName(Object, ¡®property¡¯, ¡®ÎÒÊÇɵ±Æ¡¯)

c) xxxx.merge(Object, {¡®property¡¯: ¡®ÎÒÊÇɵ±Æ¡¯})

Èç¹ûÊÇaµÄÇé¿ö£¬ES5+£¬¿ÉÒÔͨ¹ýÉèÖÃObject.defefineProperty(¡®property¡¯,{set: functiono(){},get:function(){}})£¬À´×ö¸³ÖµºÍȡֵµÄ¼à¿Ø´¥·¢

¶ÔÓÚIE8һϣ¬ÒòΪjs²»Ö§³ÖÔËËã·ûÖØÔØ£¬ËùÒÔÔÝʱûÓкõİ취£¬ËùÒÔÈç¹ûÖ»¿¼ÂÇÒÆ¶¯¶ËµÄ»°£¬Ö±½ÓdefineProperty¾ÍÈ«²¿¸ã¶¨£¬Èç¹ûÊÇÒª¿¼ÂÇPCµÄ»°£¬¾Í²»½¨Ò鿪·¢ÕßʹÓÃÖ±½Ó¸³ÖµµÄ·½Ê½£¬²Î¿¼javaµÄ¿ª·¢Ä£Ê½£¬Ò²ÊÇÍÆ¼öOOPʱºò£¬Ê¹ÓÃset·½Ê½¸³Öµ£¬¶ø²»ÊÇÖ±½Ó=¸³Öµ

µ±È»ÁË£¬Èç¹ûÄã·ÇÒª¼æÈÝIE8Ò»ÏµĻ°£¬Óö¨Ê±Æ÷×öÂÖѵ£¬ÅäºÏfor in ·´É䣬ͨ¹ýÔàÊý¾ÝÓëԭʼ±¸·Ý¶Ô±ÈµÄ·½·¨Ò²ÊÇÒ»ÖÖ°ì·¨£¬²»¹ýÕâÖÖ°ì·¨ÔÚµ±Ç°Ò³Ãæ·Ç³£ºÄÐÔÄÜ£¬ÓÉÓÚIE8һϲ»Ö§³Ö¶àỊ̈߳¬HTML5 worker£¬Èç¹ûδÀ´flash ²å¼þÖ§³Ö¶àÏ̵߳ϰ£¬µ¹ÊÇ¿ÉÒÔÓÃjsºÍflash²å¼þ×öÏ߳̽»»¥µÄ·½Ê½×öÔàÊý¾Ý¼ì²â

Èç¹ûÊÇbµÄÇé¿ö£¬ÄǾÍÌ«¼òµ¥ÁË£¬ÔÚmethodNameÀïÃæ´¥·¢¶ÔÓÚ¸ÃÊôÐÔÐ޸ĵĻص÷¼´¿É£¬ÈçºÎ×¢²á»Øµ÷ÄØ£¬Ê×ÏÈÎÒÃÇҪʵÏÖÒ»¸öÀàËÆDom EventµÄ×Ô¶¨Òå¶ÔÏóµÄEventÄ£ÐÍ£¬È»ºóͨ¹ýÀàËÆDom EventµÄ×¢²áʼþ·½Ê½£¬×¢²á¹Û²ìÕߣ¬¶©ÔÄʼþ£¬µ±Ö´ÐÐÁËmethodNameʱºò£¬·¢ËÍÏûÏ¢£¬Í¨ÖªËùÓж©ÔÄÕßÖ´Ðлص÷

Èç¹ûÊÇcµÄÇé¿ö£¬ÀàËÆbÒ»Ñù´¦Àí

ÕâÑùÒ»¿´£¬Ë«ÏòÊý¾Ý°ó¶¨µÄÎÊÌâ¾Í·Ç³£¼òµ¥µÄ½â¾öÁË

ÎÒÃÇÔÙÀ´¿´ÁíÍâÒ»¸öMVVMµÄÎÊÌ⣬·Ç¼òµ¥Êý¾ÝÄ£ÐÍ£¬¸´ºÏÊý¾ÝÄ£ÐÍ£¨DOµÄÊôÐÔÖµ²»ÊÇÒ»¸östring£¬¶øÊÇÒ»¸öObject£¬ÇÒÕâ¸öObject¿ÉÄÜ»¹Ç¶Ì×¶à²ãObejctµÄʱºò£©µÄ´¦Àí°ì·¨£¬Õâ¸öÒ»°ãµÄMVVM¿ò¼ÜÖ±½Ó²»¿¼ÂÇ£¬»òÕßͨ¹ý³¤×Ö¶ÎÃûµÄ·½Ê½ÈƹýÕâ¸öÎÊÌâ

Õâ¸öÎÊÌâÊÇÕâÑùµÄ£¬ÔçÔÚ10¼¸Äêǰ£¬java structs¿ò¼ÜÁ÷ÐеÄʱºò¾Í³öÏÖÁË£¬µ±Ò»¸ö±íµ¥£¬³öÏÖÐèÒª¶ÔÁ½¸öJava Bean×öupdate²Ù×÷ʱºò£¬Ò»¸öbeanÊÇuser£¬Ò»¸öbeanÊdzɼ¨

¶ÔÓ¦µÄ±íµ¥×Ö¶ÎÃû£¬¾ÍÊÇ user±í.name£¬user±í.id£¬score±í.point£¬

ÔÚstruct2ÀïÃæ£¬´¦ÀíÂß¼­ÊÇ°Ñ ¡°µã¡±×÷ÎªÌØÊâ·ûºÅ£¬ÔÚ×öformÐòÁл¯Ê±ºò£¬·Ç°üº¬µãµÄ×ֶεÄÖµ¶¼ÊÇstring£¬°üº¬µãµÄ×Ö¶ÎÊÇÒ»¸öObject£¬±ÈÈç¸Õ²ÅµÄformÐòÁл¯Ö®ºó½á¹û¾ÍÊÇ { user: {id :¡¯¡¯ , name: ¡®¡¯}, score: {id: ¡®¡¯, point: ¡®¡¯}}

ͬÀíÔÚMVVMʵÏÖʱ£¬Ò²ÊÇÒ»Ñù£¬ÈÏΪµãÊÇ·Ö¸î¶ÔÏóµÄ¹Ø¼ü×Ö£¬ÕâÑùÎÒÃǾͿÉÒÔʵÏְѶà¸ö¶ÔÏóǶÌ×µ½ViewÄ£°åÀïÃæ£¬ÊµÏÖ¸´ºÏObjectµÄË«ÏòÓ³Éä

×îºóÒ»¸öÎÊÌ⣬Ҳ¾ÍÊǸ߼¶MVVM±à³ÌÀïÃæ±ØÐëÒªÃæ¶ÔµÄÎÊÌ⣬¾ÍÊÇ×Ô¶¨ÒåʼþµÄ¹ã²¥ºÍðÅÝ£¬ÎÒ¿´¹ý´ó¶àÊýµÄMVVM¿ò¼Ü£¬¶ÔÓڹ㲥£¬Õâ¿éÓв¿·ÖʵÏÖÁË£¬µ«ÊǶÔÓÚðÅÝÒ»¸ö¶¼Ã»ÊµÏÖ

ÆäʵÕâ¸öÕæµÄ²»ÊǺܸ´ÔÓµÄÎÊÌ⣬ʼþ¹ã²¥£¬Õâ¸ö×î¼òµ¥£¬ÈýËêСº¢¶¼ÄÜд£¬ÎÒÃÇÔÚ×¢²á»Øµ÷ʱºò£¬²»ÊÇÓÐÒ»¸öʼþ¶ÓÁÐÂð£¬Ôڻص÷ʱºò£¬Í¨¹ýÌØÊâ±ê¼Ç룬¿ØÖÆÊÇ·ñ¼ÌÐøÀ©É¢¹ã²¥£¬»¹ÊÇÖ´ÐÐÍê±ÏÖÕÖ¹¼´¿É

¶ø×Ô¶¨ÒåʼþµÄðÅÝҪɧɧ¸´ÔÓһЩ£¬ËûÊÇÓÉÓÚOOP±à³ÌÀïÃæµÄ¼Ì³ÐºÍ°üº¬¹ØÏµÒýÉê¶øÀ´µÄ£¬ÎÒÃÇÏÈ˵°üº¬¹ØÏµ£¬Ç°ÃæËµÁËMVVM¿ò¼ÜÀïÃæ£¬¶¼»áÉùÃ÷Ò»¿éµØ·½ÎªVM¿ØÖÆÇøÓò£¬Ò»°ãÀ¬»øµÄ¿ò¼Ü¶¼²»»á¿¼ÂÇ£¬VMǶÌ×µÄÇé¿ö£¬ÒòΪͼ¼òµ¥Âð

µ«ÊÇʵ¼Ê¿ª·¢¹ý³ÌÖУ¬Äã»áÓöµ½ºÜ¶àÕâÖÖÇé¿ö£¬¾ÍÊÇVM¸´ÓõÄÎÊÌ⣬һ°ã¶¼ÊÇ·¢ÏÖʹÓÃÁËMVVM¿ò¼ÜÖ®ºó£¬·¢ÏÖVM¶¨ÒåµÄÌ«´ó£¬Ã»·¨¸´Óã¬Èç¹ûÒª¸´ÓÃVM¾ÍÓÖ·¢ÏÖVM¶¨ÒåµÄ̫С£¬³öÏÖÐèÒªVMǶÌ×µÄÇé¿öû·¨ÓÃ

Æäʵ¼òµ¥£¬ÎÒÃÇÖªµÀDOMʼþÊÇÓÐðÅݵģ¬VMͬÀí£¬Ö»ÒªÔÚ×Ô¶¨ÒåʼþÄ£ÐÍÀïÃæ¶¨ÒåÁËVMµÄ¸¸×Ó¹ØÏµ£¬»òÕßͬ¼¶¹ØÁª¹ØÏµ£¬¼´¿ÉʵÏÖVMµÄ×Ô¶¨ÒåʼþµÄ¹ã²¥ºÍðÅÝ£¬ÁíÍâÒ²½â¾öÁËVM¸´ÓõÄÎÊÌ⣬¿ÉÒÔÈôúÂë¿ÅÁ£¶È¸üС

ÁíÍâÄÇÖÖ£¬ÉùÃ÷ʽ±à³ÌÕâÖÖÀϵôÑÀµÄ¸ÅÄî¾ÍÕæµÄ±ðÔÚ³³ÁË£¬»¹¼ÇµÃ10¼¸ÄêǰµÄstructsµÄtagÂð£¬jsȦ×ÓÀïÃæÕâÖÖͨ¹ý×Ô¶¨Òåtag£¬×Ô¶¨ÒåclassName£¬×Ô¶¨ÒåÊôÐÔ£¬¹ÒÔØjsÀ´×Ô¶¨Ê¶±ðÖ´ÐÐÂß¼­µÄÀý×Ó´ó°Ñ½ÔÊÇ£¬»¹Êǽ¨Òé¹ã´óǰ¶Ë¿ª·¢£¬²»Òª¸¡Ô꣬¶àÏñjavaÉçÇøÑ§Ï°£¬¶à¶à´Ó¸ù±¾ÉÏÁ˽â·Ö²ãÀíÄîµÄ¾«Ë裬²»ÒªÌýÁË´µÅ£±Æ£¬Ìý·ç¾ÍÊÇÓ꣬»¹ÊǶàÁ˽âÔ­Àí²ÅÊÇÕæÀí°¡

×î½üÐÄÇéºÜ²»ºÃ£¬¹ÉƱ´óµø£¬¹«Ë¾µÄÊÂÇéÄã¶®µÄ£¬Ð´ÕâÆªÎĵµ´¿ÊôûÊÂÕÒÊ£¬»¶Ó­¹ã´óµÀÓÑ¿ªÂÀ´ÅãÎÒ´óÕ½Èý°Ù»ØºÏ

Îå¡¢MVVMºËÐĸÅÄת£©

ת×Ô£ºMVVMºËÐĸÅÄî - iammackong - ²©¿ÍÔ°

MVVMģʽÊÇModel¡¢View¡¢ViewModelµÄ¼ò³Æ£¬×îÔç³öÏÖÔÚWPF£¬ÏÖÔÚSilverlightÖÐҲʹÓøÃģʽ£¬MVVMģʽÊǶÔMVCģʽµÄ±äÖÖ¡£ÄĶù±äÁË£¿ÎÒÈÏΪMVVMºÍMVCµÄÖ÷Òª±ä»¯ÔÚÓÚMVVM¸üÊʺÏÓÚXAML¡£

MVVMģʽºÍMVCģʽһÑù£¬Ö÷ҪĿµÄÊÇ·ÖÀëÊÓͼ£¨View£©ºÍÄ£ÐÍ£¨Model£©£¬Óм¸´óºÃ´¦

1. µÍñîºÏ¡£ÊÓͼ£¨View£©¿ÉÒÔ¶ÀÁ¢ÓÚModel±ä»¯ºÍÐ޸ģ¬Ò»¸öViewModel¿ÉÒ԰󶨵½²»Í¬µÄ"View"ÉÏ£¬µ±View±ä»¯µÄʱºòModel²»¿ÉÒÔ²»±ä£¬µ±Model±ä»¯µÄʱºòViewÒ²¿ÉÒÔ²»±ä¡£

2. ¿ÉÖØÓÃÐÔ¡£Äã¿ÉÒÔ°ÑһЩÊÓͼÂß¼­·ÅÔÚÒ»¸öViewModelÀïÃæ£¬ÈúܶàviewÖØÓÃÕâ¶ÎÊÓͼÂß¼­¡£

3. ¶ÀÁ¢¿ª·¢¡£¿ª·¢ÈËÔ±¿ÉÒÔרעÓÚÒµÎñÂß¼­ºÍÊý¾ÝµÄ¿ª·¢£¨ViewModel£©£¬Éè¼ÆÈËÔ±¿ÉÒÔרעÓÚÒ³ÃæÉè¼Æ£¬Ê¹ÓÃExpression Blend¿ÉÒÔºÜÈÝÒ×Éè¼Æ½çÃæ²¢Éú³Éxaml´úÂë¡£

4. ¿É²âÊÔ¡£½çÃæËØÀ´ÊDZȽÏÄÑÓÚ²âÊԵ쬶øÏÖÔÚ²âÊÔ¿ÉÒÔÕë¶ÔViewModelÀ´Ð´¡£

Èç¹ûÓÃInterface½Ó¿ÚÀ´±í´ï£¬»ù±¾¾ÍÊÇÕâô¸öÒâ˼£º

1 publicinterface IView
2 {
3 IViewModel ViewModel { get; set; }
4 }
5
6 publicinterface IViewModel
7 {
8 IModel Model { get; set; }
9
10 ///<summary>
11 /// a property that states the controller is busy doing something (like fetching data from a service),
12 /// usually the iterface should be blocked
13 ///</summary>
14 bool IsBusy { get; }
15 }

 

MVVMµÄModel¡¢View¡¢ViewModel·Ö¹¤

1. View

¸ºÔð½çÃæºÍÏÔʾ£¬½çÃæ¹¹³ÉÔªËØÓÐwindow, controls, page, dataTemplete, custom controls¡­.

´úÂëͨ³£ÓÐXAMLºÍXAML.CS×é³É£¬µ«ºǫ́´úÂëÓ¦¸ÃºÜÉÙ

ͨ¹ýDataContextºÍViewModel°ó¶¨

²»Ö±½ÓºÍModel½»»¥£¡

¿Ø¼þ¿ÉÒÔºÍViewModelµÄ¹«¹²ÊôÐ԰󶨣¬updateÐèҪ˫Ïò°ó¶¨

¿Ø¼þ¿ÉÒÔ´¥·¢Behavior/Commandµ÷ÓÃViewModelµÄ·½·¨£¬CommandÊÇViewµ½ViewModelµÄµ¥ÏòͨѶ (ViewÖд¥·¢Ê¼þ£¬ViewModelÖд¦Àíʼþ)

2. ViewModel

Ö÷Òª°üÀ¨½çÃæÂß¼­ºÍÄ£ÐÍÊý¾Ý·â×°£¬Behavior/CommandʼþÏìÓ¦£¬°ó¶¨µÄÊôÐÔ¶¨ÒåµÈ

ViewModel¼Ì³ÐModelÀ࣬»òÕßÊÇModelµÄ¼Ì³ÐÀà

ÊÇviewºÍmodelµÄÇÅÁº£¬ÊǶÔModelµÄ³éÏó£¬ÀýÈ磬modelÖÐÊý¾Ý¸ñʽÊÇ¡°ÄêÔÂÈÕ¡±£¬¿ÉÒÔÔÚviewModelÖÐת»»modelÖеÄÊý¾ÝΪ¡°ÈÕÔÂÄꡱÒÔ¹©ÊÓͼ£¨view£©ÏÔʾ¡£

ά»¤ÊÓͼ״̬

ʵÏÖÊôÐÔ»ò¼¯ºÏµÄchange notification

3. Model

Êý¾ÝºÍÒµÎñÂß¼­

¿Í»§¶ËÁìÓòÄ£ÐÍ

ÓÉdata entities, business objects, repositories and services¹¹³É

¿ÉÒÔʵÏÖÊôÐÔ»ò¼¯ºÏµÄchange notification

¿ÉÒÔʵÏÖvalidation ½Ó¿ÚÀýÈç IDataErrorInfo

ViewºÍViewModelÖ÷Ҫͨ¹ýÊý¾Ý°ó¶¨ºÍCommand/Behavior½øÐн»»¥£¬ÈçÏÂͼËùʾ£º

Ò»¸öÀý×Ó²¢ÇÒ¸½´úÂëÏÂÔØ(CommandδʾÀý)

ÓйØModel£¨Ä£ÐÍ£©ºÍDTOµÄÎÊÌâ

Ç°ÃæËµµÄModelÊǿͻ§¶ËµÄ£¬µ«Êµ¼ÊÉÏDomail Model´æÔÚ·þÎñÆ÷¶Ë£¨¿¿½üÊý¾Ý¿â£©ºÍÄǾÍÐèÒªºÍ¿Í»§¶Ë¸ãÓ³ÉäDTO£¨Data Transfer Ojbect£¬Êý¾Ý´«Êä¶ÔÏ󣬴øÐòÁл¯±ê¼Ç£¬ÓÃÀ´Ô¶³Ìµ÷Óã©¡£ÔÚSilverlightÖÐÓиöºÜ·½±ãµÄ¶«Î÷À´ÊµÏÖÕâ¸öDTO¹ý³ÌºÍÐòÁл¯£¬ÄǾÍÊÇWCF RIA ServiceºÍDomainService¡£Èç¹ûÄã´´½¨Ò»¸ö¼òµ¥µÄSilverlightÓ¦Óò¢ÇÒµ÷ÓÃWCF RIA Service£¬»ù±¾ÉÏ»áÉú³ÉDTO Model: ObjectContext(EntityObject)¡££¨Ò²ÓÐÈËϲ»¶ÔÚModelÀïÃæµ÷ÓÃRiaSerivceʵÏÖload£¬saveµÈµÈ£¬¸öÈËÈÏΪ²»Ì«ºÏÊÊ£¬¿ÉÒԲο¼ÕâÆªÎÄÕ£©£¬´ËÍ⣬²Î¿¼ÕâÆªÎÄÕ£º¡¶WCF RIA Services and a guide to use DTO/¡±Presentation Model¡±¡·

´úÂëÀý£º

publicpartialclass MyModelsEntities : ObjectContext
{
¡­
}
[EdmEntityTypeAttribute(NamespaceName="MyModels", Name="MyEntity")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
publicpartialclass MyEntity: EntityObject
{
¡­
}

MVVMµÄʵ¼ùÒªµã

1. View·ÖÀëÒª³¹µ×£¬²»ÒªÓлµÎ¶µÀ

ÊÓͼ£¨view£©²¿·Ö£¬xaml.cs Ó¦¸ÃÖ»ÓкÜÉٵĴúÂë»òûÓдúÂ룬Èç¹ûÄãµÄxaml.cs°üº¬´óÁ¿µÄ´úÂ룬ÄÇôºÜ¿ÉÄÜÄãMVVMÓõIJ»¶ÔÍ·£¬ÐèÒª¼ì²éÆäÖдúÂëµÄ»µÎ¶µÀ¡£XamlºÍxaml.cs Ö»Äܰüº¬´¦Àí½çÃæ¡¢ÊÓͼ¡¢ÏÔʾÑùʽ¡¢ÊÓÍ¼ÔªËØÖ®¼äµÄ½»»¥¡¢ÊÓÍ¼ÔªËØ¶¯»­£¬µÈµÈµÄÄÚÈÝ¡£

2. ViewModelÒª¿É²âÊÔ

´ÓÖØ¹¹µÄ¹Ûµã¿´£¬Èç¹ûÄãµÄ´úÂëÖÐViewModelÊǿɲâÊԵģ¬ÓÐÏêϸµÄµ¥Ôª²âÊÔUnit Test£¬ÄãµÄ´úÂëÊÇOKµÄ£¬·ñÔòÐèÒª¼ì²éÆäÖеĻµÎ¶µÀ¡£

 
   
3272 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÈçºÎÉè¼Æ¸ßÀ©Õ¹µÄÔÚÏßÍøÒ³ÖÆ×÷ƽ̨
electronÈëÃÅÐĵÃ
ʹÓà Electron ¹¹½¨×ÀÃæÓ¦ÓÃ
VUE.JS×é¼þ»¯¿ª·¢Êµ¼ù
ÉîÈëÀí½âJSCore
×îпγÌ
HTML 5 + CSS3 Ô­ÀíÓ뿪·¢Ó¦ÓÃ
Webǰ¶Ë¸ß¼¶¹¤³Ìʦ±Ø±¸¼¼ÄÜʵս
Vue´óÐÍÏîÄ¿¿ª·¢ÊµÕ½
ReactÔ­ÀíÓëʵ¼ù
Vue.js½ø½×Óë°¸Àýʵ¼ù
³É¹¦°¸Àý
Öн»¼¯ÍÅ ¹¹½¨Web×Ô¶¯»¯²âÊÔ¿ò¼Ü
ijָÃûµçÐŹ«Ë¾ Vue.js½ø½×Óë°¸Àý
¹úµçÍ¨ÍøÂç¼¼Êõ HTML5+CSS3 +webǰ¶Ë¿ò
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ