±à¼ÍƼö: |
±¾ÎÄÖ÷ÒªÌÖÂÛµÄÊǾßÌåÃæÏò¿Í»§Ê¹ÓõÄÒµÎñ³¡¾°£¬ÉÙ²»Á˿ͻ§²Ù×÷½»»¥µÄÊÓͼ²ã£¨View£©,´Ó±íÏÖ²ãµÄMVC£¬Êµ¼Ê°¸Àý½áºÏ½²½â£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ°¢Àï¼¼Êõ
,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Ò» ±³¾°ºÍÎÊÌâ
ÎÒ¸öÈËÆ½Ê±»á±È½ÏÉ÷Ó᰼ܹ¹¡±Õâ¸ö´Ê
- Ò»·½ÃæÊǾõµÃÒµ½çÓкܶà¼Ü¹¹´óʦºÍ¼Ü¹¹Ä£Ê½£¬¶øÎÒµÄÈÏÖªºÍʵ¼ùÓÐÏÞ£»
- ÁíÒ»·½ÃæÊÇÒòΪÕâ¸ö´Ê¿´×Åͦ¸ß´óÉÏ¡¢ÓеãÎñÐ飬Èç¹û²»½áºÏʵ¼Ê³¡¾°µÄ¾ßÌåÎÊÌâÀ´ÌÖÂÛ£¬ÈÝÒ×ÏÝÈë¡°PHPÊÇ×îºÃµÄÓïÑÔ¡±ÕâÑùµÄ±çÂÛÈüÖС£¶ø²»Í¬³¡¾°ÖÐÓÖÓи÷×ÔµÄÎÊÌ⣬³ÌÐòÔ±ÃÇͨ¹ý×Ô¼ºµÄÀí½âºÍ˼¿¼¡¢Õë¶Ôʵ¼Ê³¡¾°¶ÔһЩ¼Ü¹¹Ä£Ê½½øÐÐÁËÀ©Õ¹Êµ¼ù£¬ÒÔ´ËÀ´½â¾öÓöµ½µÄÎÊÌ⣬Ҳ»á»ùÓÚͬһ¸öģʽÑÓÉì³öһЩÅÉÉú¸ÅÄî¡£
±øÎÞ³£ÊÆ£¬Ë®ÎÞ³£ÐΡ£ ËùÒÔ£¬ÎÒ¸öÈ˵Ĺ۵ãÊÇ£ºÒÔÒª½â¾öµÄÎÊÌâΪ³ö·¢µã£¬È¥ÌÖÂÛÎÒÃÇÒª²ÉÓõļܹ¹Ä£Ê½£¨¼¼Êõ·½°¸£©¡£
ÁíÍ⣬ÓÉÓÚÎÒÃÇÊÇÕ¾Ôںܶà¾ÞÈ˼ç°òÉϵģ¬ÌÖÂÛʱ¿ÉÒÔÕ¾ÔÚһЩÈçSOLIDµÈÈí¼þÉè¼Æ/¿ª·¢ÔÔòµÄ»ù´¡ÉÏ¡£Ð´ÕâÆªÎÄÕ£¬ÎÒÒ²ÊÇ´Ó½â¾öһЩÎÊÌâµÄÄ¿µÄ³ö·¢µÄ£º
- ×î½üºÍÍŶÓͬѧÌÖÂÛÁËÏà¹Ø»°Ì⣬ËäÈ»´ó¶àÊýͬѧÔÚʵ¼ùÉÏ»ù±¾Ò»Ö£¬µ«¾ßÌåµ½»°Êõ¡¢Ãû´Ê¸ÅÄîºÍ¾ßÌåʹÓõÄÀí½âºÍʵ¼ùÉÏÓÐЩ²îÒ죨ÕâÊǺÜÕý³£µÄ£¬ÒòΪҵ½ç¶Ôͬһ¸öģʽµÄÀí½âºÍʵ¼ùÒ²²»Í¬£©¡£ÎÒ½áºÏһЩʵ¼Ê±àÂ볡¾°×öÁËÒ»·¬³ÂÊö£¬ÎªÁ˱ÜÃâºóÐøÖØ¸´´ó·Ñ¿ÚÉ࣬ËùÒÔ´òËãдÏÂÀ´£¬ÒÔºóÓÐÐèÒªÖ±½Ó·¢ÎÄÕÂÁ´½Ó¡£
- ÓÉÓÚÎÒ¸öÈ˵ÄÈÏÖªºÍʵ¼ùÓÐÏÞ£¬ËùÒÔҲϣÍûÄÜÅ×£¨huan£©×©£¨ying£©Òý£¨lai£©Óñ£¨pen£©£¬ÈÃÎÒѧµ½¸ü¶à¡£
- ËäȻͬһ¸ö¼Ü¹¹Ä£Ê½ÔÚ²»Í¬ÒµÎñ/¼¼ÊõÁìÓòµÄʵʩ»áÓÐÇø±ð£¬µ«Í¬Ò»¸öÍŶÓÄÚÓ¦¸Ã±£³ÖÒ»ÖÂÐÔ£¬ÒòΪÕâÑùÓÐÖúÓÚÈÕ³£µÄcode review¡¢¹¦ÄÜÄ£¿éµÄ½»½ÓbackupµÈ»î¶¯£¬ÓÈÆäÊÇÓÐÀûÓÚʹÓÃͳһµÄµ¥²â½¨Éè·½°¸À´±£ÕÏÎÒÃǵIJúÆ·ÖÊÁ¿¡£
- ʵ¼ÊÎÊÌ⣺ÎÒ×î½üÔÚ¿ª·¢É̼Һϲ¢·¢»õµÄ¹¦ÄÜ£¬µ«ÓÉÓÚ֮ǰ»ù´¡·¢»õ¹¦ÄܵĽçÃæºÍÂß¼²¢²»ÊÇÎÒ¿ª·¢µÄ£¬ËùÒÔÎÒÔÚÐÞ¸ÄÔÓдúÂë¡¢Ö§³ÖÓзdz£¶àϸ½ÚÂß¼µÄºÏ²¢·¢»õÄÜÁ¦Ê±£¬¾ÍÔÚµ£ÐĶÔÔÓз¢£¨zhong£©»õ£¨yao£©ÄÜÁ¦µÄÓ°Ïì¡£¶øÕâʱºò£¬Èç¹ûÓе¥²âµÄ±£ÕÏ£¬ÎҾͿÉÒÔ¸ü·ÅÐĵؽøÐй¦ÄÜÉý¼¶¸ÄÔìÁË ¡ª¡ª ±ð˵¸ü¸´Ôӵĺϲ¢·¢»õÄÜÁ¦ÁË£¬¶øÕâÀàËßÇóÔÚ¸´ÔӵĽ»Ò׳¡¾°ÀïºÜÆÕ±é¡£
ÌáÁ¶Ò»ÏÂÎÒÓöµ½µÄ¾ßÌåÎÊÌ⣺
ÔÚÓɲ»Í¬¿ª·¢ÈËÔ±³ÖÐøµü´ú¡¢½øÐй¦ÄÜÉý¼¶µÄÈí¼þ¿ª·¢»î¶¯ÖУ¬ÈçºÎ±£ÕϾßÓи´ÔÓÂß¼µÄÉ̼ҾӪ¹¤¾ßµÄ²úÆ·ÖÊÁ¿¡£

Èí¼þ¿ª·¢»î¶¯ÊÇÕû¸öÁ÷³ÌµÄºËÐÄ»·½Ú£º½ÓÊÕ²úÆ·ºÍÊÓ¾õÉè¼ÆÐèÇó/±ä¸ü×÷ΪÊäÈ룬ȻºóÊä³ö¿Í»§¿ÉÓõÄÖն˲úÆ·¡£
¶øÍ³Ò»µÄÈí¼þ¿ª·¢¼Ü¹¹Ä£Ê½£¬ÔòÊÇÎÒÃDZ£ÕÏÈí¼þ¿ª·¢ÖÊÁ¿µÄ»ù´¡¡££¨ÕâÀï¾Í²»¾ßÌåÕ¹¿ªWHYÁË£©
ÓÉÓÚÌÖÂÛµÄÊǾßÌåÃæÏò¿Í»§Ê¹ÓõÄÒµÎñ³¡¾°£¬ÉÙ²»Á˿ͻ§²Ù×÷½»»¥µÄÊÓͼ²ã£¨View£©£¬ËùÒÔÎÒ´ÓMVC¿ªÊ¼Ì¸Æð¡£
¶þ ´Ó±íÏÖ²ãµÄMVC̸Æð

