±»Îó½âµÄ
MVC
MVC µÄÀúÊ·
MVC£¬È«³ÆÊÇ Model View Controller£¬ÊÇÄ£ÐÍ (model)£ÊÓͼ
(view)£¿ØÖÆÆ÷ (controller) µÄËõд¡£Ëü±íʾµÄÊÇÒ»ÖÖ³£¼ûµÄ¿Í»§¶ËÈí¼þ¿ª·¢¿ò¼Ü¡£
MVC µÄ¸ÅÄî×îÔç³öÏÖÔÚ¶þÊ®ÊÀ¼Í°ËÊ®Äê´úµÄ Ê©ÀÖÅÁ¿Ë ʵÑéÊÒÖУ¨¶Ô£¬¾ÍÊÇÄǸö·¢Ã÷ͼÐÎÓû§½çÃæºÍÊó±êµÄʵÑéÊÒ£©£¬µ±Ê±Ê©ÀÖÅÁ¿ËΪ
Smalltalk ·¢Ã÷ÁËÕâÖÖÈí¼þÉè¼ÆÄ£Ê½¡£
ÏÖÔÚ£¬MVC ÒѾ³ÉΪÖ÷Á÷µÄ¿Í»§¶Ë±à³Ì¿ò¼Ü£¬ÔÚ iOS ¿ª·¢ÖУ¬ÏµÍ³ÎªÎÒÃÇʵÏÖºÃÁ˹«¹²µÄÊÓͼÀࣺUIView£¬ºÍ¿ØÖÆÆ÷ÀࣺUIViewController¡£´ó¶àÊýʱºò£¬ÎÒÃǶ¼ÐèÒª¼Ì³ÐÕâЩÀàÀ´ÊµÏÖÎÒÃǵijÌÐòÂß¼£¬Òò´Ë£¬ÎÒÃǼ¸ºõÌӱܲ»¿ª
MVC ÕâÖÖÉè¼ÆÄ£Ê½¡£
µ«ÊÇ£¬¼¸Ê®Äê¹ýÈ¥ÁË£¬ÎÒÃǶÔÓÚ MVC ÕâÖÖÉè¼ÆÄ£Ê½ÕæµÄÓõúÃÂð£¿Æäʵ²»Êǵģ¬MVC
ÕâÖֲַ㷽ʽËäÈ»Çå³þ£¬µ«ÊÇÈç¹ûʹÓò»µ±£¬ºÜ¿ÉÄÜÈôóÁ¿´úÂë¶¼¼¯ÖÐÔÚ Controller Ö®ÖУ¬Èà MVC
ģʽ±ä³ÉÁË Massive View Controller ģʽ¡£
Controller µÄÓ·Ö×ÎÊÌâºÎ½â£¿
ºÜ¶àÈËÊÔͼ½â¾ö MVC ÕâÖּܹ¹Ï Controller ±È½ÏÓ·Ö×µÄÎÊÌâ¡£ÎÒ»¹¼ÇµÃ°ëÄêǰ
InfoQ ¸ãÁËÒ»´ÎÒÆ¶¯×ù̸»á£¬µ±Ê± BeeFramework ºÍ Samurai-Native µÄ×÷Õß
ÀϹù ÎÊÁËÎÒÒ»¾ä»°£º¡¸Ê²Ã´ÑùµÄÄÚÈݲÅÓ¦¸Ã·Åµ½ Controller ÖУ¿¡¹¡£µ«Êǵ±Ê±ÒòΪʱ¼ä²»¹»£¬ÎÒûÄÜÕ¹¿ªÎҵĹ۵㣬Õâ´ÎÕýºÃÔÚÕâÀïºÃºÃ̸̸ÎÒ¶ÔÓÚÕâ¸öÎÊÌâµÄÏë·¨¡£
ÎÒÃÇÀ´¿´¿´ MVC ÕâÖּܹ¹µÄÌØµã¡£ÆäʵÉè¼ÆÄ£Ê½ºÜ¶àʱºòÊÇΪÁË Don't
repeat yourself ÔÔòÀ´×öµÄ£¬¸ÃÔÔòÒªÇóÄܹ»¸´ÓõĴúÂëÒª¾¡Á¿¸´Óã¬À´±£Ö¤ÖØÓá£ÔÚ MVC
ÕâÖÖÉè¼ÆÄ£Ê½ÖУ¬ÎÒÃÇ·¢ÏÖ View ºÍ Model ¶¼ÊÇ·ûºÏÕâÖÖÔÔòµÄ¡£
¶ÔÓÚ View À´Ëµ£¬ÄãÈç¹û³éÏóµÃºÃ£¬ÄÇôһ¸ö App µÄ¶¯»Ð§¹û¿ÉÒԺܷ½±ãµØÒÆÖ²µ½±ðµÄ
App ÉÏ£¬¶ø Github ÉÏÒ²Óкܶà UI ¿Ø¼þ£¬ÕâЩ¿Ø¼þ¶¼ÊÇÔÚ View ²ã×öÁ˺ܺõķâ×°Éè¼Æ£¬Ê¹µÃËüÄܹ»·½±ãµØ¿ªÔ´¸ø´ó¼Ò¸´Óá£
¶ÔÓÚ Model À´Ëµ£¬ËüÆäʵÊÇÓÃÀ´´æ´¢ÒµÎñµÄÊý¾ÝµÄ£¬Èç¹û×öµÃºÃ£¬ËüÒ²¿ÉÒÔ·½±ãµØ¸´ÓᣱÈÈçÎÒµ±Ê±ÔÚ×öÓеÀÔÆ±Ê¼Ç
iPad °æµÄʱºò£¬ÎÒÃǾÍÖ±½ÓºÍ iOS °æ¸´ÓÃÁËËùÓÐµÄ Model ²ãµÄ´úÂë¡£ÔÚ´´Òµ×öÔ³Ìâ¿â¿Í»§¶Ëʱ£¬iOS
ºÍ iPad °æµÄ Model ²ã´úÂëÔٴα»¸´ÓÃÉÏÁË¡£µ±È»£¬ÒòΪºÍÒµÎñ±¾ÉíµÄÊý¾ÝÒâÒåÏà¹Ø£¬Model ²ãµÄ¸´Óôó¶àÊýÊÇÔÚÒ»¸ö²úÆ·ÄÚ²¿£¬²»Ì«¿ÉÄÜÏñ
View ²ãÄÇÑù¿ªÔ´¸øÉçÇø¡£
˵Íê View ºÍ Model ÁË£¬ÄÇÎÒÃÇÏëÏë Controller£¬Controller
ÓжàÉÙ¿ÉÒÔ¸´Óõģ¿ÎÒÃÇдÍêÁËÒ»¸ö Controller Ö®ºó£¬¿ÉÒԺܷ½±ãµØ¸´ÓÃËüÂ𣿽áÂÛÊÇ£º·Ç³£ÄѸ´Óá£ÔÚijЩ³¡¾°Ï£¬ÎÒÃÇ¿ÉÄÜ¿ÉÒÔÓÃaddSubViewController
Ö®ÀàµÄ·½Ê½¸´Óà Controller£¬µ«ËüµÄ¸´Óó¡¾°»¹ÊǷdz£·Ç³£Éٵġ£
Èç¹ûÎÒÃÇÄܹ»Òâʶµ½ Controller ÀïÃæµÄ´úÂë²»±ãÓÚ¸´Óã¬ÎÒÃǾÍÄÜÖªµÀʲô´úÂëÓ¦¸ÃдÔÚ
Controller ÀïÃæÁË£¬ÄǾÍÊÇÄÇЩ²»Äܸ´ÓõĴúÂë¡£ÔÚÎÒ¿´À´£¬Controller ÀïÃæ¾ÍÖ»Ó¦¸Ã´æ·ÅÕâЩ²»Äܸ´ÓõĴúÂ룬ÕâЩ´úÂë°üÀ¨£º
ÔÚ³õʼ»¯Ê±£¬¹¹ÔìÏàÓ¦µÄ View ºÍ Model¡£
¼àÌý Model ²ãµÄʼþ£¬½« Model ²ãµÄÊý¾Ý´«µÝµ½ View ²ã¡£
¼àÌý View ²ãµÄʼþ£¬²¢ÇÒ½« View ²ãµÄʼþת·¢µ½ Model
²ã¡£
Èç¹û Controller Ö»ÓÐÒÔÉϵÄÕâЩ´úÂ룬ÄÇôËüµÄÂß¼½«·Ç³£¼òµ¥£¬¶øÇÒÒ²»á·Ç³£¶Ì¡£
µ«ÊÇ£¬ÎÒÃÇÈ´ºÜÄÑ×öµ½ÕâÒ»µã£¬ÒòΪ»¹ÊÇÓкܶàÂß¼ÎÒÃDz»ÖªµÀдÔÚÄÄÀÓÚÊǾͶ¼Ð´µ½ÁË
Controller ÖÐÁË£¬ÄÇÎÒÃǽÓÏÂÀ´¾Í¿´¿´ÆäËüÂß¼Ó¦¸ÃдÔÚÄÄÀï¡£
ÈçºÎ¶Ô ViewController ÊÝÉí£¿
objc.io ÊÇÒ»¸ö·Ç³£ÓÐÃûµÄ iOS ¿ª·¢²©¿Í£¬ËüÉÏÃæµÄµÚÒ»¿Î ¡¶Lighter
View Controllers¡· ÉϾͽ²Á˺ܶàÕâÑùµÄ¼¼ÇÉ£¬ÎÒÃÇÏÈ×ܽáÒ»ÏÂËüÀïÃæµÄ¹Ûµã£º
½« UITableView µÄ Data Source ·ÖÀëµ½ÁíÍâÒ»¸öÀàÖС£
½«Êý¾Ý»ñÈ¡ºÍת»»µÄÂß¼·Ö±ðµ½ÁíÍâÒ»¸öÀàÖС£
½«Æ´×°¿Ø¼þµÄÂß¼£¬·ÖÀëµ½ÁíÍâÒ»¸öÀàÖС£
ÄãÏëÃ÷°×ÁËÂð£¿Æäʵ MVC ËäȻֻÓÐÈý²ã£¬µ«ÊÇËü²¢Ã»ÓÐÏÞÖÆÄãÖ»ÄÜÓÐÈý²ã¡£ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔ½«
Controller ÀïÃæ¹ýÓÚÓ·Ö×µÄÂß¼³éÈ¡³öÀ´£¬ÐγÉеĿɸ´ÓÃÄ£¿é»ò¼Ü¹¹²ã´Î¡£
ÎÒ¸öÈ˶ÔÓÚÂß¼µÄ³éÈ¡£¬ÓÐÒÔÏÂ×ܽᡣ
½«ÍøÂçÇëÇó³éÏóµ½µ¥¶ÀµÄÀàÖÐ
ÐÂÊÖд´úÂ룬ֱ½Ó¾ÍÔÚ Controller ÀïÃæÓà AFNetworking
·¢Ò»¸öÇëÇó£¬ÇëÇóµÄÍêÊý¾ÝÖ±½Ó¾Í´«µÝ¸ø View¡£ÈëÃÅһЩµÄͬѧ£¬ÖªµÀ°ÑÕâЩÇëÇó´úÂëÒÆµ½ÁíÍâÒ»¸ö¾²Ì¬ÀàÀïÃæ¡£µ«ÊÇÎÒ¾õµÃ»¹²»¹»£¬ËùÒÔÎÒ½¨Ò齫ÿһ¸öÍøÂçÇëÇóÖ±½Ó·â×°³ÉÀà¡£
°Ñÿһ¸öÍøÂçÇëÇó·â×°³É¶ÔÏóÆäʵÊÇʹÓÃÁËÉè¼ÆÄ£Ê½ÖÐµÄ Command ģʽ£¬ËüÓÐÒÔϺô¦£º
½«ÍøÂçÇëÇóÓë¾ßÌåµÄµÚÈý·½¿âÒÀÀµ¸ôÀ룬·½±ãÒÔºó¸ü»»µ×²ãµÄÍøÂç¿â¡£Êµ¼ÊÉÏÎÒÃǹ«Ë¾µÄ
iOS ¿Í»§¶Ë×î³õÊÇ»ùÓÚ ASIHttpRequest µÄ£¬ÎÒÃÇÖ»»¨ÁËÁ½Ì죬¾ÍºÜÇáËɵØÇл»µ½ÁË AFNetworking¡£
·½±ãÔÚ»ùÀàÖд¦Àí¹«¹²Âß¼£¬ÀýÈçÔ³Ìâ¿âµÄÊý¾Ý°æ±¾ºÅÐÅÏ¢¾ÍͳһÔÚ»ùÀàÖд¦Àí¡£
·½±ãÔÚ»ùÀàÖд¦Àí»º´æÂß¼£¬ÒÔ¼°ÆäËüһЩ¹«¹²Âß¼¡£
·½±ã×ö¶ÔÏóµÄ³Ö¾Ã»¯¡£
´ó¼ÒÈç¹û¸ÐÐËȤ£¬¿ÉÒÔ¿´ÎÒÃǹ«Ë¾¿ªÔ´µÄ iOS ÍøÂç¿â£ºYTKNetwork¡£ËüÔÚÕâÖÖ˼¿¼µÄÖ¸µ¼Ï£¬²»µ«½«
Controller ÖеĴúÂëÊÝÉí£¬¶øÇÒ½øÒ»²½ÑÝ»¯ºÍ¼ÓÇ¿£¬ÏÖÔÚËü»¹Ö§³ÖÖîÈ縴ÔÓÍøÂçÇëÇó¹ÜÀí£¬¶ÏµãÐø´«£¬²å¼þ»úÖÆ£¬JSON
ºÏ·¨ÐÔ¼ì²éµÈ¹¦ÄÜ¡£
Õⲿ·Ö´úÂë´Ó Controller ÖаþÀë³öÀ´ºó£¬²»µ«¼ò»¯ÁË Controller
ÖеÄÂß¼£¬Ò²´ïµ½ÁËÍøÂç²ãµÄ´úÂ븴ÓõÄЧ¹û¡£
½«½çÃæµÄÆ´×°³éÏóµ½×¨ÃŵÄÀàÖÐ
ÐÂÊÖд´úÂ룬ϲ»¶ÔÚ Controller ÖаÑÒ»¸ö¸ö UILabel £¬UIButton£¬UITextField
Íù self.view ÉÏÓà addSubView ·½·¨·Å¡£ÎÒ½¨Òé´ó¼Ò¿ÉÒÔÓÃÁ½ÖÖ°ì·¨°ÑÕâЩ´úÂë´Ó Controller
ÖаþÀë¡£
·½·¨Ò»£º¹¹ÔìרÃÅµÄ UIView µÄ×ÓÀ࣬À´¸ºÔðÕâЩ¿Ø¼þµÄÆ´×°¡£ÕâÊÇ×î³¹µ×ºÍÓÅÑŵķ½Ê½£¬²»¹ýÉÔ΢Â鷳һЩµÄÊÇ£¬ÄãÐèÒª°ÑÕâЩ¿Ø¼þµÄʼþ»Øµ÷ÏȽӹܣ¬ÔÙ¶¼Ò»Ò»±©Â¶»Ø
Controller¡£
·½·¨¶þ£ºÓÃÒ»¸ö¾²Ì¬µÄ Util À࣬°ïÖúÄã×ö UIView µÄÆ´×°¹¤×÷¡£ÕâÖÖ·½Ê½ÉÔ΢×öµÃ²»Ì«³¹µ×£¬µ«ÊDZȽϼòµ¥¡£
¶ÔÓÚһЩÄܸ´ÓÃµÄ UI ¿Ø¼þ£¬ÎÒ½¨ÒéÓ÷½·¨Ò»¡£Èç¹ûÏîÄ¿¹¤³Ì±È½Ï¸´ÔÓ£¬ÎÒÒ²½¨ÒéÓ÷½·¨Ò»¡£Èç¹ûÏîĿ̫½ô£¬ÁíÍâÏà¹ØÏîÄ¿µÄ´úÂëÁ¿Ò²²»¶à£¬¿ÉÒÔ³¢ÊÔ·½·¨¶þ¡£
¹¹Ôì ViewModel
Ë˵ MVC ¾Í²»ÄÜÓà ViewModel µÄ£¿MVVM µÄÓŵãÎÒÃÇÒ»Ñù¿ÉÒÔ½è¼ø¡£¾ßÌå×ö·¨¾ÍÊǽ«
ViewController ¸ø View ´«µÝÊý¾ÝÕâ¸ö¹ý³Ì£¬³éÏó³É¹¹Ôì ViewModel µÄ¹ý³Ì¡£
ÕâÑù³éÏóÖ®ºó£¬View Ö»½ÓÊÜ ViewModel£¬¶ø Controller
Ö»ÐèÒª´«µÝ ViewModel ÕâôһÐдúÂë¡£¶øÁíÍâ¹¹Ôì ViewModel µÄ¹ý³Ì£¬ÎÒÃǾͿÉÒÔÒÆ¶¯µ½ÁíÍâµÄÀàÖÐÁË¡£
ÔÚ¾ßÌåʵ¼ùÖУ¬ÎÒ½¨Òé´ó¼ÒרÃÅ´´½¨¹¹Ôì ViewModel ¹¤³§À࣬²Î¼û
¹¤³§Ä£Ê½¡£ÁíÍ⣬Ҳ¿ÉÒÔרÃŽ«Êý¾Ý´æÈ¡¶¼³é½«µ½Ò»¸ö Service ²ã£¬ÓÉÕâ²ãÀ´Ìṩ ViewModel
µÄ»ñÈ¡¡£
רÃŹ¹Ôì´æ´¢Àà
¸Õ¸Õ˵µ½ ViewModel µÄ¹¹Ôì¿ÉÒԳ齱µ½Ò»¸ö Service ²ã¡£Óë´ËÏàÓ¦µÄ£¬Êý¾ÝµÄ´æ´¢Ò²Ó¦¸ÃÓÉרÃŵĶÔÏóÀ´×ö¡£ÔÚСԳËÑÌâÏîÄ¿ÖУ¬ÎÒÃÇÓÉÒ»¸ö½Ð
UserAgent µÄÀ࣬רÃÅÀ´´¦Àí±¾µØÊý¾ÝµÄ´æÈ¡¡£
Êý¾Ý´æÈ¡·ÅÔÚרÃŵÄÀàÖУ¬¾Í¿ÉÒÔÕë¶Ô´æÈ¡×ö¶îÍâµÄÊÂÇéÁË¡£±ÈÈ磺
¶ÔһЩÈȵãÊý¾ÝÔö¼Ó»º´æ
´¦ÀíÊý¾ÝÇ¨ÒÆÏà¹ØµÄÂß¼
Èç¹ûÒª×öµÃ¸üϸ£¬¿ÉÒÔ°Ñ´æ´¢ÒýÇæÔÙ³éÏó³öÒ»²ã¡£ÕâÑùÄã¾Í¿ÉÒÔ·½±ãµØÇл»´æ´¢µÄµ×²ã£¬ÀýÈç´Ó
sqlite Çл»µ½ key-value µÄ´æ´¢ÒýÇæµÈ¡£
С½á
ͨ¹ý´úÂëµÄ³éÈ¡£¬ÎÒÃÇ¿ÉÒÔ½«Ô±¾µÄ MVC Éè¼ÆÄ£Ê½ÖÐµÄ ViewController
½øÒ»²½²ð·Ö£¬¹¹Ôì³ö ÍøÂçÇëÇó²ã¡¢ViewModel ²ã¡¢Service ²ã¡¢Storage ²ãµÈÆäËüÀ࣬À´ÅäºÏ
Controller ¹¤×÷£¬´Ó¶øÊ¹ Controller ¸ü¼Ó¼òµ¥£¬ÎÒÃÇµÄ App ¸üÈÝÒ×ά»¤¡£
ÁíÍ⣬²»ÖªµÀ´ó¼Ò×¢Ò⵽û£¬Æäʵ Controller ²ãÊǷdz£ÄÑÓÚ²âÊԵģ¬Èç¹ûÎÒÃÇÄܹ»½«
Controller ÊÝÉí£¬¾Í¿ÉÒÔ¸ü·½±ãµØÐ´ Unit Test À´²âÊÔ¸÷ÖÖÓë½çÃæµÄÎ޹صÄÂß¼¡£Òƶ¯¶Ë×Ô¶¯»¯²âÊÔ¿ò¼Ü¶¼²»Ì«³ÉÊ죬µ«Êǽ«
Controller µÄ´úÂë³éÈ¡³öÀ´£¬ÊÇÓÐÖúÓÚÎÒÃÇ×ö²âÊÔ¹¤×÷µÄ¡£
Ï£Íû±¾ÎÄÄܰïÖú´ó¼ÒÕÆÎÕÕýȷʹÓà MVC µÄ×ËÊÆ£¬ÔÚÏÂÒ»½ÚÀÎÒ½«·ÖÏíÒ»ÏÂÎÒ¶Ô
MVVM µÄ¿´·¨¡£
±»Éñ»¯µÄ MVVM
MVVM µÄÀúÊ·
MVVM ÊÇ Model-View-ViewModel µÄ¼òд¡£
Ïà¶ÔÓÚ MVC µÄÀúÊ·À´Ëµ£¬MVVM ÊÇÒ»¸öÏ൱еļܹ¹£¬MVVM ×îÔçÓÚ
2005 Ä걻΢ÈíµÄ WPF ºÍ Silverlight µÄ¼Ü¹¹Ê¦ John Gossman Ìá³ö£¬²¢ÇÒÓ¦ÓÃÔÚ΢ÈíµÄÈí¼þ¿ª·¢ÖС£µ±Ê±
MVC ÒѾ±»Ìá³öÁË 20 ¶àÄêÁË£¬¿É¼ûÁ½Õß³öÏÖµÄÄê´ú²î±ðÓжà´ó¡£
MVVM ÔÚʹÓõ±ÖУ¬Í¨³£»¹»áÀûÓÃË«Ïò°ó¶¨¼¼Êõ£¬Ê¹µÃ Model ±ä»¯Ê±£¬ViewModel
»á×Ô¶¯¸üУ¬¶ø ViewModel ±ä»¯Ê±£¬View Ò²»á×Ô¶¯±ä»¯¡£ËùÒÔ£¬MVVM ģʽÓÐЩʱºòÓÖ±»³Æ×÷£ºmodel-view-binder
ģʽ¡£
¾ßÌåÔÚ iOS ÖУ¬¿ÉÒÔʹÓà KVO »ò Notification ¼¼Êõ´ïµ½ÕâÖÖЧ¹û¡£
MVVM µÄÉñ»¯
ÔÚʹÓÃÖУ¬ÎÒ·¢ÏÖ´ó¼Ò¶ÔÓÚ MVVM ÒÔ¼° MVVM ÑÜÉú³öÀ´µÄ¿ò¼Ü£¨±ÈÈç
ReactiveCocoa£©ÓÐÒ»ÖÖ¡¸¾´Î·¡¹¸Ð¡£ÕâÖÖ¡¸¾´Î·¡¹¸ÐijÖ̶ֳÈÉϾÍÏñ¶ÔÉñÒ»Ñù£¬ÕâÖ÷Òª±íÏÖÔÚÎÒûÓÐÌýµ½´ó¼Ò¶ÔÓÚ
MVVM µÄÈκÎÅúÆÀ¡£
ÎҸоõÔÒòÊ×ÏÈÊÇ MVVM ²¢Ã»Óкܴó³Ì¶ÈÉÏÆÕ¼°£¬´ó¼Ò¶ÔÓÚм¼ÊõÒ»°ã¶¼²»Ê죬½ø¶ø²»¸ÒÍý¼ÓÆÀÂÛ¡£ÁíÍ⣬ReactiveCocoa
±¾ÉíÉÏÊֵĸ´ÔÓÐÔ£¬Ò²ÈúܶàÈ˸оõµ½ÕâÖÖ¼¼ÊõºÜ¸ßÉîÄѶ®£¬½ø¶ø¼ÓÖØÁË´ó¼Ò¶ÔËüµÄ¡¸¾´Î·¡¹¡£
MVVM µÄ×÷ÓúÍÎÊÌâ
MVVM ÔÚʵ¼ÊʹÓÃÖУ¬È·ÊµÄܹ»Ê¹µÃ Model ²ãºÍ View ²ã½âñµ«ÊÇÈç¹ûÄãÐèҪʵÏÖ
MVVM ÖеÄË«Ïò°ó¶¨µÄ»°£¬ÄÇôͨ³£¾ÍÐèÒªÒýÈë¸ü¶à¸´ÔӵĿò¼ÜÀ´ÊµÏÖÁË¡£
¶Ô´Ë£¬MVVM µÄ×÷Õß John Gossman µÄ ÅúÆÀ Ó¦¸ÃÊÇ×îΪÖпϵġ£John
Gossman ¶Ô MVVM µÄÅúÆÀÖ÷ÒªÓÐÁ½µã£º
µÚÒ»µã£ºÊý¾Ý°ó¶¨Ê¹µÃ Bug ºÜÄѱ»µ÷ÊÔ¡£Äã¿´µ½½çÃæÒì³£ÁË£¬ÓпÉÄÜÊÇÄã
View µÄ´úÂëÓÐ Bug£¬Ò²¿ÉÄÜÊÇ Model µÄ´úÂëÓÐÎÊÌâ¡£Êý¾Ý°ó¶¨Ê¹µÃÒ»¸öλÖÃµÄ Bug ±»¿ìËÙ´«µÝµ½±ðµÄλÖã¬Òª¶¨Î»Ôʼ³öÎÊÌâµÄµØ·½¾Í±äµÃ²»ÄÇôÈÝÒ×ÁË¡£
µÚ¶þµã£º¶ÔÓÚ¹ý´óµÄÏîÄ¿£¬Êý¾Ý°ó¶¨ÐèÒª»¨·Ñ¸ü¶àµÄÄÚ´æ¡£
ijÖÖÒâÒåÉÏÀ´Ëµ£¬ÎÒÈÏΪ¾ÍÊÇÊý¾Ý°ó¶¨Ê¹µÃ MVVM ±äµÃ¸´ÔÓºÍÄÑÓÃÁË¡£µ«ÊÇ£¬Õâ¸öȱµãͬʱҲ±»ºÜ¶àÈËÈÏΪÊÇÓŵ㡣
ReactiveCocoa
º¯Êýʽ±à³Ì£¨Functional Programming£©ºÍÏìӦʽ±à³Ì£¨React
Programming£©Ò²Êǵ±Ç°ºÜ»ðµÄÁ½¸ö¸ÅÄËüÃǵĽáºÏ¿ÉÒԺܷ½±ãµØÊµÏÖÊý¾ÝµÄ°ó¶¨¡£ÓÚÊÇ£¬ÔÚ iOS
±à³ÌÖУ¬ReactiveCocoa ºá¿Õ³öÊÀÁË£¬ËüµÄ¸ÅÄî¶¼·Ç³£ У¬°üÀ¨£º
º¯Êýʽ±à³Ì£¨Functional Programming£©£¬º¯ÊýÒ²±ä³ÉÒ»µÈ¹«ÃñÁË£¬¿ÉÒÔÓµÓкͶÔÏóͬÑùµÄ¹¦ÄÜ£¬ÀýÈçµ±³É²ÎÊý´«µÝ£¬µ±×÷·µ»ØÖµµÈ¡£¿´¿´
Swift ÓïÑÔ´øÀ´µÄÖڶຯÊýʽ±à³ÌµÄÌØÐÔ£¬¾ÍÄãÖªµÀÕâ¶à Cool ÁË¡£
ÏìӦʽ±à³Ì£¨React Programming£©£¬ÔÀ´ÎÒÃÇ»ùÓÚʼþ£¨Event£©µÄ´¦Àí·½Ê½¶¼ÈõÁË£¬ÏÖÔÚÊÇ»ùÓÚÊäÈ루ÔÚ
ReactiveCocoa Àï½Ð Signal£©µÄ´¦Àí·½Ê½¡£ÊäÈ뻹¿ÉÒÔͨ¹ýº¯Êýʽ±à³Ì½øÐи÷ÖÖ Combine
»ò Filter£¬¾¡ÏÔ¸÷ÖÖÁé»îµÄ´¦Àí¡£
ÎÞ״̬£¨Stateless£©£¬×´Ì¬ÊǺ¯ÊýµÄħ¹í£¬ÎÞ״̬ʹµÃº¯ÊýÄܸüºÃµØ²âÊÔ¡£
²»¿ÉÐ޸ģ¨Immutable£©£¬Êý¾Ý¶¼ÊDz»¿ÉÐ޸ĵģ¬Ê¹µÃÈí¼þÂß¼¼òµ¥£¬Ò²¿ÉÒÔ¸üºÃµØ²âÊÔ¡£
ÍÛ£¬ËùÓÐÕâЩ¶¼Ì« Cool ÁË¡£µ±ÎÒ¿´µ½µÄʱºò£¬ÎÒ¶¼¼¦¶³ÁË£¡
ÎÒÃÇÓ¦¸Ã¿Í¹ÛÆÀ¼Û MVVM ºÍ ReactiveCocoa
µ«Êǵ«ÊÇ£¬ÎÒͻȻÏëµ½£¬ÎÒºÃÏóÖ»ÐèÒªÒ»¸ö ViewModel ¶øÒÑ£¬ÎÒÍêÈ«¿ÉÒÔ¼òµ¥µØ×öÒ»¸ö
ViewModel µÄ¹¤³§Àà»ò Service Àà¾Í¿ÉÒÔÁË£¬ÎªÊ²Ã´ÒªÒýÈëÕâô¶à¿ò¼Ü£¿ÏÖÓÐµÄ MVC ÕæµÄÓÐÄÇô´óµÄÎÊÌâÂð£¿
Ö±µ½ÏÖÔÚ£¬ReactiveCocoa ÔÚ¹úÄÚÍ⻹¶¼ÊÇÔÚСÖÚÁìÓò£¬Ã»Óб»´óÁ¿½ÓÊܳÉΪÖ÷Á÷µÄ±à³Ì¿ò¼Ü¡£²»Ö»ÊÇÔÚ
iOS ÓïÑÔ£¬ÔÚ±ðµÄÓïÑÔÖУ¬ÀýÈç Java ÖÐµÄ RxJava ҲͬÑùûÓгÉΪÖ÷Á÷¡£
ÎÒÔÚÕâÀ²»ÊÇÏë˵ ReactiveCocoa ²»ºÃ£¬Ò²²»ÊÇÏë˵ MVVM
²»ºÃ£¬¶øÊÇÏëÈôó¼Ò¶¼Äܹ»ÓÐÒ»¸ö¿Í¹ÛµÄÈÏʶ¡£ReactiveCocoa ºÍ MVVM ²»Ó¦¸Ã±»Éñ»¯£¬ËüÊÇÒ»ÖÖÐÂÓ±µÄ±à³Ì¿ò¼Ü£¬Äܹ»½â¾ö¾ÉÓбà³Ì¿ò¼ÜµÄһЩÎÊÌ⣬µ«ÊÇÒ²»á´øÀ´Ò»Ð©ÐÂÎÊÌ⣬½ö´Ë¶øÒÑ¡£Èç¹û²»ÄÜʹºÃµÄ¼ÝÔ¦
ReactiveCocoa£¬Í¬Ñù»áÔì³É Controller ´úÂë¹ýÓÚ¸´ÔÓ£¬´úÂëÂß¼²»Ò×ά»¤µÄÎÊÌâ¡£
×ܽá
ÓÐһЩÈË×ÜÊÇ×·¸Ï׿¼Êõ£¬ÓÐʲôм¼Êõ²»¹ÜÈýÆß¶þʮһÁ¢Âí¾ÍÓ㬽á¹û±»¸÷ÖÖ¿Ó¡£
ÓÖÓÐһЩÈË£¬×ÜÊǵ£ÐÄм¼Êõ´øÀ´µÄ¼¼Êõ·çÏÕ£¬²»Ô¸Òâѧϰ¡£½á¹ûÏÖÔÚ»¹ÓÐÈËÔÚÓÃ
MRC ÊÖ¶¯¹ÜÀíÒýÓüÆÊý¡£
¶øÎÒÏë˵£¬ÎÒÃÇÐèÒª±£³ÖµÄÊÇÒ»¸öÓµ±§±ä»¯µÄÐÄ£¬ÒÔ¼°ÀíÐÔ·ÖÎöµÄ̬¶È¡£ÔÚм¼ÊõµÄÃæÇ°£¬²»Ã¤´Ó£¬Ò²²»Êؾɣ¬Ò»Çеľö²ß¶¼Ó¦¸Ã½¨Á¢ÔÚÈÏÕæ·ÖÎöµÄ»ù´¡ÉÏ£¬ÕâÑù²ÅÄÜÓ¦¶Ô¼¼ÊõµÄ±ä»¯¡£
|