±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁË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µÄ£¬·ñÔòÐèÒª¼ì²éÆäÖеĻµÎ¶µÀ¡£

|