ËäÈ»ÎÒÆ½Ê±±È½ÏÉ÷Ó᰼ܹ¹¡±Õâ¸ö´Ê£¬µ«ÎÒÆ½Ê±Ï²»¶ËæÊÖÅÄһЩ½¨ÖþÎï¡£ ÒòΪ½¨ÖþÖ®ÃÀ£¬»áÈÃÎÒÁªÏëµ½Èí¼þµÄ¼Ü¹¹Ò²Ó¦¸ÃÓÐÃÀ¸Ð£¬±Ï¾¹Software ArchitectureÕâ¸ö¸ÅÄîÒ²ÊÇÆðÔ´ÓÚArchitecture¡£
Õâʱºò£¬¼Ü¹¹Õâ¸ö´Ê¾Í»á¸øÎÒÒ»ÖÖ½ÓµØÆøµÄ¸Ð¾õ£ºÓжàÉÙ¿éש£¬Ã¿¿éש×öʲôÓᢷŵ½ÄÄÀïÈ¥£¬Õâ¿éש ºÍ ÄÇ¿éשÔõôð¤ÔÚÒ»Æð»ò»¥ÏàÖ§³Å¡£ µ±È»£¬ÓÉÓÚÈí¼þµÄ¿ÉÒÆÖ²ÐÔ¡¢¿É¸´ÓÃÐÔ£¬´ÓijЩ½Ç¶ÈÀ´½²£¬Èí¼þ¼Ü¹¹Ïà±È½¨Öþ¼Ü¹¹ÓÐÆä¸ü¸´Ôӵĵط½¡£
MVCµ®ÉúÖÁ½ñÒѾ³¬¹ý40ÄêÁË£¨Since 1979£©£¬10¶àÄêǰ¾ÍµÃµ½¹ýºÜ¹ã·ºµÄÌÖÂÛºÍʵ¼ù£¬´©Ô½Ê±¿Õµ½½ñÌì¿Ï¶¨ÓÐÆä·´´àÈõÐÔºÍÄÚÔÚºËÐļÛÖµ¡£ ËäÈ»Èç½ñÕ§¿´ÆðÀ´ºÃÏñÒѾ¹ýÆø¡¢±»ÌÖÂÛ¹ýǧ°Ù±éÁË£¬µ«ÈÔÈ»Óкܶà³ÌÐòÔ±»áÓв»Í¬Àí½âºÍ¿´·¨£¬»ò¶à»òÉÙ¡£ÕâÊǺÜÕý³£µÄ£¬ÉÏÃæÒ²Ìáµ½Á˲¿·ÖÔÒò£¬ÕâÀï¾ßÌåÔÙÕ¹¿ªÏ¡£
1 MVCÔÚ¾µäÈý²ã¼Ü¹¹ÀïµÄλÖÃ
MVCÊÇÒ»ÖÖͨÓüܹ¹Ä£Ê½
- ÔçÆÚPCʱ´úÓ¦ÓÃÔÚ×ÀÃæ¿Í»§¶Ë£¬
- ºóÀ´ÔÚWebʱ´ú±äµÃÁ÷ÐУ¨ÎÒÒÔǰдPHPÒ²ÓùýÏà¹ØMVC¿ò¼Ü£©£¬
- Èç½ñÔÚÒÆ¶¯»¥ÁªÍøÊ±´úÒ²µÃµ½¹ã·ºÓ¦Óá£
ÉÏÃæÕâÈý¸ö³¡¾°µÄÓ¦Ó㬶¼ÊÇÃæÏò¿Í»§µÄ£¬ÐèÒª½»»¥±íÏֵġ£
´ÓMVCÃüÃûÖеÄView£¨ÊÓͼ£©Ò²¿ÉÒÔ¿´³ö£¬MVCģʽӦÓÃÔÚÈí¼þϵͳ¼Ü¹¹ÀïµÄ±íÏֲ㡣
ÔÚÒµ½çij֪Ãû¹«Ë¾µÄ¹Ù·½ÎĵµÀҲÃ÷È·°ÑMVC·ÅÔÚWeb Presentation PatternsÏ¡£

ÎÒÖ®ËùÒÔûÓÐÔÚÉÏͼÖжÔM-V-CÌí¼Ó¼ýÍ·ÏßÌõ£¬ÊÇÒòΪÔÚÕâÒ»µãÉÏ£¬²»Í¬³ÌÐòÔ±Ò²Óв»Í¬Àí½âºÍʵ¼ù¡£
ÕâÊǵÚÒ»¸öÐèÒªÃ÷È·µÄµã£ºMVC¼Ü¹¹Ä£Ê½ÔÚ¶à²ãϵͳ¼Ü¹¹ÀïµÄÓ¦Ó÷¶Î§¡£
×ó²à ÒµÎñ±íÏÖ²ã-ÒµÎñ·þÎñ²ã-»ù´¡·þÎñ²ã ÊÇÒÆ¶¯¶ËÈý²ã¼Ü¹¹Ä£Ê½£¬Î´Éæ¼°µ½ C/S ½»»¥£»ÓÒ²àÊÇWeb B/S³¡¾°µÄÈý²ã¼Ü¹¹Ä£Ê½¡£
ÒòΪÓÐЩӦÓûá±È½Ï¼òµ¥£¬¸ù±¾²»ÐèÒªÒµÎñ·þÎñ»ò»ù´¡·þÎñ²ã£¬´¿´â¿¿Ò»¸öMVC£¨»òÕßVC£©¾ÍÄܽ»¸¶³öÒ»¸öMobile/Web App£»
¶øÇÒÔÚһЩҵÎñϵͳÀWebǰ¶Ë/×ÀÃæ¿Í»§¶Ë/ÒÆ¶¯App Ò²¿ÉÄܻᱻ¼ò»¯Îª ´óǰ¶Ë/´óÖն˱íÏֲ㣻
ËùÒÔ¿ÉÄÜ»ùÓÚ²»Í¬ÐÅÏ¢£¬²»Í¬³ÌÐòÔ±¶Ô´Ë»áÓв»Í¬ÈÏÖª¡£
µ«Ëæ×ÅÓû§ÖÕ¶ËÓ¦ÓõÄÖØÒªÐԺ͸´ÔӶȵÄÌáÉý£¬ÒѾ´Ó¼òµ¥Ó¦Ó÷¢Õ¹µ½¸´ÔÓ¶àÍŶÓÐͬµÄƽ̨ÐÍ»òº½Ä¸¼¶Ó¦Ó㬽ö¿¿Ò»¸öMVCÀ´Íê³É½»¸¶ÊDz»ºÏÊʵġ£
ÎÒÃÇÒ²¿ÉÒÔ·´¹ýÀ´Ï룬³ÌÐòÔ±»á°ÑÒÔÏ´úÂë·ÅÔÚ¿Í»§¶Ë´úÂëµÄÄÄÒ»²ã£º
- ͨÐÅÐÒéµÄ½á¹¹¶¨Ò壬ÒÔ¼°ÏàÓ¦µÄsocketÁ¬½ÓºÍͨÐÅ´úÂë¡£
- Ò»¸öÒµÎñÏà¹ØÇÒUIÎÞ¹ØµÄÆ½Ì¨¿ª·ÅÄÜÁ¦¡£
- Crash²¶»ñ¡¢¿¨¶Ù¼à¿Ø¡¢ÈÕÖ¾ÂñµãµÈ¹¦ÄÜʵÏÖ£¬±ÈÈçAndroidÔÚ×öAPMÏà¹ØÊÂÇéʱ»á²ÉÓÃAOP·½Ê½£¬ÀûÓÃASM¡¢AspectJµÈ·½°¸À´×ö×Ö½ÚÂë²å×®¡£
2 Òµ½ç»ùÓÚMVCģʽµÄ²»Í¬Êµ¼ù
Ç°ÃæÌáµ½²»Í¬³ÌÐòÔ±¶ÔMVCģʽµÄÀí½âºÍʵ¼ù´æÔÚ²îÒì
Òµ½ç´ó³§ÒàÈ»£¬ÒÔÏ»á½áºÏÒµ½çһЩ֪ÃûÇÒÓÐÓ°ÏìÁ¦µÄ¹«Ë¾ÔÚMVCģʽÉϵÄʵ¼ù£¬×ö½øÒ»²½µÄÕ¹¿ªÌÖÂÛ¡£
ÖªÃû¹«Ë¾A
ÖªÃû¹«Ë¾AÔÚÖ¸µ¼¿ª·¢ÕßʹÓÃMVCʱ£¬ÍƼöÏÂͼ·½Ê½£º

