ÔÚ¹ýÈ¥µÄ¼¸¸öÔÂÄÚ£¬ÎÒÖ÷µ¼×ÅÍŶÓÍê³ÉÁËÒ»Ï³ÌºÆ´ó£¨ÀÛ»ý°Ë¸öÈËԵŤ×÷Á¿£©µÄÖØ¹¹¹¤×÷¡ª¡ªÎªÎÒÃǵÄAppÌæ»»Êý¾Ý¿â¡£Ö®ËùÒÔÄܹ»°ÑÕâÖÖÉ˽¹ÇµÄÊÂÇé³ÆÖ®ÎªÖØ¹¹£¬ÊÇÒòΪÔÚÕâ¶Îʱ¼äÄÚ£¬ÎÒÃÇÿÌìÏòÖ÷¸ÉºÏ²¢Á½µ½Èý´Î´úÂ룬ÆÚ¼äAppÉÏÏßÎå´Î£¬Óû§Ã»ÓиÐÖªµ½ÈκÎÓ°Ïì¡£ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒ½«½²ÊöÎÒÃÇÈçºÎÔÚ²»Ó°ÏìϵͳÍⲿÐÐΪ£¬Ò²²»Ó°ÏìÕý³£½»¸¶µÄÇé¿öÏ£¬Ìæ»»µôÁËÊý¾Ý¿âʵÏÖ¡£
±³¾°
ÔÚÒ»¸öÓÐ×ÅÁ¼ºÃ·Ö²ã½á¹¹µÄϵͳÖУ¬Ã¿Ò»²ã¶¼ÓÐËü×Ô¼ºµÄÖ°Ôð£ºÏÔʾ²ã¸ºÔðÏìÓ¦Óû§Ê¼þ£¬µ÷ÓÃÒµÎñ²ãµÄÂß¼£¬×îºó×öÊý¾Ý³ÊÏÖ£»ÒµÎñÂß¼²ã¸ºÔðÒµÎñ¹æÔòÓëÊý¾Ý´¦Àí£»Êý¾Ý·ÃÎʲã·â×°µ×²ãÊý¾Ý¿âµÄ²Ù×÷£¬ÍøÂç·ÃÎʲãÓëÆä²¢ÁУ¬¸ºÔðÍøÂçÇëÇó¡¢json½âÎöµÈµÈ¡£ÎÞÂÛÊÇMVC¡¢MVVM¡¢VIPER£¬¹é¸ù½áµ×¶¼ÊÇÔÚ¡±µ¥Ò»Ö°Ôð¡°¡¢¡°¹Ø×¢µã·ÖÀ롱¡¢¡°¸ßÄÚ¾ÛµÍñîºÏ¡±µÄÔÔòϱ仯£¬Ö»ÊDZíÏÖÐÎʽºÍº¸ÇµÄ²ã´Î¸÷Òì¡£
¶øÔÚÎÒÃǵĴúÂëÖУ¬¼¸ºõËùÓеÄÏÔʾ²ã¶ÔÏ󣬰üÀ¨ViewController¡¢ViewModel£¬ÉõÖÁViewÀïÃæ¶¼»ìÔÓÁË´óÁ¿µÄCoreData
APIµ÷Óã¬Ö±½Ó½øÐÐÊý¾Ý¿â²Ù×÷¡£
´ÖÂÔͳ¼ÆÁËһϣ¬ÏµÍ³ÖÐÒ»¹²ÓÐ25¸öÀàÓëNSManageContext½ô½ôñîºÏ¡£ÐγÉÁËÏÂͼÖлìÂҵľÖÃæ£º
.jpg)
Ãæ¶ÔÕâÖÖÇé¿ö£¬ÎÒÃÇÊ×ÏÈÒª×öµÄ¾ÍÊǽâñî¡£
·½°¸Ñ¡ÐÍ
ÎÒÃÇ×îÏÈÅųýµôµÄÊÇÖØÐ´ÕâÖÖ¼òµ¥´Ö±©µÄ·½Ê½¡£±íÃæÉÏ¿´À´£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÖØÐ´µÃµ½Ò»¸ö¸É¾»ÀûÂäµÄ·½°¸£¬²ã´Î½á¹¹ÇåÎú£¬Ö°Ôð·ÖÀ룻µ«ÓëÖ®Ïà°éµÄÊǾ޴óµÄ·çÏÕ£º
1.·¶Î§²»¿É¿Ø¡ª¡ªÒÅÁôϵͳµÄÄѵã¾ÍÔÚÓÚÇ£Ò»·¢¶ø¶¯È«Éí£¬Ó°Ï췶Χ¼«¹ã¡£ÉÔ²»ÁôÉñ£¬ÖØÐ´µÄ¹¤×÷¾Í»áÈçÒ°»ðÁÇÔ°ãÂûÑÓ¿ªÀ´£¬²»¿ÉÊÕʰ¡£
2.³¤Ê±¼äÎÞ·¨ÉÏÏß¡ª¡ªÔÚÕû¸ö¹ý³ÌÖУ¬Ö±µ½×îºóÍê³ÉµÄÄÇÒ»¿Ì֮ǰ£¬ÏµÍ³»á´¦ÓÚÒ»Ö±²»¿ÉÓõÄ״̬¡£Âþ³¤µÄʱ¼äÀËùÓеÄй¦Äܶ¼±»×èÈû£¬²»Äܽ»¸¶¡£Ã»ÓÐÄĸö²úÆ·ÍŶÓÄܳе£ÕâÑùµÄ½á¹û¡£
µÚ¶þ¸ö±»ÅųýµôµÄ·½°¸ÊÇÌØÐÔ·ÖÖ§¡£°ÑÖØÐ´µÄ¹¤×÷·Åµ½·ÖÖ§ÉÏÍê³É£¬ÆäËûÈ˼ÌÐøÔÚÖ÷¸ÉÉÏ¿ª·¢ÐÂÌØÐÔ£¬Ö±µ½ÖØÐ´½áÊøÔٺϲ¢»ØÖ÷¸É¡ª¡ªÕâÖÖ×ö·¨È·Êµ±ÈÖ±½ÓÖØÐ´ÒªºÃÉÏÄÇôһµãµã£¬ÒòΪÐÂÌØÐÔ»¹ÊÇ¿ÉÒÔ²»ÊÜÓ°ÏìµÄ£»µ«³¤ÆÚûÓиúÖ÷¸ÉºÏ²¢µÄ·ÖÖ§£¬ÔÚ¾ÀúÉÏËÄÎå¸öÔµÄÖØÐ´Ö®ºó£¬ÌìÖªµÀµ½×îºóÒª»¨¶à³¤Ê±¼äÀ´´¦ÀíºÏ²¢³åÍ»£¿
¼ÈÏë¼õС¶ÔϵͳµÄÓ°Ï죬ÓÖÏë²»Ó°Ïìй¦ÄÜÉÏÏߣ¬ÓÖ²»Ïë´¦Àí´óÁ¿µÄºÏ²¢³åÍ»£¬×îºóµÄ·½°¸¾ÍֻʣÏÂÁËÒ»ÖÖ£¬ÄǾÍÊdzéÏó·ÖÖ§£¨Branch
by Abstraction£©+ÌØÐÔ¿ª¹Ø£¨Feature Toggle£©¡£
³éÏó·ÖÖ§
³éÏó·ÖÖ§Õâ¸öÃû×ÖµÄÔµÆðÊÇÕë¶Ô°æ±¾¿â·ÖÖ§¶øÑԵģ¬ËüÔÊÐí¿ª·¢ÕßÔÚÒ»Ìõ¡°³éÏ󡱵ķÖÖ§Éϲ¢Ðй¤×÷£¬ÎÞÐè´´½¨Ò»Ìõʵ¼ÊµÄ·ÖÖ§£¬´Ó¶ø±ÜÃâÎÞνµÄºÏ²¢¿ªÏú¡£
Martin FowlerºÍJez Humble¶¼ÔøÔÚ¶àÄêǰ׫ÎĽéÉܹýÕâ¸öÖØ¹¹·½°¸¡£
ËüµÄ¹¤×÷ÔÀíºÜ¼òµ¥£ºµ±ÎÒÃÇÏëÒªÌæ»»µôϵͳÖеÄij¸ö×é¼þ¡ª¡ªÃûΪX¡ª¡ªÊ±£¬Ê×ÏÈΪX×é¼þ´´ÔìÒ»¸ö³éÏó²ã£¬ÕâÒ»²ãÀïÃæ¿ÉÄÜ»áÓдó´óССÈô¸É½Ó¿Ú»òÊÇÐÒ飬°ÑϵͳÖжÔX×é¼þµÄ·ÃÎʶ¼¸ôÀëÔÚ³éÏó²ã֮ϣ¬ÏµÍ³Ö»µ÷ÓóéÏóµÄ½Ó¿Ú/ÐÒ飬²»»á½Ó´¥µ½¾ßÌåµÄAPIʵÏÖ¡£ÈçÏÂͼËùʾ¡£