¿ÉÒÔ¿´³öÔÚËûÃǵÄʵ¼ùÉÏ£º
- Controller¿ÉÒÔÒýÓÃViewºÍModel¡£
- View¿ÉÒÔÒýÓÃModel¡£
- ÕâÀïµÄModelÇãÏòÓÚÊÇPassive¡£
ͬʱ£¬ËûÃǽ¨Ò飺
- ÔÚÇ¿ÀàÐÍÊÓͼ³¡¾°£¬¿ØÖÆÆ÷´ÓÄ£ÐÍ´´½¨²¢Ìî³äViewModelʵÀý£¬¸ÃViewModel ʵÀý°üº¬ÒªÔÚ¸ÃÊÓͼÉÏÏÔʾµÄÊý¾Ý¡£
- µ±¿ØÖÆÆ÷ÓÉÓÚÔðÈιý¶à¶ø±äµÃ¹ýÓÚ¸´ÔÓʱ£¬Ò²¾ÍÊÇÒµ½çÏ·³ÆµÄ¡°MVC means Massive View Controller¡±£¬ÐèÒª½«ÒµÎñÂß¼´Ó¿ØÖÆÆ÷ÒÆ³ö²¢ÍÆÈëÓòÄ£ÐÍÖС£
ÖªÃû¹«Ë¾B
˵µ½Massive View Controller£¬ÖªÃû¹«Ë¾BÔÚÒÆ¶¯»¥ÁªÍø·½ÐËδ°¬µÄʱºò£¬ÍƼöÏÂͼËùʾµÄMVCʵ¼ù·½°¸£º

ÉÏͼ³ÊÏÖ³ö£º
- ControllerÒýÓÃViewºÍModel¡£
- Modelͨ¹ýһЩËÉñîºÏ·½Ê½À´´¥´ïController£¬Èç¹ã²¥Í¨Öª¡¢callbackµÈ£¬Çý¶¯Controller×ö³öÏìÓ¦¡£
- Viewͨ¹ý´úÀíģʽµÈ·½°¸ÈõÒÀÀµController£¬ÓÉController¶Ô¸÷ÖÖÓû§²Ù×÷¡¢UIäÖȾËßÇó×ö³öÏìÓ¦¡£
- ¶øViewºÍModelÖ®¼äÊǸôÀëµÄ£¬Model±ä»¯ºó¶ÔViewµÄ¸üвÙ×÷È«²¿ÓÉController¸ºÔð¡£
²»¹ýÏàÓ¦µÄ¹Ù·½ÎĵµÒѾ±»ÉùÃ÷ÊǹýÆÚÎĵµÁË£¬²¢±¸×¢²»Ò»¶¨ÊÇĿǰµÄ×î¼Ñʵ¼ù¡£
Êǵģ¬Ëæ×ÅÒÆ¶¯»¥ÁªÍøÅ·¢Õ¹£¬Ê®ÄêǰµÄ¡°×î¼Ñʵ¼ù¡±±»Ò»Â·¶àÖÖÌôÕ½ ¡ª¡ª ÔÚ²ÉÓÃÕâÖÖ·½°¸µÄ¿ª·¢ÁìÓòÖУ¬ÈçºÎÖØ¹¹Massive View ControllerΪLighter View ControllerÒѾ³ÉΪÁËÒ»¸öרÌâ¡£
¶Ô±ÈºÍ˼¿¼
AºÍBµÄÒìͬµã
- Ïàͬµã£ºModel°üº¬ ËùÐèµÄÊý¾Ý½á¹¹·â×°£¬ÒÔ¼°ÏàÓ¦Êý¾Ý²Ù×÷µÄ·½·¨¶¨Òå¡£¼´Data + ±¾µØ»òÔ¶¶ËµÄCURD¡£
- ²îÒìµã£ºÔÚÖªÃû¹«Ë¾A¸øµÄͼÖУ¬View¿ÉÒÔÒýÓÃModel£¬¶øÔÚÖªÃû¹«Ë¾B¸øµÄͼÖÐÔò²»ÐС£
һЩÎÊÌâºÍ˼¿¼
- ViewÓмýÍ·Ö¸ÏòModel£¬ÕâÀïµÄÒýÓùØÏµÊÇָʲô£¿ÊÇView³ÖÓÐModel.DataÊý¾Ý¶ÔÏ󣬻¹ÊÇViewµ÷ÓÃModel.CURD·½·¨¡£
- ControllerµÄ±¾ÒâÊÇControing Logic£¬ÄdzýÁËViewControllerÍ⣬ÊÇ·ñ»¹¿ÉÒÔÓÐÆäËüµÄ XxController£¬±ÈÈç DataSourceController¡¢NotificationController£¿
- ´ÓÃüÃûÉÏ¿´£¬¼ÈÈ»ViewController ¼ÈÓÐView ÓÖÓÐController£¬ÄÇΪʲô°ÑËü·ÅÔÚ CÀïÃæ£¬¶ø²»·ÅÔÚVÀïÃæÄØ£¿±ÈÈçµ±ÎÒÃÇÔÚiOS/Android¿ª·¢ÖÐÒýÈëMVVMģʽºó£¬ViewController»òActivityÊôÓÚM-VM-VµÄÄIJ¿·ÖÄØ£¬´úÂë·ÅÔÚÄĸöĿ¼ÏÂÄØ£¿
- ÎÒÓÐÀàÃûʹÓÃViewModelºó׺¾Í´ú±íÎÒʹÓÃMVVMģʽÁËÂð£¿
Martin Fowler
×÷Ϊ
- ¡¶Öع¹ : ¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ¡·¡¢¡¶ÆóÒµÓ¦Óüܹ¹Ä£Ê½¡·µÈÖø×÷µÄ×÷Õߣ»
- Ãô½ÝÈí¼þ¿ª·¢ÐûÑÔ´´×÷ÕßÖ®Ò»£»
- MVVMģʽµ®Éúʱ²Î¿¼ÒýÓõļ¼Êõר¼Ò¡£
Martin Fowler¸øµÄMVCģʽͼÈçÏ£º

ºÍÉÏÃæÖªÃû¹«Ë¾AºÍBµÄͼ£¬ÓÖ²»Ò»ÑùÁË£¬ ²»¹ýËûÕâÀïÒ²ÊÇÈÏΪView¿ÉÒÔÒýÓÃModelµÄ¡£
MVCºÍDDD
Martin FowlerºÍ¡¶ÁìÓòÇý¶¯Éè¼Æ¡·×÷ÕßEric EvansÒ²ÌÖÂÛ¹ýMVCÖÐModelµÄÉè¼ÆÀíÄ
- ƶѪģÐÍ£º½«Model·ÖΪ¼ò£¨pin£©µ¥£¨xue£©µÄModelÊý¾Ý¶ÔÏ󣬺ʹ¦Àí²Ù×÷Êý¾Ý¶ÔÏóµÄService/Manager/BizLogicµÈ¡£
- ʾÀý£ºÎªaPersonÐÞ¸Äname£¬ÔòÓÉ CitizenService.changeNameOfPerson( aPerson ) ÕâÖÖ·½Ê½À´ÊµÏÖ¡£
- ³äѪģÐÍ£º½«¶ÔÓ¦ÁìÓòµÄ´¦ÀíÂß¼·Åµ½ÁìÓòÄ£ÐÍÖУ¬Ê¹µÃÕâ¸öÁìÓòÄ£Ð͸ü±¥£¨chong£©Âú£¨xue£©¡£
- ʾÀý£ºaPersonҪˢÑÀ£¬ÔòÓÉ aPerson.brushTeeth() À´ÊµÏÖ¡£
- ²¹³ä£º³äѪģÐ͸üÓÐÃæÏò¶ÔÏó±à³ÌµÄζµÀ£¬ÓÈÆäÊÇ´îÅä½»Ò×ÁìÓòµÈÒµÎñ³¡¾°£¬¸üÓÐÌå¸Ð¡£²»¹ýÉÔ΢ϸÏëһϣ¬¿ÉÄܾͻᷢÏÖDDD¶ÔÉè¼ÆµÄÒªÇó»á¸ü¸ß£¬´Ó¶ø¶ÔÑз¢ÖÜÆÚºÍÖÊÁ¿±£ÕÏÌá³öÁËеÄÒªÇ󣬲¢ÇÒ¿ÉÄÜÒýÆð¶ÔÏÖÓÐϵͳµÄ´ó¹æÄ£Öع¹¡££¨ºÐÂíµÄDDDʵ¼ù£©
Ò²¾ÍÊÇ˵£¬´óµ½MVC¸÷¸öÄ£¿éµÄÒÀÀµÒýÓùØÏµ£¬Ï¸µ½ModelÖеĴúÂëÉè¼Æ·½Ê½£¬Òµ½ç¶¼Óв»Í¬µÄÀíÄîºÍʵ¼ù¡£
Java Web¿ª·¢ÁìÓòÒ²¶ÔModelµÄÉè¼Æ²úÉú¹ý·Ç³£¼¤ÁÒµÄÌÖÂÛ¡£
С½á
ÏÈÅ׿ª¾ßÌåÄ£¿éµÄ´úÂëÉè¼Æ·½°¸£¬»ùÓÚÒÔÉϼ¸ÖÖÒµ½ç´ó³§»òר¼ÒµÄÃèÊö£¬ÎÒС½áÁËÒÔÏÂÕâÕÅͼ²¢±ê×¢ÁË´ý½âÎÊÌ⣺

ÎÊÌâÒ»£ºÈçºÎ½â¾öMVCÖÐControllerµÄÅòÕÍÓ·Ö×ÎÊÌ⣿
Òª»Ø´ðÈçºÎ½â¾ö£¬ÐèÒªÏÈ˼¿¼ÎªÊ²Ã´ÅòÕÍ¡£
ÎÊÌâ¶þ£ºViewÄÜ·ñÒýÓÃModel£¿
- Òª»Ø´ðÄÜ·ñÒýÓã¬ÐèÒªÏȶ¨ÒåÒýÓùØÏµÊÇʲô¡£
- ÊdzÖÓжÔÏ󣬻¹Êǵ÷ÓÃCURD½Ó¿Ú²Ù×÷¶ÔÏó¡£
- ÓÖ»òÕßÕâÁ½ÕßûÓбØÒªÇø·Ö£¬ÒòΪ³ÖÓеĶÔÏó±¾Éí¾Í¿ÉÄÜ´øCURD½Ó¿Ú¡£
- ²Î¿¼ÉÏÃæÏà¹Ø×ÊÁÏ£¬Ä¿Ç°Òµ½çÓеÄÖ§³Ö¡¢Óеķ´¶Ô¡£
ÎÊÌâÈý£º´æÔÚView -> Model£¬ÄÇôÊÇ·ñ¿ÉÒÔ·´¹ýÀ´´æÔÚ Model -> View£¿
ºÍÎÊÌâ¶þÔÚÃèÊöÉÏÏà·´µ«ÓÖÓйØÁª£¬Èç¹û¶ÔÎÊÌâÔÙ½øÒ»²½ÌáÎʵϰ£º
- ʹÓà -> ÒýÓùØÏµ£¬ÊÇΪÁ˽â¾öʲôÎÊÌ⣿
- ʹÓà -> ÒýÓùØÏµ£¬»á²úÉúʲôÎÊÌ⣿
ÈçͬÎÄÕ¿ªÍ·Ëù˵£¬ÒÔÉÏÎÊÌâÐèÒª½áºÏ¾ßÌ峡¾°À´Õ¹¿ª£¨¼û ʵ¼Ê°¸Àý½áºÏ£©£¬¾¡Á¿´ÓÎñÐéµ½Îñʵ¡£
3 Redux-like Architecture and Framework
Ëæ×Åǰºó¶Ë·ÖÀëµÃ¸ü³¹µ×£¬ÖÕ¶ËÉ豸ÐÔÄܺÍÓû§ÌåÑéÖØÒªÐÔµÄÌáÉý£¬Ç°¶ËÁìÓòÒ²µÃµ½ÁËÅ·¢Õ¹£¬¿ª·¢·½Ê½Ò²ÓÐÁ˱ȽϴóµÄ±ä»¯£¬MVC-like·½Ê½²»ÔÙÊÇÖ÷Á÷£º
- UI¿ª·¢·½Ãæ´ÓÔçÆÚµÄÃüÁîʽµ½ÏÖÔÚµÄÉùÃ÷ʽ¡£
- ÕûÌåÓ¦ÓúÍÒµÎñÂ߼ʵÏÖ·½Ã棬´ÓÔçÆÚµÄOOPд·¨£¬×ªÏò»ùÓÚFPµÄÏìӦʽ±à³Ì¡£±ÈÈçReduxµÄÊý¾ÝÁ÷¡¢ReactµÄHookÌØÐԵȡ£
- ¸÷ÖÖ¿ò¼ÜÅ·¢Õ¹£¬Ò»Ð©¸ÅÄîºÍģʽµÄÌá³ö¡¢Êµ¼ùÓ¦Ó÷½Ã棬ÎÒ¸öÈËÈÏΪÊÇÁìÏȲ¢Ó°Ïì¿Í»§¶ËµÄ¡£
- ÆäÖÐReduxÊÇÒ»¸ö¾µä°¸Àý£¬²¢ÇÒÎÒ¾õµÃRedux¹Ù·½Ò²Í¦¿ª·Å°üÈݵ쬱ÈÈçDan AbramovдµÄ¡¶You Might Not Need Redux¡·¡£
ºÍMVCÑÓÉìÅÉÉú³öµÄMVC FamilyÒ»Ñù£¬ReduxÌá³ö»òÖØÐ´ø»ðÁËÊý¾ÝÁ÷¡¢×´Ì¬¹ÜÀíµÈ¸ÅÄ¿ªÊ¼Ó°ÏìÆäËüƽ̨ÁìÓò£¬²¢µ®ÉúÁËһЩ¿ò¼Ü¡£
±ÈÈçReSwift¡¢swift-composable-architecture£¬ÒÔ¼°SwiftUIÀïµÄState and Data Flow¡£

ËäÈ»ÎÒҲд¹ýµãReact£¬µ«²¢Ã»ÓÐÔõôʵ¼ù¹ýRedux¡£
²»¹ýÕâЩ±ä»¯ºÍÓ°Ï죬ÊÇÎÒÃÇÔÚ½â¾öÎÊÌâµÄ¹ý³ÌÖÐÐèÒª½áºÏ¿¼Âǵġ£
Èý ʵ¼Ê°¸Àý½áºÏ
1 ³£¼ûµÄÊý¾Ý½á¹¹¶¨ÒåºÍʹÓÃ
³ÌÐò = Êý¾Ý½á¹¹ + Ëã·¨¡£ ¡ª¡ª Nicklaus Wirth£¬PascalÖ®¸¸£¬Í¼Áé½±»ñµÃÕß
Õâ¾ä»°Õ§¿´ÆðÀ´¿ÉÄÜ»áÓеãÃæÏò¹ý³ÌÉè¼ÆµÄ¸Ð¾õ£¬µ«OOPÖеĶÔÏóÆäʵҲÊÇÓÉÊý¾Ý+·½·¨×é³É£¬¶øFPÔò¸ü²»ÓÃ˵ÁË¡£