ÕâÒ»²½ÎÒÃÇ¿ÉÒÔͨ¹ýÌáÈ¡·½·¨¡¢ÌáÈ¡ÀàºÍ½Ó¿ÚµÈÖØ¹¹ÊÖ·¨À´Íê³É£»ÕâÒÔºóϵͳ¾Í³¹µ×¸úX×é¼þ½âñîÁË£¬ËüÒÀÀµµÄÖ»ÊÇÒ»×é³éÏó½Ó¿Ú£¬¶ø·Ç¾ßÌåʵÏÖ¡£Õâʱºò£¬ÎÒÃǾͿÉÒÔ×ÅÊÖÔÚÕâ¸ö³éÏó²ãÏÂÃæ£¬½øÐÐÐÂ×é¼þµÄ¿ª·¢¹¤×÷£¬ÈÃËüҲʵÏÖͬһÌ×½Ó¿Ú¼´¿É¡£

ÕâÖ®ºó£¬ÎÒÃÇÔÙʹÓÃÌØÐÔ¿ª¹Ø£¨ÆäÔÀí¼°ÊµÏÖ¼ûϽڣ©£¬ÈÃÕâ¸ö³éÏó²ãÔÚÉú²ú»·¾³Ïµ÷ÓþÉ×é¼þ£¬²âÊÔ»·¾³Ïµ÷ÓÃÐÂ×é¼þ£¬´Ó¶øÔÚÍêÈ«²»Ó°Ïì½»¸¶µÄÇé¿öÏ£¬Íê³É¶ÔÐÂ×é¼þµÄ²âÊÔ¡£²âÊÔ½áÊøºó£¬¾Í¿ÉÒÔ´ò¿ª¿ª¹Ø£¬ÈÃϵͳÔÚÏßÉÏʹÓÃÐÂ×é¼þ£¬µÈ³¹µ×Îȶ¨ºó£¬°Ñ¿ª¹Ø´úÂëºÍ¾É×é¼þ´úÂëÈ«²¿É¾µô£¬Ìæ»»¹¤×÷¾ÍÍê³ÉÁË¡£