ÔÚ±àÂ뿪·¢»î¶¯ÖУ¬»á´æÔÚÒÔÉÏ3ÖÖÊý¾Ý½á¹¹¶¨ÒåºÍʹÓ÷½Ê½£º
- ÔÉúÊý¾Ý½á¹¹£¬±ÈÈçlist/array¡¢map/dictionary¡¢tupleµÈ¡£
- ÀàËÆMyContactµÄÊý¾Ý½á¹¹¶¨Ò壬ÓÉ·þÎñ¶Ë·µ»ØµÄÊý¾Ý½øÐÐת»¯£¬²¢¿ÉÄܸù¾ÝÒµÎñÂß¼°´Ðè¼ÓÉÏһЩ±ê־λ¸øControllerÏû·Ñ¡£
- ÀàËÆContactViewModelÕâÑùµÄ´¿´âΪÊÓͼView·þÎñµÄÊý¾Ý½á¹¹¶¨Òå¡£
²¹³ä£º £¨1£©MyContact ºÍ ContactViewModel Ö»ÊÇÌØÒâÇø·ÖµÄÃüÃû£¬Êµ¼ÊÉÏ MyContact Ò²¿ÉÒÔÊÇ´¿´âΪÊÓͼView·þÎñµÄÊý¾Ý½á¹¹¶¨Òå¡£ £¨2£©µ«ÊÇ£¬ºÏÊʵÄÃüÃûÓÐÖúÓÚ°ïÖúÎÒÃÇ˼¿¼ºÍ±àÂ룬´Ó±í´ïÉϳÊÏÖ³öÎÒÃǵÄÇãÏòºÍÖØµã¡£
"There are only two hard things in Computer Science: cache invalidation and naming things." ¡ª¡ª Phil Karlton
2 ³£¼ûµÄ¶à¸´ÔÓ¿¨Æ¬µÄÁÐ±í³¡¾°
Õâ¸ö³¡¾°¿ÉÒÔ²¿·Ö»Ø´ðÎÊÌâÒ»£ºÎªÊ²Ã´Controller»áÅòÕÍ£¬ÒÔ¼°ÈçºÎ½â¾ö¡£
ÆäËü²¿·Ö´ð°¸ÔòÂäÔÚ¸´ÔÓÒ³Ãæ³¡¾°µÄ¶àdelegate¡¢target-action¡¢notification-observerµÈÊÓͼ½»»¥ÏìÓ¦µÄ´¦ÀíÂß¼ÉÏ¡£
ÎÒÈÏΪ£¬Ö®Ç°·´¶ÔViewÒýÓÃModel£¬¾ÍÊǵ¼ÖÂMVC±ä³ÉMassive View-ControllerµÄÒ»¸öÔÒò¡£
ÁíÒ»¸öÔÒòÎÒÈÏΪÊǹ¤¾ßÁ´Ö»ÌṩÁËViewControllerÕâÑùµÄControllerÄ£°å£¬Òþʽ½Ìµ¼¿ª·¢Õß¶¼ÔÚÕâÀïд´úÂë¡£
ÕâÒ²¿ÉÄÜÊÇÒòΪʮ¼¸ÄêÇ°ÒÆ¶¯»¥ÁªÍø»¹Ã»·¢Õ¹ÆðÀ´£¬Òƶ¯AppµÄ¸´ÔӶȵͣ¬ËùÒÔÌṩÁËÔÚµ±Ê±¼òµ¥¹»Óõķ½°¸¡£

µ±Ö»ÄÜÓÉController ³ÖÓÐ-> ModelµÄʱºò£¬ÄÇôÔڶิÔÓ¿¨Æ¬µÄÁÐ±í³¡¾°ÖУ¬±ØÐëÓÉControllerÀ´¸üÐÂÿ¸öViewµÄÊôÐÔ/״̬¡£
- MyViewControllerÐèҪΪContactCell¸üÐÂËüµÄ¸÷ÖÖÏà¹ØÊôÐÔ£¬ÀàËÆµÄ»¹ÓÐAddressCell¡¢PackageCellµÈ¡£
- MyViewControllerÔÚ¸üÐÂAddressCellչʾǰ£¬¿ÉÄÜ»¹ÐèÒªÏÈΪËü¼ÆËã³öºÏÊʵĸ»Îı¾Õ¹Ê¾ÄÚÈÝ¡£
- MyViewControllerÐèÒªÏìÓ¦²»Í¬CellµÄµã»÷½»»¥ÐÐΪ£¬°üº¬µ«²»ÏÞÓÚ°´Å¥µã»÷¡¢ÊäÈë¿ò±ä»¯¡¢¸»Îı¾Ìø×ª¡¢¼üÅÌÆðÂäµÈ¡£
- MyViewControllerÐèÒªÏìÓ¦CollectionView/TableViewµÄDataSource/Delegate¸÷ÖÖ·½·¨ÊµÏÖ¡£
- MyViewControllerÐèÒªÏìÓ¦Model²ãµÄ±ä¸ü֪ͨ£¬»òÕßÊÇÁíÍâÒ»¸öViewControllerÅ×¹ýÀ´µÄ¹ã²¥Í¨Öª¡£
- ¡¡
È»ºóMyViewController¾Í±¬Õ¨ÁË¡£
Õë¶ÔÕâÖÖ³¡¾°£¬ÎҵĽⷨÊÇ£º
- ͨ¹ýÈÃView->Model£¬»ùÓÚ¹¤³§Ä£Ê½£¬°Ñ×é¼þ»¯Cell»ùÓÚÊý¾Ý¸üеIJ¼¾ÖÂß¼½»¸øView¸ºÔð£¬ÈçcontactCell.configUIWithModel( contactModel )¡£ÕâÑùÓеãÀàËÆÉÏÃæDDDÌáµ½µÄ³äѪModel£¬¾ß±¸¸ßÄÚ¾ÛµÄÌØµã£¬´øÀ´ºÃ´¦£º
- ºÍ¼õÇá¿ØÖÆÆ÷¸ºµ£¡¢ÍÆÈëÓòÄ£ÐÍÀàËÆ£¬Í¨¹ý°ÑÊý¾ÝÇý¶¯²¼¾ÖµÄ´úÂëÍÆÈë×é¼þÓòÄÚ£¬¼õÇáÁËMyViewControllerµÄ¸ºµ£¡£
- ÀûÓÚ×öÕⲿ·Ö×é¼þ»¯CellµÄUI²âÊÔ¡£
- ÀûÓÚÕâЩ×é¼þ»¯ÊÓͼ¸´Óõ½ÆäËü³¡¾°£¬±ÈÈç½»Ò×¹ÜÀí³¡¾°µÄ¶©µ¥¿¨Æ¬¿ÉÒÔ¸´Óõ½ËÑË÷³¡¾°ÖУ¬²»ÓÃÔÚSeachViewControllerÀï¸´ÖÆÕ³ÌùÒ»´ó¶Ñ´úÂ룬ֻÐèÒª´ÓModelȡһ¸öÊý¾Ý¶ÔÏ󶪸ø×é¼þ»¯Cell¼´¿É¡£
- »ùÓÚViewController£¬²ð·Ö³ö²»Í¬Ö°ÔðµÄÀ©Õ¹£¬±ÈÈçMyViewController+Delegateרß´ÔÓÏìÓ¦´úÀíʼþ´¦Àí¡£
- ¶¨Òå³öÆäËüÀàÐ͵ÄController£¬±ÈÈçMyDataSourceController£¬×¨ÃÅΪTableViewÌṩÊý¾ÝÔ´£¬¿ÉÒÔÀà±È²Î¿¼AndroidÖÐListViewµÄAdapter+ViewHolder¡£
¹¤³§Ä£Ê½Ï£¬²úÆ·µÄË¢Æá¡¢ºæ¸É¡¢Ó¡»¨µÈ²Ù×÷»áÔÚÄÚ²¿Íê³É£¬²»»á¶ªÒ»¸öÄ£ÐÍÈÿͻ§È¥×Ô¼ºÌùlogo¡£MVCµÄÿһ²¿·Ö¶¼¿ÉÒÔÓò»Í¬µÄÉè¼ÆÄ£Ê½À´×éºÏʵʩ£¬ÊµÏÖ½âñî»ò¶¯Ì¬Áé»îµÄÄ¿±ê¡£
¶ÔÓ¦ÏÂͼ£º

µ½ÕâÀïÒѾ»Ø´ðÁËÇ°ÃæµÄÎÊÌâÒ»ºÍÎÊÌâ¶þ¡£
¸ü¶à½â·¨¿ÉÒԲο¼ÉÏÃæÌáµ½µÄÏà¹Ø½¨Ò飬±ÈÈçlighter view controllers
ÕâÀï²ÉÓÃÁË VIew -> Model µÄ·½°¸£¬ÓÃÀ´²ÎÓë½â¾öMassive View-ControllerµÄÎÊÌ⣬²¢ÇÒÈÃView¸üÈÝÒ׸´ÓúÍ×öUI²âÊÔ£¬´øÀ´Á˺ô¦¡£
¿ÉÒÔ½áºÏÇ°ÃæÌáµ½µÄ
¡°µ±¿ØÖÆÆ÷ÓÉÓÚÔðÈιý¶à¶ø±äµÃ¹ýÓÚ¸´ÔÓʱ£¬ÐèÒª½«ÒµÎñÂß¼´Ó¿ØÖÆÆ÷ÒÆ³ö²¢ÍÆÈëÓòÄ£ÐÍÖС£¡±
ÔÙ½øÒ»²½ÌÖÂÛÏ¡£
ÎÒµÄÀí½âºÍ¾ÙÀý£º
- ´æÔÚÒ»¸öÊäÈë¿ò£¬ÈÃÓû§Ìá½»ÎïÁ÷µ¥ºÅ¡£
- Óû§ÔÚÊäÈë¹ý³Ì»òÕßÍê³ÉÊäÈëºó£¬ÓÉViewͨ¹ýdelegateģʽ·ÓɸøController×öУÑ飬¶øController¿ÉÄÜ»¹Òª½øÒ»²½ÒÀÀµModelÈ¥×ö¸üÍêÕûµÄУÑ飨ÈçÍøÂçÇëÇóµ½·þÎñ¶Ë£¬ÒòΪÎïÁ÷µ¥ºÅµÄ¹æÔòºÜ¶à¶øÇÒ¿ÉÄܶ¯Ì¬¸üУ©¡£
- µ±ControllerÔðÈιý¶à¡¢´úÂëÅòÕÍ¡¢¹ýÓÚ¸´ÔÓʱ£¬¾Í½«ÎïÁ÷µ¥ºÅÕâ¿éÒµÎñÂß¼ÍÆÈë ÎïÁ÷£¨µ¥ºÅ£©ÓòÄ£ÐÍÖУ¬¼´ÓÉViewÖ±½Óͨ¹ýdelegateģʽ½»¸ø LogisticsModelÀ´×öУÑé¡£
- Ò²ÊÇ View -> Model ¡£
²»Ò»¶¨¶Ô£¬Å×£¨huan£©×©£¨ying£©Òý£¨lai£©Óñ£¨pen£©¡£
ÄÇô£¬´æÔÚVIew -> Model£¬ÓÐʲô»µ´¦Âð£¿
3 Ò»¸öKotlin¿çƽ̨³¡¾°°¸Àý
ÕâÀï²»¾ßÌåÕ¹¿ª½²Kotlin¼°Æä¿çƽ̨Ïà¹ØÄÚÈÝ£¬Ö»ÊÇÃèÊö´ÓMVCģʽ×ö¿çÆ½Ì¨Ç¨ÒÆÊ±Óöµ½µÄÎÊÌâ¡£

ÕâÀïµÄViewController/Activity·ÅÔÚÄÄÀҲºÍÉÏÃæµÄÒ»¸öÎÊÌâÏàºôÓ¦¡£
ËäÈ»D-KMPÖ÷ÕÅͨ¹ýȫй¹½¨¹¤³Ìд´úÂëµÄ·½Ê½À´Êµ¼ù£¬µ«´Óʵ¼ÊÇé¿ö³ö·¢£¬¾ø´ó¶àÊýÏÖÓÐϵͳ¶¼»áÊÇÒÔµ¥µã³¢ÊÔ¡¢½¥½øÊ½µÄ·½Ê½À´Â䵨£¬»ò·¢Õ¹¡¢»ò»Ø³·¡£
ÄÇô£¬ÈçÉÏͼËùʾ£º
- Èç¹ûÔÚ¼ÈÓÐMVC´úÂë½á¹¹ÖУ¬View -> Model£¬ÔÚÕâÖÖ½¥½øÊ½Ç¨ÒƳ¡¾°Ï£¬¾ÍÐèÒªÐÞ¸ÄViewÀ´ÊÊÅäеÄViewModel¡£
- Èç¹û View ²»ÒýÓà Model£¬ÔòÊÇÓÉ ControllerÀ´×ö½ºË®²ãÉèÖøüÐÂÊÓͼ£¨ÃüÁîʽUI£©¡£
- ºóÕߵĺô¦ÊÇ£¬±£³ÖViewµÄ¶ÀÁ¢ÐÔ£¬Ö»ÐèÒªÐÞ¸ÄÕâ¸öÒµÎñ³¡¾°¶ÔÓ¦µÄµ¥¸öController¼´¿É¡£ÒòΪView¾ßÓпɸ´ÓÃÐÔ£¬¿ÉÄÜÔÚÁíÍ⻹û׼±¸Ç¨ÒÆ/¸Ä±äµÄÄ£¿éÀïÒ²ÓÐʹÓá£
ËùÒÔ£¬´Ë´¦²»½¨Òé View -> Model¡£ ÄÇô£¬Ë¶ÔÄØ£¿
4 ˶ÔË´íµÄÎñÐéÌÖÂÛ
µ±ÓгÌÐòÔ±ÒªÍÆ¼öʹÓÃÆäËü¼Ü¹¹Ä£Ê½µÄʱºò£¬Í¨³£¿ªÍ·µÄÒ»¾ä»°¾ÍÊÇÏÈ˵MVCģʽµÄÎÊÌâ¡£
±ÈÈçReSwiftÔÚд Why ReSwift? ʱ£¬¿ªÍ·µÚÒ»¾ä»°¾ÍÊÇ£ºModel-View-Controller (MVC) is not a holistic application architecture.
ÎÒ¸öÈËÈÏΪ
- ¼Ü¹¹ÊÇÒ»¸öÃû´Ê£¨n.£©+¶¯´Ê£¨v.£©¡£
- ¼Ü¹¹£¨n. & v.£©ÊÇΪÁ˰ïÖú ¿ª·¢ÕßÔÚ½»Á÷ʱÓÐÒ»ÖµÄÀí½â¡¢ÔÚÒµÎñÐèҪʱÄܹ»±ãÓÚÀ©Õ¹¡¢ÔÚ³öÎÊÌâʱÄܹ»¿ìËÙ¶¨Î»µÈµÈ£¨¶Ô¿¹ìØÔö£©¡£¾ßÌ廹ÊÇ¿´²ÉÓÃÕâ¸ö¼Ü¹¹µÄµÃʧ£¬Òª½â¾öʲôÎÊÌâ»ò´øÀ´Ê²Ã´ºÃ´¦£¬È»ºó´øÀ´Ê²Ã´³É±¾»ò¸¶³öʲô´ú¼Û¡£
- ¼Ü¹¹£¨v.£©Í¨¹ý·ÖÅäÿ²¿·Ö´úÂëµÄÖ°Ôð²¢ÎªËûÃÇÈ¡Ãû£¨ºÃ±ÈiOS/Android¿ª·¢¹¤³ÌʦÕâÑùµÄ¸ÚλÃû³Æ£¬ÈñðÈËÒ»¿´¾ÍÖªµÀÊÇ×öʲôµÄ£©£¬È»ºó¼¸¸öÃû×Ö¼ÓÔÚÒ»Æð ÐγÉÁ˼ܹ¹Ä£Ê½Õâ¸ö³éÏó¸ÅÄî¡£
- ´Ó¾ßÌåµ½³éÏó£¬È»ºóÔÙÓÉÕâ¸ö³éÏó¸ÅÄîÈ¥Ö¸µ¼³ÌÐòԱʵ¼ùд´úÂ룬´Ù½øÁ˼ܹ¹µÄ´«²¥£¬±ÈÈçMVC¡¢MVP¡¢MVVM¡¢MVVM-C¡¢MVI¡¢MV-Whatever£¬VIPER£¬Redux and More¡¡
- ÓÐʱºò²¢²»Ò»¶¨ÊǼܹ¹Ä£Ê½µÄ´í£¬»¹ÓпÉÄÜÊÇÆ½Ì¨/¿ò¼ÜÔÚÈüܹ¹Ä£Ê½×Ô´«²¥Ê±²ÉÓõľßÌå·½°¸³öÁ˵ãÎÊÌ⣬ÓÖ»òÕßÊÇ¿ª·¢Õß×Ô¼ºÐ´´úÂëµÄÎÊÌâ¡£
- ÓÐʱºò¼Ü¹¹Ä£Ê½Ö®¼äÒ²²»ÊÇ»¥³âµÄ£¬Ò²¿ÉÒÔÔÚ²»Í¬³¡¾°Ï»¥²¹¡£±ÈÈçÔÚMVCÀÿ¸öÒµÎñ±íÏÖÄ£¿é²»Ò»¶¨ÒªÓÐÈý¸öÔªËØÆë¾Û£¬ÉõÖÁÒ²¿ÉÒÔ VC-M-VC ¹²ÓÃÒ»¸öM£¨¿É²Î¿¼Ë¹Ì¹¸£iOS¿ª·¢¿Î³ÌÄÚÈÝ£©¡£
ÓÐÒ»¸öʵ¼ÊµÄÒµÎñ³¡¾°ÊÇÕâôʵ¼ùµÄ£º