ÔÚÉÏÊöÕû¸ö¿ª·¢¹ý³ÌÖУ¬ÈκÎÒ»¸ö½×¶Î¶¼¿ÉÒÔ×öµ½Ï¸Á£¶ÈµÄÈÎÎñ·Ö½â£¬È»ºóС²½Ìá½»£¬Ã¿´ÎÌá½»¶¼×Ô¶¯´¥·¢µ¥Ôª²âÊԺͼ¯³É²âÊÔ£¬±£Ö¤²»Ó°ÏìÏÖÓй¦ÄÜ¡£ÔÚÆµ·±Ìá½»µÄÇé¿öÏ£¬Ò²²»»á³öÏÖ´óÁ¿µÄ´úÂëºÏ²¢³åÍ»£¬ÎÞÂÛÊÇ×ö×é¼þÌæ»»»¹ÊÇÐÂÌØÐÔ¿ª·¢£¬¿ª·¢ÈËÔ±¶¼¿ÉÒÔ»ùÓÚͬһÌ×´úÂë¿â¹¤×÷¡£Õâ¾Í´ó´ó¼õÉÙÁ˶ÔϵͳµÄ³å»÷ºÍ½»¸¶·çÏÕ¡£
ÌØÐÔ¿ª¹Ø
ÏÈ¿´Ò»¶Î´úÂ룺

ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇÒªÌæ»»Ò»¸öStoryboardµÄ²¼¾ÖºÍÏà¹ØViewControllerµÄ¹¦ÄÜ£¬ºÄʱºÜ¾Ã£¬Èç¹ûÖ±½ÓÔÚÖ÷¸ÉÉÏÐ޸ģ¬¾Í»áÖ±½ÓÓ°Ïìµ½ÏÖÓеÄApp£¬ÔÚ¹¦ÄÜÍê³É֮ǰ¶¼ÎÞ·¨ÉÏÏߣ»Èç¹ûÀÒ»Ìõ·ÖÖ§³öÀ´×ö£¬Î´À´¾ÍÓÖ»áÓдóÁ¿µÄºÏ²¢³åÍ»¡£Ê¹ÓÃÈçÉϵÄÌØÐÔ¿ª¹Ø¾Í»á±ÜÃâÉÏÊöÎÊÌâ¡£
µ±shouldDisplayNewSearchResultsScreenµÄÖµ·µ»ØÎªÕ棬¾ÍʹÓÃеÄStoryboard£¬·µ»ØÎª¼Ù£¬¾ÍʹÓþɵÄStoryboard¡£ÕâÑùÒ»À´£¬Ö»Òª¿ª¹Ø´¦ÓڹرÕ״̬£¬Î´Íê³ÉµÄ¹¦ÄܾÍÊǶÔÓû§²»¿É¼ûµÄ£¬ÎÒÃǾͼȿÉÒÔÔÚ¿ª·¢»·¾³ÏÂ×Բ⣬Ҳ¿ÉÒÔ²¿Êðµ½²âÊÔ»·¾³ÏÂ×öÑéÊÕ²âÊÔ£¬»¹¿ÉÒÔÕë¶Ô¿ª¹ØÎªÕæµÄÇé¿öд¶ÔÓ¦µÄµ¥Ôª²âÊÔ£¬ÈÃÿ´Î´úÂëÌá½»¶¼ÓгÖÐø¼¯³ÉÑéÖ¤¡£ÕâÆÚ¼ä»¹¿ÉÒÔ¼ÌÐø·¢²¼Ð°汾£¬Óû§ÍêÈ«¸ÐÖª²»µ½Ó°Ï죬ֱµ½ÎÒÃǾö¶¨´ò¿ª¿ª¹ØÎªÖ¹¡£
ÌØÐÔ¿ª¹Ø¿ÉÒÔÓжàÖÖʵÏÖ·½Ê½¡£
Ô¤±àÒë²ÎÊý
ÔÚÔ¤±àÒë²ÎÊýÖд«Öµ£¬Èò»Í¬µÄxcconfigÎļþ´«È벻ͬµÄÖµ£¬È»ºóÔÚ´úÂëÖÐ×öÅжϡ£
ÎÒÃÇϵͳÖоø´ó²¿·ÖµÄÌØÐÔ¿ª¹Ø¶¼ÊÇÓÃÕâÖÖ·½Ê½ÊµÏֵġ£
NSUserDefaults
ÓÐЩ¹¦ÄÜ¿ÉÄܶÔAppÓÐÆÆ»µÐÔµÄÓ°Ï죬¼´±ãÊÇÉè³ÉÖ»¶ÔInternal Target¿É¼û£¬Ò²»áÓ°Ïìµ½QAµÄ»Ø¹é²âÊÔ¡£ÎÒÃǸøInternal
Target×öÁ˸öDeveloper Settings½çÃæ£¬Èÿª·¢ÈËÔ±¿ÉÒÔ×Ô¼ºÐ޸Ŀª¹Ø×´Ì¬£¬°Ñ¿ª¹ØµÄÖµ´æ·ÅÔÚNSUserDefaultsÀïÃæ£¬Ä¬ÈÏ·µ»Øfalse£¬Ö»ÓÐÔÚ½çÃæÉÏÊÖ¹¤Çл»Ö®ºó²Å»á·µ»Øtrue¡£²âÊԺͿª·¢»¥Ï಻ÊÜÓ°Ïì¡£
ÎÒÃÇÏòRealmÇ¨ÒÆµÄÌØÐÔ¿ª¹ØÊ¹ÓõľÍÊÇÕâÖÖ·½Ê½¡£
·þÎñÆ÷ȡֵ
ÅäÖòÎÊýµÄÖµÒ²¿ÉÒÔͨ¹ý·þÎñÆ÷Ï·¢¡£ÕâÖÖ×ö·¨µÄºÃ´¦ÊDZȽÏÁé»î£¬ÔÚÆôÓÃ/½ûÓÃijÏÄܵÄʱºò²»ÐèÒª·¢²¼Ð°汾£¬Ö»ÐèÒªºǫ́ÅäÖã¬È±µãÊÇ»áÔö¼Ó¼¯³ÉºÍºǫ́¿ª·¢µÄ¹¤×÷Á¿¡£
A/B²âÊÔ
»¹ÓÐÒ»¸ö°ì·¨ÊÇʹÓõÚÈý·½µÄA/B²âÊÔ·þÎñ£¬Èç¹ûȱÉÙºǫ́¿ª·¢ÈËÔ±µÄ»°£¬ÕâÒ²ÊÇÒ»¸öÑ¡Ôñ¡£µ«µÚÈý·½µÄÎȶ¨ÐÔÍùÍù¾Í»á³ÉÎªÖÆÔ¼ÒòËØ£¬ParseÎªÍÆËÍ֪ͨÌṩ¹ýA/B²âÊÔ·þÎñ£¬µ«ÊÇËüµ½ÁË17Äê¾Í»á±»¹Ø±ÕÁË£»ÎÒÃÇÓÃAmazonµÄA/B²âÊÔ¿ò¼ÜÓÃÁËÒ»¶Îʱ¼ä£¬È»ºóAmazonÒ²Ðû²¼½ñÄê8Ô·ÝÍ£Óá¡Ä¿Ç°ÎÒÃÇ»¹ÔÚѰÕÒ±¸Ñ¡·½°¸¡£
¾ßÌåʵÏÖ
ÔÚ¾ßÌåÂäʵ³éÏó·ÖÖ§ºÍÌØÐÔ¿ª¹ØµÄʱºò£¬Ò»¹²·Ö³ÉÁËÈçϼ¸¸ö½×¶Î£º
½¨Á¢Êý¾Ý·ÃÎʲã
ÎÒÃÇÊ×ÏȰѸúÊý¾ÝÇëÇóÓйصIJÙ×÷´ÓViewControllerÖÐÌáÈ¡³ÉÒ»¸ö·½·¨£¬·Åµ½ÁíÒ»¸ö¶ÔÏóÖÐʵÏÖ£¬ÒÔ±ãÈÕºóÌæ»»¡£È»ºó°ÑËùÓеÄÊý¾Ý·ÃÎʵķ½·¨¶¼ÌáÈ¡³ÉÒ»¸öÐÒ飬ÈÃÊý¾Ý²ãÖ®ÉϵĶÔÏó¶¼ÒÀÀµÓÚÕâ¸öÐÒ飬¶ø²»ÊǾßÌå¶ÔÏó¡£ÕâÑùÒ»À´£¬ÔÏȵÄViewController¾Í´ÓÏÂͼÖеÄÑù×Ó£º