MVCºÍMVVMÔÚÒ»¸öÒµÎñ³¡¾°ÀïÏà½áºÏ¡£
ÕâÀïÌáµ½ÁËMVVM£¬ Ç°ÃæµÄKotlin¿çƽ̨ͼ£¬³ýÁËÉæ¼°µ½ View -> Model µÄÒýÓùØÏµÊÇ·ñÓ¦¸Ã´æÔÚµÄÌÖÂÛ£¬Ò²Éæ¼°µ½ÁËDeclarative-UIºÍMVVM¼Ü¹¹Ä£Ê½µÈ¸ÅÄ ÔÙ˳±ãÕ¹¿ªÏ¡£
1£©MVVM ºÍ MVW
MVC¡¢MVP ºÍ Declarative-UI ÕâÈý¸öÃû´Ê¸ÅÄî¶¼Óм¸Ê®ÄêÀúÊ·ÁË£¬ÆäÖÐÉùÃ÷ʽUIÔÚ½üÊ®ÄêÓÖ¿ªÊ¼»ðÁËÆðÀ´£» ¶øMVVMÔòÓÐÊ®¼¸ÄêÀúÊ·¡£
¹Ù·½¶ÔMVVMÓÐÕâôһЩÃèÊö£º
- VºÍVMÊÇÒ»¶Ô¶àµÄ¹ØÏµ£¬¼´View 1:n ViewModel¡£Ïà±ÈÓÚ MVCÀï Controller 1:n View£¬ÏÔÈ»MVCµÄC¸üÈÝÒ×ÅòÕÍ£¬ËùÒÔÉÏÃæÒ²Ìáµ½ÁËʹÓöàController·½°¸¡£
- VÒýÓÃVM£¬VM²Ù×÷M£¬¶øVM²»ÐèÒªÒýÓÃV£¨ºÍMVP²»Í¬£©¡£VM×÷ΪVµÄÉÏÏÂÎÄ£¬°üº¬VËùÐèÓÃÀ´Õ¹Ê¾µÄÊý¾Ý£¬ÏìÓ¦V±»Óû§´¥·¢µÄʼþ¡£
- V¶ÔMÎÞ¸ÐÖª£¬·´¹ýÀ´ M ¶Ô VºÍVM Ò²ÎÞ¸ÐÖª¡£ÕûÌåÊÇËÉÉ¢½âñîµÄģʽ¡£
- µ±VMµÄÊôÐÔÖµ·¢Éú±ä»¯Ê±£¬Í¨¹ýÊý¾Ý°ó¶¨·½Ê½´«´ï¸øV¡£Õâ¾ÍÐèÒªÓлúÖÆÖ§³Å£¬ÓжÔÓ¦µÄ»úÖÆMVCÒ²ÄÜ×öÊý¾Ý°ó¶¨¡£
»ùÓÚÉÏÊöÃèÊöÎÒ»ÁËÏÂͼ£º

×ÜÌåÀ´Ëµ£¬MVVMÊÇ»ùÓÚʼþÇý¶¯µÄ¡¢ÒÔÊý¾Ý°ó¶¨»úÖÆÎªÖ§³ÅµÄËÉÉ¢½âñî¼Ü¹¹Ä£Ê½¡£
- ËüµÄǰÌáÊÇÓÐϵͳ/ƽ̨/¿ò¼ÜµÄ»úÖÆÖ§³Å£¬²»È»ÊµÏֳɱ¾ºÍ¸´ÔÓ¶ÈÓеã´ó¡£
- Ïà±ÈMVC£¬ËüµÄÓÅÊÆÊÇÊÓͼ¿ØÖÆÂß¼²»Ì«»áÅòÕÍ£¬´úÂëµ¥Ôª¸üÈÝÒ×±»²âÊÔ£¬ÔڿɶÁÐÔ¡¢¿Éά»¤ÐÔÉϸüºÃ¡£
- Ëü¿ÉÄÜ´øÀ´µÄ³É±¾/ÎÊÌâÊÇÈëÃÅÉÏÊÖ½ÏÄÑ£¬¼òµ¥³¡¾°ÏÂʹÓÃÈÝÒ×¹ý¶ÈÉè¼Æ£¬¸´ÔÓ³¡¾°Ï³öÎÊÌâµ÷ÊԱȽÏÂé·³¡£
¿¼Âǵ½ViewControllerÔڸó¡¾°µÄ±¡½ºË®ÌØÖÊ£¬ÒÔ¼°Ò²²ÎÓëÊÓͼչʾºÍÓû§ÏìÓ¦£¬ËùÒÔÎÒ°ÑËü·ÅÔÚVÀï¡£
ÓÉÓÚÒµ½çÓÐÌ«¶àMV-¿ªÍ·µÄģʽÃû´ÊÁË£¬ËùÒÔAngular¹Ù·½Ö±½ÓÉùÃ÷ÁËÒ»¸öMVW£º
I hereby declare AngularJS to be MVW framework - Model-View-Whatever. Where Whatever stands for "whatever works for you".
ÕâÖÖÉùÃ÷ÓиöºÃ´¦£¬¾ÍÊÇÃâÈ¥ÁË˶ÔË´í/˺ÃË»µµÄÕùÖ´£¬¶øÖØµã¹Ø×¢ÓÚËÊʺϡ£
5 ˶ÔË´íµÄÎñʵ°¸Àý£ºVIPERºÍ·Ö²ãÑݱä
¹ØÓÚ˶ÔË´í/˺ÃË»µ£¬¿ÉÒÔÔÙÀ´¿´Ò»¸ö°¸Àý¡£
VIPER ¼Ü¹¹Ä£Ê½µÄÓ¦ÓÃ
VIPER¸ÅÄîÓÉView¡¢Interactor¡¢Presenter¡¢Entity¡¢Router¼¸¸öÔªËØ×é³É£¬´óÖÂÈçÏ£º

ÎÒ֮ǰд¹ýMVC¡¢MVP¡¢MVVM¡¢VIPERµÈ¼Ü¹¹Ä£Ê½ÏµĴúÂ룬ÍêȫʵÏÖ»ò²»ÍêȫʵÏÖ¡£
ÓÐÒ»´Î£¬ÎÒÔÚij¸öÒµÎñ±íÏÖÄ£¿éÀïÓ¦ÓÃVIPER£¬È»ºó¶¨ÒåÁËÒ»¸öXxxNetworkInteractorÀ࣬ÓÃÀ´¸ºÔð×öÍøÂçÇëÇó¡£

VIPER¼Ü¹¹Ä£Ê½µÄÑݱä
ºóÀ´Ëæ×ÅÒµÎñ³¡¾°µÄ±ä»¯£¬Ò»¸öÒµÎñÄ£¿é¿ÉÄÜÐèÒª¶Ô½Ó¶àÌ×Íø¹Ø·þÎñ£¬ XxxNetworkInteractor¾ÍÒª×ö³éÏó¸ôÀ룬Ïû³ýÒµÎñÂß¼¶Ô¶àÌ×Íø¹ØÇëÇóµÄ¸ÐÖª£¬²¢ÇÒÓ¦Óõ½ÆäËüÒµÎñÄ£¿é¡£Õâ¾ÍÓеãÏñ VPER - I - VPER ģʽ ¡ª¡ª ¶à¸öÒµÎñÄ£¿é¶Ô Interactor ½øÐÐÁ˸´Óá£