±ä³ÉÁËÕâÑù£º

ΪÊý¾Ý¶ÔÏóÌáÈ¡ÐÒé
³ýÁËÊý¾Ý·ÃÎʵĴúÂëÒÔÍ⣬ÎÒÃÇ»¹°ÑËùÓеÄÊý¾Ý¶ÔÏóÉϵĹ«ÓÐÊôÐԺͷ½·¨¶¼ÌáÈ¡ÁËÏàÓ¦µÄÐÒ飬ȻºóÐÞ¸ÄÁËÕû¸öApp£¬ÈÃËüʹÓÃÐÒ飬¶ø²»ÊǾßÌåµÄÊý¾Ý¶ÔÏó¡£ÕâÒ²ÊÇΪÒÔºóµÄÇл»×ö×¼±¸¡£
ʹÓÃRealmʵÏÖ
ǰÁ½²½Íê³ÉÖ®ºó£¬ÎÒÃǾͽ¨Á¢ÆðÁËÒ»¸öÍêÕûµÄ³éÏó²ã¡£ÔÚÕâ²ãÖ®ÉÏ£¬AppÀïÒѾûÓÐÁ˶ÔCoreDataºÍÊý¾Ý¶ÔÏóµÄÒÀÀµ£¬ÎÒÃÇ¿ÉÒÔÔÚÕâ²ã³éÏó֮ϣ¬ÌṩһÌ×ȫеÄʵÏÖ£¬ÓÃÀ´Ìæ»»CoreData¡£
ÔÚʵÏÖ¹ý³ÌÖУ¬ÎÒÃÇ»¹ÊÇÓöµ½Á˲»ÉÙÐèҪĥºÏµÄϸ½Ú£¬±ÈÈçRealmÖеÄÒ»¶Ô¶à¹ØÁªÊÇͨ¹ýRLMArrayʵÏֵ쬲¢²»ÊÇÕæÕýµÄNSArray£¬ÎªÁ˱£Ö¤½Ó¿ÚµÄ¼æÈÝÐÔ£¬ÎÒÃǾÍÖ»ÄܰÑproperty¶¨ÒåΪRLMArray£¬ÔÙÌṩһ¸öNSArrayµÄgetter·½·¨¡£ÖÖÖÖÎÊÌâ²»Ò»¶ø×ã¡£
Çл»¿ª¹Ø×´Ì¬
ÉÏÆªÎÄÕÂ˵µ½£¬ÎÒÃÇÔÚÇ¨ÒÆ¹ý³ÌÖеÄÌØÐÔ¿ª¹ØÊÇÓÃNSUserDefaultsʵÏֵģ¬ÔÚ½çÃæÉÏÊÖ¹¤Çл»¿ª¹Ø×´Ì¬¡£ÕâÑùµÄºÃ´¦ÊÇ¿ª·¢¹ý³Ì²»»áÓ°ÏìÔÚHockeyºÍTestFlightÉÏÄÚ²¿·¢²¼¡£Ö±µ½ÊµÏÖÍê³Éºó£¬ÎÒÃÇÔÙ°Ñ¿ª¹Ø¸Ä³É
+ (BOOL)shouldUseRealm { return isInternalTarget; } |
ÈòâÊÔÈËÔ±¿ÉÒÔÔÚÕæ»úÉϲâÊÔ¡£»Ø¹é²âÊÔ½áÊøÖ®ºó£¬ÔÙÈÿª¹ØÖ±½Ó·µ»Øtrue£¬¾Í¿ÉÒÔÏòApp StoreÌá½»ÁË¡£
Êý¾ÝÇ¨ÒÆ
Õâ¸öÎÞÐè¶à˵£¬Ð´¸öMigrationManagerÖ®ÀàµÄÀ࣬ÓÃÀ´°ÑÊý¾Ý´ÓCoreDataÖжÁ³ö£¬Ð´µ½RealmÀïÃæÈ¥¡£Õâ¸öÀà´ó¸ÅÒª±£ÁôÉÏÈýËĸö°æ±¾£¬µÈ¾ø´ó²¿·ÖÓû§¶¼ÒѾÉý¼¶µ½Ð°汾֮ºó²Å»áɾµô¡£
ºóÐøÇåÀí
ÌØÐÔ¿ª¹ØÊDz»ÄÜÒ»Ö±´æ»îÏÂÈ¥µÄ£¬·ñÔò´úÂëÖеķÖÖ§ÅжϻáÔ½À´Ô½¶à¡£ÎÒÃÇÒ»°ã¶¼»áÔÚÉÏÏßÒ»Á½¸öÐÇÆÚÖ®ºó£¬·¢ÏÖûÓгöÏÖÌØ±ðÑÏÖØµÄcrash£¬¾Í°Ñ¸ú¿ª¹ØÓйصĴúÂëÈ«¶¼É¾µô¡£
ÔÚµÚÒ»²½½¨Á¢Êý¾Ý·ÃÎʲãµÄʱºò£¬ÎÒÃÇ´´½¨³öÁËÒ»¸öÌØ±ðÅÓ´óµÄPersistenceService£¬ËüÀïÃæº¬ÓÐËùÓеÄÊý¾Ý·ÃÎÊ·½·¨¡£ÕâÖ»ÊÇΪÁË·½±ãÇл»¶øÒÑ£¬Çл»Íê³Éºó£¬ÎÒÃÇ»¹ÊÇÒª¸ù¾Ý·ÃÎÊÊý¾ÝµÄ²»Í¬£¬½¨Á¢Ò»¸ö¸öСµÄRepository£¬È»ºóÈÃViewModel¶ÔÏó·ÃÎÊRepository¶ÁдÊý¾Ý£¬°ÑPersistenceServiceɾµô¡£
×îºóÐγɵļܹ¹ÈçͼËùʾ£º

×ܽá
Ê×ÏÈ£¬ÒªÓ¸ÒÃæ¶ÔÒÅÁô´úÂë¿â£¬ÍŶÓÀïÒ»¶¨ÒªÓÐÈËÕ¾³öÀ´¸ú´ó¼Ò˵£¬ÎÒÃDz»ÄÜÈôúÂë¼ÌÐø¸¯ÀÃÏÂÈ¥£¬ÎÒÃÇÒªÓÐÇåÎúµÄÄ¿±êºÍÕýÈ·µÄ²ßÂÔ£¬ÔÚÖØ¹¹ÖÐÈÃÓÅÐãµÄÉè¼Æ½¥½¥Ó¿ÏÖ¡£Õâ²ÅÊÇÕý;¡£
ÒªÓÐÕýÈ·µÄ·½·¨
ÔÚÒÅÁô´úÂëÖй¤×÷£¬Long-Term RefactoringÊDz»¿É»òȱµÄ¡£ÈËÃÇÐèÒªÔ¤¼ûµ½ÔÚδÀ´µÄ²úÆ·¹æ»®ÖУ¬ÄÄЩ×é¼þÓ¦µ±±»Ìæ»»£¬ÄIJ¿·Ö¼Ü¹¹ÐèÒª×÷³öµ÷Õû£¬°ÑËüÃǷŵ½µü´ú¼Æ»®ÀïÃæÀ´£¬µ±×öÈÕ³£¹¤×÷µÄÒ»²¿·Ö¡£³éÏó·ÖÖ§ºÍÌØÐÔ¿ª¹ØÔÚLong-Term
Refactoring¿ÉÒÔ·¢»ÓÏÔÖøµÄЧ¹û£¬ËüÃÇÊdzÖÐø½»¸¶µÄ±£ÕÏ¡£
Éè¼Æ»á¹ýʱ£¬µ«Éè¼ÆÔÔò²»»á
ºÜ¶à¼¼Êõ¾ö²ß¶¼²»ÊǷǺڼ´°×µÄ£¬ËüÃǸüÏñÊÇÔÚÖÖÖÖÔ¼ÊøÏÂ×ö³öµÄȨºâ¡£Ê±¹â»áÍÊÉ«£¬¿ò¼Ü»á¹ýʱ£¬ÍÑÀëÁ˾ßÌ峡¾°£¬½ñÌìµÄÓÅÐãÉè¼ÆÒ²»áÂÙÂä³ÉÃ÷ÌìµÄÒÅÁô´úÂ룬µ«Éè¼ÆÔÔòÓÐ×Ų»¶¯ÉùÉ«µÄÁ¦Á¿¡£ÎÒÃÇÎÞ·¨Ô¤¼ûδÀ´£¬Ö»Äܸù¾Ýµ±Ç°µÄÇé¿ö×ö³ö¼òµ¥¶øÁé»îµÄÉè¼Æ¡£ÕâÑùµÄÉè¼ÆÓ¦µ±·þ´ÓÕâЩÉè¼ÆÔÔò£ºµ¥Ò»Ö°Ôð¡¢¹Ø×¢µã·ÖÀë¡¢²»ÒªºÍİÉúÈË˵»°¡¡ÈÃÎÒÃǵĴúÂ뾡¿ÉÄܱ£³Ö¸ßÄÚ¾ÛµÍñîºÏ£¬±£Ö¤Á¼ºÃµÄ¿É²âÊÔÐÔ¡£ |