½ø»¯
- Ëæ×ŶԽÓÍø¹ØÊýµÄÔö¼Ó¡¢Íø¹ØÄÜÁ¦µÄÔöÇ¿£¬XxxNetworkInteractorÒ²ÅäÌ×½¨ÉèÁ˸ü¶àÄÜÁ¦¡£
- Ëæ×ÅʹÓÃXxxNetworkInteractorµÄÄ£¿éÔ½À´Ô½¶à£¬²»Í¬ÒµÎñµÄһЩͨÓÃËßÇóºÍ´¦ÀíÂß¼Ò²ËæÖ®Ôö¼Ó¡£
- Ëæ×ÅXxxNetworkInteractorµÄ¹¦ÄÜÔ½À´Ô½Ç¿´ó£¬´úÂëÔ½À´Ô½¶à£¬Öð½¥ÐèÒª³éÀë³öÒ»¸öµ¥¶ÀÄ£¿é£¬²»¹ÜÊÇ´ÓÌá¸ß±àÒëËÙ¶È£¬»¹ÊÇ´Ó·â×°±©Â¶µÈ½Ç¶È¡£
ÓÚÊÇ£¬XxxNetworkSDK.frameworkµ®ÉúÁË¡£

ÍË»¯
ÔÙºóÀ´£¬Ëæ×ż¼ÊõºÍÒµÎñµÄ±ä»¯£¬µ×²ãÍø¹Ø·þÎñATop³ÉΪÁËÁìÓò·¶Î§ÄÚµÄÊÂʵ±ê×¼£¬Ö®Ç°Óöµ½µÄÎÊÌâÒ²ÏûʧÁË£¬¶øXxxNetworkSDKÓÖ´øÀ´Ò»Ð©³É±¾£¬±ÈÈçÒªÅäÌ×ATopµÄÄÜÁ¦Éý¼¶½øÐеü´úά»¤¡£
´Ëʱ£¬XxxNetworkSDK¿ÉÒÔÍ˳öÀúÊ·Îę̀ÁË£¬ÈÃÒµÎñ9Ä£¿éÖ±½ÓÃæÏòATop±à³Ì£¬ÕâÑù¼È½µµÍÁËά»¤³É±¾£¬ÓÖ´øÀ´ÁËÒ»¶¨µÄ°ü´óСÊÕÒæ¡£

ÒԺ󣬼ÙÈçÓÐÁíÍâÒ»¸öÁìÓò·¶Î§µÄÒµÎñ³¡¾°£¨²ÉÓÃÁËXTop£©£¬Òª¸´ÓÃ×îÉϲãµÄÒµÎñÄ£¿é£¬ ÓÉÓÚÔÚÁíÍâÒ»¸öÁìÓò·¶Î§£¬ÒµÎñÄ£¿éÒª´Ó µ÷ÓÃATop ¸ÄΪµ÷ÓÃXTop¡£
ÄÇô£¬½ÓÊÖ»ò¸ºÔðÇ¨ÒÆ¸´ÓõĿª·¢Õߣ¬»á²»»áÔÚÏ룺ΪʲôÕâЩҵÎñÄ£¿éÖ±½Óµ÷ÓÃATop£¬¶øÃ»ÓÐʹÓÃÒ»¸öXxxNetworkInteractorÀ´×ö·Ö²ã¸ôÀëÄØ£¿ÈÃÒµÎñ²»Òª¸ÐÖª¾ßÌåµÄÊý¾Ý¿â»òÍøÂç·þÎñʵÏÖ¡£
- Èç¹ûÓУ¬ËûÖ»Òª×öÒ»¼þÊÂÇ飺ÈÃXxxNetworkInteractor¶Ô½ÓXTop¼´¿É¡£
- Èç¹ûûÓУ¬ËûÐèÒªÈ¥Ìæ»»ÐÞ¸Äÿ¸öÒµÎñÄ£¿éµÄµ÷ÓôúÂë¡¢·µ»ØÖµ´¦ÀíµÈµÈ¡£
ËÄ Ð´ÔÚ×îºó£¬»Øµ½ÎÊÌâ
²»¹ÜÊÇÎñÐéµÄÌÖÂÛ£¬»¹ÊÇÎñʵµÄ°¸Àý£¬»òÕßÊÇAngularµÄ¡°whatever works for you¡±µÄ¹Ûµã£¬ ½áÂÛÊÇûÓÐ˶ÔË´í¡¢ËºÃË»µ£¬Ö»ÓÐʵ¼Ê³¡¾°ÏÂÒª½â¾öµÄºËÐÄÎÊÌâ¡£
±øÎÞ³£ÊÆ£¬Ë®ÎÞ³£ÐΡ£ ÄÇô£¬»Øµ½ÏëÒª½â¾öµÄÎÊÌ⣺
ÔÚÓɲ»Í¬¿ª·¢ÈËÔ±³ÖÐøµü´ú¡¢½øÐй¦ÄÜÉý¼¶µÄÈí¼þ¿ª·¢»î¶¯ÖУ¬ÈçºÎ±£ÕϾßÓи´ÔÓÂß¼µÄÉ̼ҾӪ¹¤¾ßµÄ²úÆ·ÖÊÁ¿¡£
ÎÒµÄÏë·¨ÊÇÒԿɲâÐÔ×÷ΪÊֶΣ¬À´±£ÕϹ¦ÄÜÉý¼¶¸ÄÔì»ò´úÂëÖØ¹¹ºó£¬¿ÉÔÚºÏÀíʱ¼ä·¶Î§Äڵõ½³ä·Ö»Ø¹éÑéÊÕ£¬±£ÕÏÏà¹Ø×é¼þ¡¢Ä£¿é»òÕûÌå²úÆ·µÄÖÊÁ¿¡£
¾ßÌåµÄ·½°¸ÊµÊ©ÉÏ£¬ÒòΪÊÇÒԿɲâÐÔÎªÖØÒª¹Ø×¢µã£¬ÔÙ½áºÏĿǰµÄ¼¼Êõ·½Ïò£¬ÎÒ»áÇãÏòÓÚ²ÉÓÃMVVM¡£
- MVVMµÄ¼Ü¹¹Ä£Ê½ÔÚÀí½âºÍÈÏÖªÉϱȽϳÉÊ죨Ӧ¸ÃÊÇÒÆ¶¯¶Ë¿ª·¢ÁìÓòTOP2Á÷Ðеģ©£¬±ãÓÚʵʩºÍ´«²¥£¬²¢Í¨¹ýģʽµÄÃû³ÆÀ´ÌåÏÖҪǿµ÷µÄ¹Ø×¢µã£º¿É²âÐÔ¡£
- MVVM¿ÉÒÔ¸üºÃµØ½áºÏSwiftUI+Combine¡¢Kotlin¿çƽ̨µÈ¼¼Êõ·½Ïò¡£
- MVVMÍêÈ«°æµÄÉÏÊÖÃż÷ºÍ¼òµ¥³¡¾°µÄ¹ý¶ÈÉè¼ÆÎÊÌ⣬¿ÉÒÔͨ¹ý²ÉÓò»ÍêÈ«°æMVVMÀ´½â¾ö¡£
- ²»ÍêÈ«°æµÄMVVM¿ÉÒÔcoverÊÊÓÃÓÚ¼òµ¥³¡¾°µÄMVC£¬½üËÆÓÚ ³¬¼¯-×Ó¼¯ ¹ØÏµ¡£
- ËäȻҲ¿ÉÒÔͨ¹ý¶àControllerµÄ·½Ê½À´½â¾öMVCÅòÕÍÎÊÌ⣬µ«MVCµÄÃüÃûÔÚʵ¼ùÖоÍÈÝÒ×ÈóÌÐòÔ±Èõ»¯µô¿É²âÐÔÕâ¸ö¹Ø×¢µã£¨Ò²¿ÉÄÜÊÇÎÒ¸öÈËÀí½âºÍʵ¼ù²»¹»ÕýÈ·£©¡£
- ¸´ÔÓ³¡¾°µÄµ÷ÊÔÎÊÌâ¡¢¸ü¶à¿É²âÐÔµÄʵ¼ù£¬ÐèÒªÔÙÃþË÷Ï£¬Ò²Ï£ÍûµÃµ½Ïà¹Ø·ÖÏíºÍÖ¸µã¡£
|