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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Õû½à´úÂëÖ®µÀ¡ª¡ªÖع¹
 
×÷Õß:ÄÏÖ¾ÎÄ À´Ô´£ºInfoQ ·¢²¼ÓÚ£º 2017-7-5
  3221  次浏览      27
 

дÔÚÇ°Ãæ

ÏÖÔÚµÄÈí¼þϵͳ¿ª·¢ÄѶÈÖ÷ÒªÔÚÓÚÆä¸´ÔӶȺ͹æÄ££¬¿Í»§ÐèÇóÒ²²»ÔÙÏñWinston RoyceÆÙ²¼Ä£ÐÍÆÚÍûÄÇÑùÔÚϵͳ±àÂëǰÍê³ÉËùÓеÄÉè¼ÆÂú×ãÓû§Èí¼þÐèÇó¡£ÔÚÕâ¸öÐÅÏ¢±¬Õ¨¼¼ÊõÈÕÐÂÔÂÒìµÄʱ´ú£¬ÐèÇó×ÜÊÇÔÚ²»¶ÏµÄ±ä»¯£¬ËæÖ®ÔÚ2001ÄêÒµ½ç17λ´óÅ£¾Û¼¯ÔÚÃÀ¹úÓÌËûÖݵĻ¬Ñ©Ê¤µØÑ©Äñ£¨Snowbird£©Ñ©³¡£¬Ìá³öÁË¡°Agile¡±£¨Ãô½Ý£©Èí¼þ¿ª·¢¼ÛÖµ¹Û£¬²¢ÔÚËûÃǵÄŬÁ¦Íƶ¯Ï£¬¿ªÊ¼ÔÚÒµ½çÁ÷ÐÐÆðÀ´¡£ÔÚ¡¶´úÂëÕû½àÖ®µÀ¡·Ò»ÊéÖÐÌá³ö£ºÒ»ÖÖÈí¼þÖÊÁ¿£¬¿É³ÖÐø¿ª·¢²»½öÔÚÓÚÏîÄ¿¼Ü¹¹Éè¼Æ£¬»¹Óë´úÂëÖÊÁ¿ÃÜÇÐÏà¹Ø£¬´úÂëµÄÕû½à¶ÈºÍÖÊÁ¿³ÉÕý±È£¬Ò»·ÝÕû½àµÄ´úÂëÔÚÖÊÁ¿ÉÏÊǿɿ¿µÄ£¬ÎªÍŶӿª·¢£¬ºóÆÚά»¤£¬Öع¹µì¶¨ÁËÁ¼ºÃµÄ»ù´¡¡£

½ÓÏÂÀ´±ÊÕß½«½áºÏ×Ô¼ºÖ®Ç°µÄÖØ¹¹Êµ¼ù¾­Ñ飬À´Ì½ÌÖÆ½Ê±Êµ¼Ê¿ª·¢¹ý³ÌÖÐÎÒÃÇ×¢ÖØ´úÂëÓÅ»¯Êµ¼ùϸ½ÚÖ®µÀ£¬¶ø²»ÊÇÕ¾ÔÚ´¿¿Õ¶´µÄÀíÂÛÀ´Ì¸ÂÛ´úÂëÕû½àÖ®µÀ¡£

ÔÚ¾ßÌå̽ÌÖÈçºÎ½øÐдúÂëÓÅ»¯Ö®Ç°£¬ÎÒÃÇÊ×ÏÈÐèҪȥ̽ÌÖºÍÃ÷ȷϺÎνÊÇ¡°´úÂëµÄ»µÎ¶µÀ¡±£¬ºÎνÊÇ¡°Õû½àÓÅÐã´úÂ롱¡£ÒòΪһÇÐÓÅ»¯µÄ¸ùÔ´¶¼ÊÇÀ´×ÔÓÚÎÒÃÇÆ½Ê±¿ª·¢¹ý³ÌÖжøÇÒÊÇ¿ª·¢ÈËÔ±×Ô¼º²úÉúµÄ¡°´úÂ뻵ζµÀ¡±¡£

´úÂëµÄ»µÎ¶µÀ

¡°Èç¹ûÄò²¼³ôÁË£¬¾Í»»µôËü¡£¡±£­Óï³öBeckÄÌÄÌ£¬ÂÛ¸§ÑøÐ¡º¢µÄÕÜѧ¡£Í¬Ñù£¬´úÂëÈç¹ûÓлµÎ¶µÀÁË£¬ÄÇôÎÒÃǾÍÐèÒªÈ¥ÖØ¹¹ËüʹÆä³ÉΪÓÅÐãµÄÕû½à´úÂë¡£

̸ÂÛµ½ºÎν´úÂëµÄ»µÎ¶µÀ£¬Öظ´´úÂ루Duplicated Code£©Ê×µ±Æä³å¡£Öظ´ÔÚÈí¼þϵͳÊÇÍò¶ñµÄ,ÎÒÃÇÊìϤµÄ·ÖÀë¹Ø×¢µã£¬ÃæÏò¶ÔÏóÉè¼ÆÔ­ÔòµÈ¶¼ÊÇΪÁ˼õÉÙÖØ¸´Ìá¸ßÖØÓã¬Don¡¯t repeat yourself(DRY)¡£¹ØÓÚDRYÔ­Ôò£¬ÎÒÃÇÔÚÆ½Ê±¿ª·¢¹ý³ÌÖбØÐëÒªÑϸñ×ñÊØ¡£

Æä´Î»¹ÓÐÆäËû»µÎ¶µÀ£º¹ý³¤º¯Êý(Long Method)¡¢¹ý´óµÄÀà(Large Class)¡¢¹ý³¤²ÎÊýÁбí(Long Parameter List)¡¢ÈßÓàÀࣨLazy Class£©¡¢ÈßÓຯÊý£¨Lazy Function£©ÎÞÓú¯Êý²ÎÊý£¨Unused Function Parameter£©¡¢º¯ÊýȦ¸´ÔӶȳ¬¹ý10£¨The Complexity is over 10£©¡¢ÒÀÁµÇé½á£¨Feature Envy£©¡¢Switch¹ý¶àʹÓã¨Switch Abuse£©¡¢¹ý¶ÈÀ©Õ¹Éè¼Æ£¨Over-extend design£©¡¢²»¿É¶Á»òÕ߿ɶÁÐÔ²îµÄ±äÁ¿ÃûºÍº¯ÊýÃû(unread variable or function name)¡¢ÒìÇúͬ¹¤ÀࣨAlternative Classes with Different Interfaces£©¡¢¹ý¶ÈñîºÏµÄÏûÏ¢Á´£¨Message Chains£©¡¢ÁîÈËÃÔ»óµÄÁÙʱ×ֶΣ¨Temporary Field£©¡¢¹ý¶à×¢ÊÍ(Too Many Comments)µÈ»µÎ¶µÀ¡£

Õû½à´úÂë

ʲôÊÇÕû½à´úÂ룿²»Í¬µÄÈË»áÕ¾ÔÚ²»Í¬µÄ½Ç¶È²ûÊö²»Í¬µÄ˵·¨¡£¶øÎÒ×îϲ»¶µÄÊÇGrady Booch£¨¡¶ÃæÏò¶ÔÏó·ÖÎöÓëÉè¼Æ¡·×÷Õߣ©²ûÊö£º

¡°Õû½àµÄ´úÂë¼òµ¥Ö±½Ó¡£Õû½àµÄ´úÂëÈçͬÓÅÃÀµÄÉ¢ÎÄ¡£Õû½àµÄ´úÂë´Ó²»Òþ²ØÉè¼ÆÕßµÄÒâͼ£¬³äÂúÁ˸ɾ»ÀûÂäµÄ³éÏóºÍÖ±½ØÁ˵±µÄ¿ØÖÆÓï¾ä¡£¡±

Õû½àµÄ´úÂë¾ÍÊÇÒ»ÖÖ¼òÔ¼£¨¼òµ¥¶ø²»¹ýÓÚÌ«¼òµ¥£©µÄÉè¼Æ£¬ÔĶÁ´úÂëµÄÈËÄܺÜÇåÎúµÄÃ÷°×ÕâÀïÔÚ¸Éʲô£¬¶ø²»ÊÇÒþɬÄѶ®£¬Õû½àµÄ´úÂë¶ÁÆðÀ´ÈÃÈ˸оõµ½¾ÍÏñÔĶÁÉ¢ÎÄ-ÒÕÊõµÄ³Áµí£¬×÷ÕßÊǾ«ÐÄÔÚÒâµÞÔì³öÀ´¡£

Õû½à´úÂëÊÇÏà¶ÔÓÚ´úÂ뻵ζµÀµÄ£¬ÈçºÎ½«»µÎ¶µÀ´úÂëÓÅ»¯³ÉÕû½à´úÂ룬ÕýÊDZÊÕß±¾ÎÄËù̽ÌÖµÄÖØµãÄÚÈÝ£ºÕû½à´úÂëÖ®µÀ£­Öع¹£¬½ÓÏÂÀ´±ÊÕß½«´Ó¼¸¸ö½Ç¶ÈÖØµãÃèÊöÈçºÎ¶ÔÈí¼þ½øÐÐÓÐЧÓм¼ÇɵÄÖØ¹¹¡£

ÖØ¹¹ ¡ª Why

ÔÚÈí¼þ¿ª·¢¹ý³ÌÖÐÍùÍù¿ª·¢Õß²»¾­Òâ¼ä¾ÍÄܲúÉú´úÂëµÄ»µÎ¶µÀ£¬ÌرðÊÇÍŶÓÈËԱˮƽ²Î²î²»Æëÿ¸öÈ˵ľ­ÑéºÍ¼¼ÊõÄÜÁ¦²»Í¬µÄÇé¿öϸüÈÝÒײúÉú²»Í¬½×¶ÎµÄ´úÂ뻵ζµÀ¡£²¢ÇÒËæ×ÅÐèÇóµÄµü´úºÍʱ¼äÍÆÒÆ£¬´úÂëµÄ»µÎ¶µÀÔ½À´Ô½ÑÏÖØ£¬ÉõÖÁÓ°Ïìµ½ÍŶӵĿª·¢Ð§ÂÊ£¬ÄÇôÓöµ½Õâ¸öÎÊÌâ¸ÃÈçºÎÈ¥½â¾ö¡£

ÔÚÈí¼þ¿ª·¢Coding֮ǰÎÒÃDz»¿ÉÄÜÊÂÏÈÁ˽âËùÓеÄÐèÇó£¬Èí¼þÉè¼Æ¿Ï¶¨»áÓп¼ÂDz»Öܵ½²»È«ÃæµÄµØ·½£¬¶øÇÒËæ×ÅÏîÄ¿ÐèÇóµÄChange£¬ºÜÓпÉÄÜÔ­À´µÄ´úÂëÉè¼Æ½á¹¹ÒѾ­²»ÄÜÂú×㵱ǰÐèÇó¡£

¸üºÎ¿ö£¬ÎÒÃǺÜÉÙÓлú»á´ÓÍ·µ½Î²²ÎÓë²¢ÇÒ×îÖÕÍê³ÉÒ»¸öÏîÄ¿£¬»ù±¾É϶¼ÊǽÓÊÖ±ðÈ˵ĴúÂ룬¼´Ê¹Õâ¸öÏîÄ¿ÊÇ´ÓÍ·²ÎÓëµÄ£¬Ò²ÓпÉÄܽÓÊÖÍŶӯäËû³ÉÔ±µÄ´úÂë¡£ÎÒÃǶ¼ÓйýÕâÑùµÄÀàËÆµÄ±§Ô¹¾­Àú£¬¿´µ½±ðÈ˵ĴúÂëʱ¸Ð¾õ¾ÍÏñÀ¬»øÒ»ÑùÌØ±ð²î¾¢£¬ÓÐÒ»ÖÖÇ¿ÁÒµÄÍêÈ«ÏëÖØÐ´µÄ³å¶¯£¬µ«Ò»¶¨ÒªÑ¹ÖÆ×¡ÕâÖֳ嶯£¬ÄãÍêÈ«ÖØÐ´£¬¿ÉÄܱÈÔ­À´µÄºÃÒ»µã£¬µ«ÀË·Ñʱ¼ä²»Ëµ£¬»¹ÓпÉÄÜÒýÈëÔ­À´²»´æÔÚµÄBug£¬¶øÇÒ£¬Äã²»Ò»¶¨±ÈÔ­À´Éè¼ÆµÃºÃ£¬Ò²ÐíÔ­À´µÄÉè¼Æ¿¼Âǵ½ÁËһЩÄãû¿¼Âǵ½µÄ·ÖÖ§»òÕßÒì³£Çé¿ö¡£

ÎÒÃÇдµÄ´úÂ룬ÖÕÓÐÒ»ÌìÒ²»á±»±ðÈ˽ÓÊÖ£¬ºÜ¿ÉÄܵ½Ê±±ðÈË»áÓкÍÎÒÃÇÏÖÔÚÒ»ÑùµÄ³å¶¯£¬ËùÒÔ¿ª·¢ÕßÔÚ¿´±ðÈË´úÂëʱºò£¬Òª»³×ÅÒ»¿ÅѧϰºÍ¾´Î·Ö®ÐÄ£¬È¥·¢ÏÖ±ðÈ˵ĴúÂëÖ®ÃÀ£¬ÔÚÕâ¸ö¹ý³ÌÖÐÌô³öдµÄ±È½ÏºÃµÄÓÅÐã´úÂ룬ÎüÈ¡¾«»ª£¬È¥ÆäÔãÆÉ£¬ÔÚÕâ¸ö»ù´¡ÉÏ£¬ÎÒÃÇÔÙÈ¥Ì¸ÖØ¹¹£¬ÄÇôÄãµÄÖØ¹¹»áÊÇÒ»¸öºÃµÄ¿ª¶Ë¡£

×ÜÖ®£¬ÎÒÃÇÒª×öµÄÊÇÖØ¹¹²»ÊÇÖØÐ´£¬ÒªÏÈ´ÓС·¶Î§µÄ¾Ö²¿Öع¹¿ªÊ¼£¬È»ºóÖð²½À©Õ¹µ½Õû¸öÄ£¿é¡£

ÖØ¹¹ ¡ª ×÷ÓÃ

ÖØ¹¹£¬¾ø¶ÔÊÇÈí¼þ¿ª·¢Ð´³ÌÐò¹ý³ÌÖÐ×îÖØÒªµÄÊÂÖ®Ò»¡£ÄÇôʲôÊÇÖØ¹¹£¬ÈçºÎ½âÊÍÖØ¹¹¡£Ãû´Ê£º¶ÔÈí¼þÄÚ²¿½á¹¹µÄÒ»ÖÖµ÷Õû£¬Ä¿µÄÊÇÔÚ²»¸Ä±äÈí¼þ¿É¹Û²ìÐÐΪµÄǰÌáÏ£¬Ìá¸ßÆä¿ÉÀí½âÐÔ£¬½µµÍÆäÐ޸ijɱ¾¡£¶¯´Ê£ºÊ¹ÓÃһϵÁÐÖØ¹¹ÊÖ·¨£¬ÔÚ²»¸Ä±äÈí¼þ¿É¹Û²ìÐÐΪµÄǰÌáÏ£¬µ÷ÕûÆä½á¹¹¡£

ÖØ¹¹²»Ö»¿ÉÒÔ¸ÄÉÆ¼ÈÓеÄÉè¼Æ½á¹¹£¬»¹¿ÉÒÔ°ïÖúÎÒÃÇÀí½âÔ­À´ºÜÄÑÀí½âµÄÁ÷³Ì¡£±ÈÈçÒ»¸ö¸´ÔÓµÄÌõ¼þ±í´ïʽ£¬ÎÒÃÇ¿ÉÄÜÐèÒªºÜ¾Ã²ÅÄÜ¿´Ã÷°×Õâ¸ö±í´ïʽµÄ×÷Ó㬻¹¿ÉÄÜ¿´Á˺þÃÖÕÓÚ¿´Ã÷°×ÁË£¬¹ýÁËû¶à³¤Ê±¼äÓÖÍüÁË£¬ÏÖÔÚ»¹Òª´ÓÍ·¿´£¬Èç¹ûÎÒÃǰÑÕâ¸ö±í´ïʽÔËÓÃExtract Method³éÏó³öÀ´£¬²¢ÆðÒ»¸öÒ×ÓÚÀí½âµÄÃû×Ö£¬Èç¹ûº¯ÊýÃû×ÖÆðµÃºÃ£¬Ï´ε±ÎÒÃÇÔÙ¿´µ½Õâ¶Î´úÂëʱ£¬²»Óÿ´Âß¼­ÎÒÃǾÍÖªµÀÕâ¸öº¯ÊýÊÇ×öʲôµÄ¡£

Èç¹û¶ÔÕâ¸öº¯ÊýÄÚËùÓÐÄÑÓÚÀí½âµÄµØ·½ÎÒÃÇ×öÁËÊʵ±µÄÖØ¹¹£¬°Ñÿ¸öϸСµÄÂß¼­³éÏó³ÉÒ»¸öСº¯Êý²¢ÆðÒ»¸öÈÝÒ×Àí½âµÄÃû×Ö£¬µ±ÎÒÃÇ¿´´úÂëʱ¾ÍÓпÉÄÜÏñ¿´×¢ÊÍÒ»Ñù£¬²»ÓÃÔÙÏñÒÔǰһÑùͨ¹ý¿´´úÂëµÄʵÏÖÀ´²Â²âÕâ¶Î´úÂëµ½µ×ÊÇ×öʲôµÄ£¬ÎÒÒ»Ö±¼á³ÖºÍ±ü³ÖÕâ¸ö¹Ûµã£ººÃµÄ´úÂëʤ¹ý×¢ÊÍ£¬±Ï¾¹×¢ÊÍ»¹ÊÇÓпÉÄܸüв»¼°Ê±µÄ£¬²»¼°Ê±×îеÄ×¢ÊÍÈÝÒ׸üÆäËûÈË´øÀ´¸ü¶àµÄÀí½âÉϵÄÀ§»ó¡£

´ËÍâÖØ¹¹¿ÉÒÔʹÎÒÃÇÔö¼Ó¶Ô´úÂëºÍÒµÎñÂß¼­¹¦ÄܵÄÀí½â£¬´Ó¶ø°ïÖúÎÒÃÇÕÒµ½Bug£»Öع¹¿ÉÒÔ°ïÖúÎÒÃÇÌá¸ß±à³ÌËÙ¶È£¬¼´Öع¹¸ÄÉÆÁ˳ÌÐò½á¹¹Éè¼Æ£¬²¢ÇÒÒòÎªÖØ¹¹µÄ¿ÉÀ©Õ¹ÐÔʹÌí¼Óй¦ÄܱäµÃ¸ü¿ì¸üÈÝÒס£

ÖØ¹¹ ¡ª ʱ»ú

Àí½âÁËÖØ¹¹µÄÒâÒåºÍ×÷Óã¬ÄÇôÎÒÃǺÎʱ¿ªÊ¼Öع¹ÄØ£¿±ÊÕßÒ»Ö±¼á³ÖÕâÖÖ¹Ûµã£ºÖØ¹¹ÊÇÒ»¸ö³ÖÐøµÄϵͳÐԵŤ³Ì£¬ËüÊǹᴩÓÚÕû¸öÈí¼þ¿ª·¢¹ý³ÌÖУ¬ÎÒÃÇÎÞÐèרÃŵÄÌô³öʱ¼ä½øÐÐÖØ¹¹£¬Öع¹Ó¦¸ÃËæÊ±ËæµØµÄ½øÐУ¬¼´×ñÑ­Èý´Î·¨Ôò£ºÊ²»¹ýÈý£¬ÈýÔòÖØ¹¹¡£Õâ¸ö×¼Ôò±í´ïµÄÒâ˼ÊÇ£ºµÚÒ»´ÎȥʵÏÖÒ»¸ö¹¦Äܾ¡¹ÜÈ¥×ö£¬µ«Êǵڶþ´Î×öÀàËÆµÄ¹¦ÄÜÉè¼ÆÊ±»á²úÉú·´¸Ð£¬µ«ÊÇ»¹ÊÇ»áÈ¥×ö£¬µÚÈý´Î»¹ÊÇʵÏÖÀàËÆµÄ¹¦ÄÜ×öͬÑùµÄÊÂÇ飬ÄÇÄã¾ÍÓ¦¸ÃÈ¥ÖØ¹¹¡£Èý´Î×¼Ôò±È½Ï³éÏó£¬ÄÇô¶ÔÓ¦µ½ÎÒÃǾßÌåµÄÈí¼þ¿ª·¢Á÷³ÌÖУ¬Ò»°ã¿ÉÒÔÔÚÕâÈý¸öʱ»úÈ¥½øÐУº

£¨1£© µ±Ìí¼Óй¦ÄÜʱÈç¹û²»ÊÇÌØ±ðÈÝÒ×£¬¿ÉÒÔͨ¹ýÖØ¹¹Ê¹Ìí¼ÓÌØÐÔºÍй¦ÄܱäµÃ¸üÈÝÒס£ÔÚÌí¼Óй¦ÄܵÄʱºò£¬ÎÒÃǾÍÏÈÇåÀíÕâ¸ö¹¦ÄÜËùÐèÒªµÄ´úÂë¡£»¨Ò»µãʱ¼ä£¬ÓõÎË®´©Ê¯µÄ·½·¨Öð½¥ÇåÀí´úÂë£¬Ëæ×Åʱ¼äµÄÍÆÒÆ£¬ÎÒÃǵĴúÂë¾Í»áÔ½À´Ô½¸É¾»£¬¿ª·¢ËÙ¶ÈÒ²»áÔ½À´Ô½¿ì¡£

£¨2£© ÐÞ¸ÄBugµÄʱºòÈ¥ÖØ¹¹£¬±ÈÈçÄãÔÚ²éÕÒ¶¨Î»BugµÄ¹ý³ÌÖУ¬·¢ÏÖÒÔǰ×Ô¼ºµÄ´úÂë»òÕß±ðÈ˵ĴúÂëÒòΪÉè¼ÆÈ±ÏݱÈÈç¿ÉÀ©Õ¹ÐÔ¡¢½¡×³ÐԱȽϲîÔì³ÉµÄ£¬ÄÇô´Ëʱ¾ÍÊÇÒ»¸ö±È½ÏºÃµÄÖØ¹¹Ê±»ú¡£¿ÉÄÜÕâ¸öʱºòºÜ¶àͬѧ¾ÍÓÐÒÉÎÊÁË£¬ÈÏΪÎÒ¿ª·¢Òª¸Ï½ø¶È£¬Ã»ÓÐʱ¼äÈ¥ÖØ¹¹£¬»òÕßÈÏΪÎÒ´ò¹ý²¹¶¡°ÑBug½â¾ö²»¾ÍÐÐÁË£¬²»ÐèÒªÈ¥ÖØ¹¹¡£¸ù¾Ý±ÊÕß֮ǰ¶àÄêµÄ¾­ÑéµÃ³öµÄ½áÂÛ£ºÓöµ½¼´Òª½â¾ö¼´ÄǾÍÊÇÿÓöµ½Ò»¸öÎÊÌ⣬¾ÍÂíÉϽâ¾öËü£¬¶ø²»ÊÇÑ¡ÔñÈÆ¹ýËü¡£ÍêÉÆµ±Ç°ÕýÔÚʹÓõĴúÂ룬ÄÇЩ»¹Ã»ÓÐÓöµ½µÄÎÊÌ⣬¾ÍÏȲ»ÒªÀíËü¡£ÔÚµ±Ç°Ç°½øµÄµÀ·ÉÏ£¬Çå³ýËùÓÐÕϰ­£¬ÒÔºóÄã¿Ï¶¨»¹»áÔÙÒ»´Î×ßÕâÌõ·£¬Ï´ÎÀ´µ½ÕâÀïµÄʱºòÄã»á·¢ÏÖ·Éϲ»ÔÙÓÐÕϰ­¡£

Èí¼þ¿ª·¢¾ÍÊÇÕâÑù¡£»òÐí½â¾öÕâ¸öÎÊÌâÐèÒªÄã¶à»¨Ò»µãʱ¼ä¡£µ«ÊÇ´Ó³¤Ô¶À´¿´£¬Ëü»á°ïÄã½Úʡϸü¶àµÄʱ¼ä¡£Ò²¾ÍÊÇÖØ¹¹ÊǸöÑ­Ðò½¥½øµÄ¹ý³Ì£¬¾­¹ýÒ»¶Îʱ¼äÖ®ºó£¬Äã»á·¢ÏÖ֮ǰËùÓеļ¼ÊõÕ®Îñ»áÖð²½¶¼²»¼ûÁË£¬ËùÓеĿÓÏà¼Ì¶¼±»ÌîÆ½ÁË¡£ÕâÖÖÑ­Ðò½¥½øµÄ´úÂëÖØ¹¹µÄºÃ´¦¿ªÊ¼ÏÔÏÖ£¬±à³ÌµÄËÙ¶ÈÃ÷ÏÔ»á¼Ó¿ì¡£

£¨3£©Code ReviewÊ±È¥ÖØ¹¹£¬ºÜ¶à¹«Ë¾Ñз¢ÍŶӶ¼»áÓж¨ÆÚµÄCode Review,ÕâÖֻµÄºÃ´¦¶à¶à£¬±ÈÈçÓÐÖúÓÚÔÚ¿ª·¢ÍŶÓÖд«²¥ÖªÊ¶½øÐм¼Êõ·ÖÏí£¬ÓÐÖúÓÚÈýÏÓо­ÑéµÄ¿ª·¢Õß°Ñ֪ʶ´«µÝ¸øÇ·È±¾­ÑéµÄÈË£¬²¢°ïÖú¸ü¶àµÄÈ˶ÔÈí¼þµÄÆäËûÒµÎñÄ£¿é¸ü¼ÓÊìϤ´Ó¶øÊµÏÖ¿çÄ£¿éµÄµü´ú¿ª·¢¡£Code Review¿ÉÒÔÈøü¶àµÄÈËÓлú»á¶Ô×Ô¼ºÌá³ö¸ü¶àÓÅÐãºÃµÄ½¨Òé¡£Í¬Ê±ÖØ¹¹¿ÉÒÔ°ïÖúÉó²é±ðÈ˵ĴúÂ룬ÒòΪÔÚÖØ¹¹Ç°£¬ÄãÐèÒªÏÈÔĶÁ´úÂëµÃµ½Ò»¶¨³Ì¶ÈµÄÀí½âºÍÊìϤ£¬´Ó¶øÌá³öһЩ½¨ÒéºÍºÃµÄidea,²¢¿¼ÂÇÊÇ·ñ¿ÉÒÔͨ¹ýÖØ¹¹¿ìËÙʵÏÖ×Ô¼ºµÄºÃÏë·¨£¬×îÖÕͨ¹ýÖØ¹¹Êµ¼ùÄã»áµÃµ½¸ü¶àµÄ³É¾Í¸ÐÂú×ã¸Ð¡£ÎªÁËʹÉó²é´úÂëµÄ¹¤×÷±äµÃ¸ßЧÓÐ×÷Ó㬾ÝÎÒÒÔǰµÄ¾­Ñ飬ÎÒ½¨ÒéÒ»¸öÉó²éÕߺÍÒ»¸öÔ­×÷Õß½øÐкÏ×÷£¬Éó²éÕßÌá³öÐ޸Ľ¨Ò飬ȻºóÁ½È˹²Í¬ÅжÏÕâЩÐÞ¸ÄÊÇ·ñÄܹ»Í¨¹ýÖØ¹¹ÇáËÉʵÏÖ£¬Èç¹ûÐ޸ijɱ¾±È½ÏµÍ£¬¾ÍÔÚReviewµÄ¹ý³ÌÖÐÒ»Æð×ÅÊÖÐ޸ġ£

Èç¹ûÊDZȽϴóÐͱȽϸ´ÔÓµÄÉè¼Æ¸´²éÉóºË¹¤×÷£¬½¨ÒéÔ­×÷ÕßʹÓÃUMLÀàÐòÁÐͼ¡¢Ê±¼äÐòÁÐͼ¡¢Á÷³ÌͼȥÏòÉó²éÕßÕ¹ÏÖÉè¼ÆµÄ¾ßÌåʵÏÖϸ½Ú£¬ÔÚÕû¸öCode ReviewÖУ¬Éó²éÕß¿ÉÒÔÌá³ö×Ô¼ºµÄ½¨Òé»òÕßÐÞ¸ÄÒâ¼û¡£ÔÚÕâÖÖÇé¾°Ï£¬Éó²éÕßÒ»°ãÓÉÍŶÓÀïÃæ±È½Ï×ÊÉîµÄ¹¤³Ìʦ¡¢¼Ü¹¹Ê¦¡¢¼¼Êõר¼ÒµÈ³ÉÔ±×é³É¡£

¹ØÓÚCode ReviewµÄÐÎʽ£¬»¹¿ÉÒÔ²ÉÈ¡¼«ÏÞ±à³ÌÖеġ°½á¶Ô±à³Ì¡±ÐÎʽ¡£ÕâÖÖÐÎʽ¿ÉÒÔ²ÉÈ¡Á½¸öÈËλÖÃ×øÔÚÒ»ÆðÈ¥Éó²é´úÂ룬¿ÉÒÔ²ÉÈ¡Á½¸öƽ̨±ÈÈçIOS ºÍandroid µÄ¿ª·¢ÈËÔ±Ò»ÆðÈ¥Éó²é£¬»òÕß¾­Ñé×ÊÉîµÄºÍ¾­Ñé²»×ÊÉîµÄÈËÔ±Ò»Æð´îÅäÈ¥Éó²é¡£

ÖØ¹¹µÄÕâÈý¸öʱ»úÒª°ÑÎÕºÃÔ­Ôò£¬¼´Ê²Ã´Ê±ºò²»Ó¦¸ÃÖØ¹¹£¬±ÈÈçÓÐʱºò¼ÈÓдúÂëʵÏÖÌ«»ìÂÒÀ²£¬Öع¹Ëü»¹²»ÈçÖØÐÂдһ¸öÀ´µÃ¼ò£»´ËÍ⣬Èç¹ûÄãµÄÏîÄ¿ÒѾ­½øÈëÁËβÆÚ£¬´ËʱҲӦ¸Ã±ÜÃâÖØ¹¹£¬Õâʱ»úÓ¦¸Ã¾¡¿ÉÄÜÒÔ±£³ÖÈí¼þµÄÎȶ¨ÐÔΪÖ÷¡£

Àí½âÁËÖØ¹¹ÊÇ×öʲô£¬Öع¹µÄ×÷Óã¬ÎªÊ²Ã´ÒªÖع¹£¬ÒÔ¼°Öع¹µÄʱ»ú£¬ÎÒÃǶÔÖØ¹¹ÓÐÁ˳õ²½ÈÏʶ£¬½ÓÏÂÀ´±ÊÕßÖØµãƪ·ùÀ´½²½âÈçºÎʹÓÃÖØ¹¹¼¼ÇÉÈ¥ÓÅ»¯´úÂëÖÊÁ¿´ï³ÉClean Code .

ÖØ¹¹¼¼ÇÉ ¡ª º¯ÊýÖØ¹¹

ÖØ¹¹µÄÔ´Í·Ò»ÇдÓÖØ¹¹º¯Êý¿ªÊ¼£¬ÕÆÎÕº¯ÊýÖØ¹¹¼¼ÇÉÊÇÖØ¹¹¹ý³ÌÖкܹؼüµÄÒ»²½£¬½ÓÏÂÀ´ÎÒÃÇÀ´Ì½ÌÖϺ¯ÊýÖØ¹¹ÓÐÄÇЩʵÓü¼ÇÉ¡£

ÖØÃüÃûº¯Êý£¨Rename Function Name£© : Clean CodeÒªÇó¶¨ÒåµÄ±äÁ¿ºÍº¯ÊýÃû¿É¶ÁÐÔҪǿ£¬´ÓÃû×־ͿÉÒÔÖªµÀÕâ¸ö±äÁ¿ºÍº¯ÊýÈ¥×öʲôÊÂÇ飬ËùÒԺõĿɶÁÐÔÇ¿µÄº¯ÊýÃû³ÆºÜÖØÒª£¬ÌرðÊÇÓÐÖúÓÚÀí½â±È½Ï¸´ÔÓµÄÒµÎñÂß¼­¡£

ÒÆ³ý²ÎÊý£¨Remove Parameter£©: µ±º¯Êý²»ÔÙÐèҪij¸ö²ÎÊýʱ£¬Òª¹û¶ÏÒÆ³ý£¬²»ÒªÎªÁËij¸öδ֪ÐèÇóÔ¤Áô²ÎÊý£¬¹ý¶àµÄ²ÎÊý»á¸øÊ¹ÓÃÕß´øÀ´²ÎÊýÀ§ÈÅ¡£

½«²éѯº¯ÊýºÍÐ޸ĺ¯Êý·ÖÀ룺Èç¹ûij¸öº¯Êý¼È·µ»Ø¶ÔÏóÖµ£¬ÓÖÐ޸ĶÔÏó״̬¡£ÕâʱºòÓ¦¸Ã½¨Á¢Á½¸ö²»Í¬µÄº¯Êý£¬ÆäÖÐÒ»¸ö¸ºÔð²éѯ£¬ÁíÒ»¸ö¸ºÔðÐ޸ġ£Èç¹û²éѯº¯ÊýÖ»ÊǼòµ¥µÄ·µ»ØÒ»¸öÖµ¶øÃ»Óи±×÷Ó㬾ͿÉÒÔÎÞÏ޴εĵ÷Óòéѯº¯Êý¡£¶ÔÓÚ¸´ÔӵļÆËãÒ²¿ÉÒÔ»º´æ½á¹û¡£

ÁÊýЯ´ø²ÎÊý£ºÈç¹ûÈô¸Éº¯Êý×öÁËÀàËÆµÄ¹¤×÷£¬Ö»ÊÇÉÙÊý¼¸¸öÖµ²»Í¬µ¼ÖÂÐÐΪÂÔÓв»Í¬£¬ºÏ²¢ÕâЩº¯Êý£¬ÒÔ²ÎÊýÀ´±í´ï²»Í¬µÄÖµ¡£

ÒÔÃ÷È·º¯ÊýÈ¡´ú²ÎÊý£ºÓÐÒ»¸öº¯ÊýÆäÖеÄÂß¼­Íêȫȡ¾öÓÚ²ÎÊýÖµ¶ø²ÉÈ¡²»Í¬ÐÐΪ£¬Õë¶Ô¸Ã²ÎÊýµÄÿһ¸ö¿ÉÄÜÖµ½¨Á¢Ò»¸öµ¥¶ÀµÄº¯Êý¡£

±£³Ö¶ÔÏóÍêÕûÐÔ£ºÈç¹ûÄãÐèÒª´Óij¸ö¶ÔÏóÈ¡Èô¸ÉÖµ£¬×÷Ϊº¯ÊýµÄ¶à¸ö²ÎÊý´«½øÈ¥£¬ÌرðÊÇÐèÒª´«Èë½Ï¶à²ÎÊý±ÈÈç5¸ö²ÎÊý»òÕ߸ü¶à²ÎÊýʱ£¬ÕâÖÖÇé¿ö½¨ÒéÖ±½Ó½«Õâ¸ö¶ÔÏóÖ±½Ó´«Èë×÷Ϊº¯Êý²ÎÊý£¬ÕâÑù¼È¿ÉÒÔ¼õÉÙ²ÎÊýµÄ¸öÊý£¬Ôö¼ÓÁ˶ÔÏó¼äµÄÐÅÀµÐÔ£¬¶øÇÒÕâÑù±»µ÷ÓÃÕßÐèÒªÕâ¸ö¶ÔÏóµÄÆäËûÊôÐÔʱ¿ÉÒÔ²»ÓÃÈËΪµÄÔÙÈ¥Ð޸ĺ¯Êý²ÎÊý¡£

ÒÔº¯ÊýÈ¡´ú²ÎÊý£º¶ÔÏóµ÷ÓÃij¸öº¯Êý£¬²¢½«ËùµÃ½á¹û×÷Ϊ²ÎÊý´«µÝ¸øÁíÍâÒ»¸öº¯Êý£¬¶øÄǸöº¯Êý±¾ÉíÒ²Äܹ»µ÷ÓÃǰһ¸öº¯Êý£¬Ö±½ÓÈÃÄǸöº¯Êýµ÷ÓþÍÐУ¬¿ÉÒÔÖ±½ÓÈ¥³ýÄǸö²ÎÊý£¬´Ó¶ø¼õÉÙ²ÎÊý¸öÊý¡£

ÒýÈë²ÎÊý¶ÔÏó£ºÄ³Ð©²ÎÊý×ÜÊÇͬʱ³öÏÖ£¬Ð½¨Ò»¸ö¶ÔÏóÈ¡´úÕâЩ²ÎÊý£¬²»µ«¿ÉÒÔ¼õÉÙ²ÎÊý¸öÊý£¬¶øÇÒÒ²Ðí»¹ÓÐһЩ²ÎÊý¿ÉÒÔÇ¨ÒÆµ½Ð½¨µÄ²ÎÊýÀàÖУ¬Ôö¼ÓÀàµÄ²ÎÊýÀ©Õ¹ÐÔ¡£

ÒÆ³ýÉèÖµº¯Êý£¨Setting Method£©£ºÈç¹ûÀàÖеÄij¸ö×Ö¶ÎÓ¦¸ÃÔÚ¶ÔÏó´´½¨Ê±¸³Öµ£¬´Ëºó¾Í²»Ôٸı䣬ÕâÖÖÇ龰ϾͲ»ÐèÒªÌí¼ÓSetting method¡£

Òþ²Øº¯Êý£ºÈç¹ûÓÐÒ»¸öº¯Êý´ÓÀ´Ã»Óб»ÆäËûÀàÓÐÓõ½£¬»òÕßÊDZ¾À´±»Óõ½£¬µ«Ëæ×ÅÀද̬Ìí¼Ó½Ó¿Ú»òÕßÐèÇó±ä¸ü£¬Ö®ºó¾ÍʹÓò»µ½ÁË£¬ÄÇôÐèÒªÒþ²ØÕâ¸öº¯Êý£¬Ò²¾ÍÊǼõС×÷ÓÃÓò¡£

ÒÔ¹¤³§º¯ÊýÈ¡´ú¹¹Ô캯Êý£ºÈç¹ûÄãÏ£Íû´´½¨¶ÔÏóʱºò²»½ö½ö×ö¼òµ¥µÄ¹¹½¨¶¯×÷£¬×îÏÔ¶øÒ×¼ûµÄ¶¯»ú¾ÍÊÇÅÉÉú×ÓÀàʱ¸ù¾ÝÀàÐÍÂë´´½¨²»Í¬µÄ×ÓÀ࣬»òÕß¿ØÖÆÀàµÄʵÀý¸öÊý¡£

ÖØ¹¹¼¼ÇÉ ¡ª Ìõ¼þ±í´ïʽ

·Ö½âÌõ¼þ±í´ïʽ£ºÈç¹ûÓÐÒ»¸ö¸´ÔÓµÄÌõ¼þÓï¾ä£¬if/elseÓï¾äµÄ¶ÎÂäÂß¼­ÌáÈ¡³ÉÒ»¸öº¯Êý¡£

ºÏ²¢Ìõ¼þ±í´ïʽ£ºÒ»ÏµÁÐÌõ¼þ²âÊÔ£¬¶¼µÃµ½ÏàͬµÄ²âÊÔ½á¹û£¬¿ÉÒÔ½«ÕâЩ²âÊÔ±í´ïʽºÏ²¢³É³ÉÒ»¸ö£¬²¢½«ºÏ²¢ºóµÄ±í´ïʽÌáÁ¶³ÉÒ»¸ö¶ÀÁ¢º¯Êý£¬Èç¹ûÕâЩÌõ¼þ²âÊÔÊÇÏ໥¶ÀÁ¢²»Ïà¹ØµÄ£¬¾Í²»ÒªºÏ²¢¡£

ºÏ²¢Öظ´µÄÌõ¼þƬ¶Î£ºÔÚÌõ¼þ±í´ïʽµÄÿ¸ö·ÖÖ§ÉÏÓÐ×ÅÏàͬµÄÒ»¶Î´úÂ룬°ÑÕâ¶Î´úÂëÇ¨ÒÆµ½±í´ïʽ֮Íâ¡£

ÒÆ³ý¿ØÖƱê¼Ç£º²»±Ø×ñÑ­µ¥Ò»³ö¿ÚµÄÔ­Ôò£¬²»ÓÃͨ¹ý¿ØÖƱê¼ÇÀ´¾ö¶¨ÊÇ·ñÍ˳öÑ­»·»òÕßÌø¹ýº¯ÊýʣϵIJÙ×÷£¬Ö±½Óbreak»òÕßreturn¡£

ÒÔÎÀÓï¾äÌæ´úǶÌ×Ìõ¼þ±í´ïʽ£ºÌõ¼þ±í´ïʽͨ³£ÓÐÁ½ÖÖ±íÏÖÐÎʽ£¬Ò»£ºËùÓзÖÖ§¶¼ÊôÓÚÕý³£ÐÐΪ£»¶þ£ºÖ»ÓÐÒ»ÖÖÊÇÕý³£ÐÐΪ£¬ÆäËû¶¼ÊDz»³£¼ûµÄÇé¿ö¡£¶ÔÓÚÒ»µÄÇé¿ö£¬Ó¦¸ÃʹÓÃif/elseÌõ¼þ±í´ïʽ£»¶ÔÓÚ¶þÕâÖÖÇé¿ö£¬Èç¹ûij¸öÌõ¼þ²»³£¼û£¬Ó¦¸Ãµ¥¶À¼ì²éÌõ¼þ²¢ÔÚ¸ÃÌõ¼þÎªÕæÊ±Á¢¼´´Óº¯Êý·µ»Ø£¬ÕâÑùµÄµ¥¶À¼ì²é³£³£±»³ÆÎªÎÀÓï¾ä¡£

ÒÔ¶à̬ȡ´úÌõ¼þ±í´ïʽ£ºÈç¹ûÓиöÌõ¼þ±í´ïʽ¸ù¾Ý¶ÔÏóÀàÐ͵IJ»Í¬Ñ¡Ôñ¶øÑ¡Ôñ²»Í¬µÄÐÐΪ£¬½«Ìõ¼þ±í´ïʽµÄÿ¸ö·ÖÖ§·Å½øÒ»¸ö×ÓÀàÄڵĸ²Ð´º¯ÊýÖУ¬½«Ô­Ê¼º¯ÊýÉùÃ÷Ϊ³éÏóº¯Êý¡£

ÒýÈëNull¶ÔÏ󣺵±Ö´ÐÐһЩ²Ù×÷ʱ£¬ÐèÒªÔÙÈý¼ì²éij¶ÔÏóÊÇ·ñΪNULL£¬¿ÉÒÔרÃÅн¨Ò»¸öNULL¶ÔÏó£¬ÈÃÏàÓ¦º¯ÊýÖ´ÐÐÔ­À´¼ì²éÌõ¼þΪNULLʱҪִÐе͝×÷£¬³ýNULL¶ÔÏóÍ⣬¶ÔÌØÊâÇé¿ö»¹¿ÉÒÔÓÐSpecial¶ÔÏó£¬ÕâÀà¶ÔÏóÒ»°ãÊÇSingleton.

ÒýÈë¶ÏÑÔ£º³ÌÐò״̬µÄÒ»ÖÖ¼ÙÉè

ÒÔMAPÈ¡´úÌõ¼þ±í´ïʽ£ºÍ¨¹ýHashMapµÄKey-Value¼üÖµ¶ÔÓÅ»¯Ìõ¼þ±í´ïʽ£¬Ìõ¼þ±í´ïʽµÄÅжÏÌõ¼þ×÷ΪkeyÖµ£¬valueÖµ´æ´¢Ìõ¼þ±í´ïʽµÄ·µ»ØÖµ¡£

ͨ¹ý·´ÉäÈ¡´úÌõ¼þ±í´ïʽ£ºÍ¨¹ý¶¯Ì¬·´ÉäÔ­Àí

ÖØ¹¹¼¼ÇÉ ¡ª °¸Àý

Ç°ÃæÕâ¶àÕ½ÚÄÚÈÝÖ÷Òª¶¼ÊÇÀíÂÛÄÚÈÝ£¬½ÓÏÂÀ´ÎÒÃÇÀ´¿´¿´¾ßÌåµÄÖØ¹¹°¸Àý¡£

MapÈ¥³ýifÌõ¼þ±í´ïʽ

¹ØÓڸü¼ÇɵÄʵÏÖ·½·¨£¬ÉÏÕ½ÚÓн²Êö£¬ÎÒÃÇÖ±½Ó¿´´úÂë°¸ÀýÈçÏ´úÂëËùʾ£º

ԭʼµÄÌõ¼þ±í´ïʽ´úÂëÈçÏÂͼ1Ëùʾ£º

public static int getServiceCode(String str){
int code = 0;
if(str.equals("Age")){
code = 1;
}else if(str.equals("Address")){
code = 2;
}else if(str.equals("Name")){
code = 3;
}else if(str.equals("No")){
code = 4;
}
return code;
}

ÖØ¹¹ºóµÄ´úÂëÈçÏÂËùʾ£º

public static void initialMap(){
map.put("Age",1);
map.put("Address",2);
map.put("Name",3);
map.put("No",4);
}

ÉÏÊö´úÂëÊÇÖ±½Óͨ¹ýMap½á¹¹£¬½«Ìõ¼þ±í´ïʽ·Ö½â£¬ Key ÊÇÌõ¼þ±äÁ¿£¬ValueÊÇÌõ¼þ±í´ïʽ·µ»ØÖµ¡£È¡ÖµºÜ·½±ã£¬ÏÔÈ»¸ßЧÂÊO£¨1£©Ê±¼ä¸´ÔÓ¶Èȡֵ¡£ÕâÖÖÖØ¹¹¼¼ÇÉÊʺÏÓڱȽϼòµ¥µÄÌõ¼þ±í´ïʽ³¡¾°£¬ÏÂÃæÊDZȽϸ´ÔÓµÄûÓзµ»ØÖµµÄÌõ¼þ±í´ïʽ³¡¾°£¬ÎÒÃÇÈ¥¿´¿´ÈçºÎ´¦Àí¡£

·´ÉäÈ¥³ý·ÖÖ§½á¹¹

ԭʼµÄÌõ¼þ±í´ïʽ´úÂëÈçÏÂͼ1Ëùʾ£º

ͼ1 Ìõ¼þ±í´ïʽʾ·¶

ͼ2 ͨ¹ýMapºÍ·´ÉäÖØ¹¹Ê¾·¶

ÈçÉÏͼ2Ëùʾ£¬Í¨¹ýMapºÍ·´ÉäÈ¥·Ö½âÌõ¼þ±í´ïʽ£¬½«Ìõ¼þ±í´ïʽ·ÖÖ§µÄÂß¼­³éÈ¡µ½×ÓÀàÖеĸ²Ð´º¯ÊýÖУ¬ÌáÈ¡Á˹²Í¬µÄ³éÏóÀ࣬ÀïÃæ°üº¬³éÏó½Ó¿Ú handleBusinessData,×ÓÀà¼Ì³ÐʵÏÖËü¡£

¶à̬ȡ´úÌõ¼þ±í´ïʽ

ͼ3 ÖØ¹¹ºóµÄ°¸Àý½á¹ûͼ

ͼ4 ÖØ¹¹ºóµÄ°¸Àý£­¶à̬ÈçºÎʹÓÃ

ͼ5 ÖØ¹¹ºóµÄ´úÂë½á¹¹Í¼

ͼ6 ÖØ¹¹£­³éÏóÀà¡¢¼òµ¥¹¤³§Ä£Ê½Ë¼ÏëȥʵÏÖÌõ¼þ±í´ïʽµÄ·Ö½â

ÈçÉÏͼ6Ëùʾ£¬ÔÚԭʼµÄÌõ¼þ±í´ïʽÖУ¬ÓÐÁ½¸öÌõ¼þ±í´ïʽ·ÖÖ§£¨·ÖÖ§Âß¼­£©£º

ÖÐÎÄÈëסÈ˲Ù×÷HotelCNPasserngerOperatonÀà

Ó¢ÎÄÈëסÈ˲Ù×÷HotelEnPassengerOperation Àà

¹²Í¬³éÈ¡ÁË»ùÀà³éÏóÀࣺAbstractPassengerOperation,ÆäÁ½¸ö·ÖÖ§×ÓÀàÈ¥¼Ì³Ð³éÏóÀà¡£

ΪÁË·Ö½âÌõ¼þ±í´ïʽ£¬±ÊÕß²ÉÈ¡Á˶à̬µÄÖØ¹¹¼¼ÇÉȥʵÏÖ£¬¾ßÌåÓÐÁ½ÖÖʵÏÖ·½Ê½£¬µÚÒ»ÖÖʵÏÖ·½Ê½ÊDzÉÓóéÏóÀàȥʵÏÖ¶à̬£¬´úÂë½á¹¹Í¼Èçͼ5 passengerÎļþ¼Ð£¬UMLÀàͼÈçÉÏͼ6Ëùʾ¡£µÚ¶þÖÖʵÏÖ·½Ê½ÊDzÉÓýӿÚȥʵÏÖ¶à̬£¬´úÂë½á¹¹Èçͼ5 passenger2 Îļþ¼Ð£¬UMLÀàͼÈçÉÏͼ7Ëùʾ¡£

ͼ7ÖØ¹¹£­½Ó¿Ú״̬Õßģʽ˼ÏëȥʵÏÖÌõ¼þ±í´ïʽµÄ·Ö½â

ÈçÉÏͼ7Ëùʾ£¬ÔÚԭʼµÄÌõ¼þ±í´ïʽÖУ¬ÓÐÁ½¸öÌõ¼þ±í´ïʽ·ÖÖ§£¨·ÖÖ§Âß¼­£©£¬Æä·ÖÖ§Âß¼­·Ö±ð·ÅÔÚÁË×ÓÀàHotelCNPassengerState ºÍ HotelENPassengerStateÖУ¬Í³Ò»ÌáÈ¡Á˽ӿÚÀà PassengerStateÀ࣬ÀïÃæ°üº¬×ÓÀà¶¼ÐèҪʵÏÖµÄÁ½¸ö»ù´¡½Ó¿Ú¡£´Óͼ7£¬¿ÉÒÔ¿´³ö£¬ÊÇʹÓÃÁË״̬Õßģʽ¡£

¾­¹ýÁËÉÏÊöÖØ¹¹Ö®ºó£¬ÎÒÃÇ´ï³ÉÁËʲôЧ¹û£º

Âß¼­ÇåÎú

Ö÷Âß¼­´úÂëÐÐÊý¼õÉÙ

ÒµÎñÂß¼­£¬¸üºÃµÄ·â×°½â꣬ÎÞÐè¹Ø×¢¾ßÌåµÄÒµÎñϸ½Ú

²ÉÓÃÁ˶à̬¡¢³éÏó¡¢×´Ì¬Ä£Ê½¡¢¹¤³§Ä£Ê½¡¢BuildģʽµÄµÈ²»Í¬µÄ˼ÏëºÍ·½·¨£¬ºÜ¶à²»Í¬µÄÖØ¹¹¼¼ÇÉÈ¥ÖØ¹¹Ò»¸ö¹¦ÄÜ£¬ÖµµÃÍÆ¹ãºÍ½èÇ©£»

ÖØ¹¹¼¼ÇÉ-ÒÆ¶¯Æ½Ì¨Androidʵսƪ

Ç°Ãæ±ÊÕß´ÓÀíÂÛºÍʵ¼Ê°¸ÀýµÄ½Ç¶È¶ÔÖØ¹¹½øÐÐÁË·ÖÎö£¬°üÀ¨ÎªÊ²Ã´ÐèÒªÖØ¹¹¡¢Öع¹µÄ×÷Óá¢Öع¹µÄʱ»ú¡¢ÈçºÎ½øÐÐÖØ¹¹µÈÄÚÈÝ£¬ÍƼöÌáǰÔĶÁ¡£

½ÓÏÂÀ´±ÊÕß½«´Óʵ¼ùµÄ½Ç¶ÈÈ¥·ÖÏí£¬¼´ÔÚÆ½Ê±¿ª·¢Android¹¤³ÌÖУ¬ÎÒÃÇÈçºÎ¸ßЧȥ×öÖØ¹¹£¬Öع¹ºÍ¿ª·¢Ôõô±È½ÏºÃµÄÓÐЧ½áºÏÆðÀ´¡£

Long Method ʵս

Long Method ÊDZÊÕßÇ°ÃæÌáµ½µÄ¡°´úÂ뻵ζµÀ¡±Ö®Ò»£¬ÕâÒ²ÊÇ¿ª·¢ÕßÒ»°ã¾­³£ÈÝÒ×·¸µÄµäÐÍ´íÎó¡£

½ÓÏÂÀ´±ÊÕß½éÉÜÔÚAndroidƽ̨ÖÐÈçºÎÈ¥½â¾öÕâ¸ö¡°bad taste¡±£¬Êµ¼ÊÉÏÎÒÃÇ¿ÉÒÔͨ¹ý¼ÆË㺯ÊýµÄȦ¸´ÔÓ¶È£¨cyclomatic complexity£©À´ÅжϺ¯ÊýÊÇ·ñ¹ý³¤,Ò»°ãcyclomatic complexity > 11 ,¾Í¿ÉÒÔÈÏΪº¯Êý¹ý³¤£¬ÐèÒª½øÐÐÖØ¹¹ÓÅ»¯£¬ÄÇô¹ØÓÚº¯ÊýÖØ¹¹µÄÓÅ»¯¼¼ÇÉÔÚÇ°Ãæ¼¸ÕÂÎÒÒ²ÓÐÖØµãÌáµ½¡£

ÔÚ½â¾öȦ¸´ÔӶȹý´óÕâ¸öÎÊÌ⣬Ê×ÏÈÎÒÃÇҪȥ·¢ÏÖÄãµÄ¹¤³ÌÄÄÀï´æÔÚÎÊÌ⣬ÕâÒ»²½ÎÒÃÇ¿ÉÒÔͨ¹ý¹¤¾ß»òÕßµÚÈý·½²å¼þ°ïÎÒÃÇÈ¥½â¾ö£¬±ÈÈç´ò¿ªAndroid studio ¹¤¾ßÀ¸ Analyze ¨C> Run inspection by name,ÈçÏÂͼ8Ëù£º

ͼ8 Analyze¹¤¾ßʾÒâͼ

Èçͼ8Ëùʾ£¬Ñ¡ÔñRun inspection by name ,´ò¿ªÈçÏÂͼ9Ëùʾ½çÃæ£º

ͼ9 Overly long method ½çÃæÊ¾Òâͼ

Èçͼ9Ëùʾ£¬ÊäÈëlong ³öÏÖOverly long method ,Ñ¡ÔñÈçÉÏͼËùʾ£¬µã»÷»á´ò¿ªÒ»¸öеĽçÃæÈçͼ10Ëùʾ£º

ͼ10 Run ¡®Overly long method¡¯

Èçͼ10Ëùʾ£¬¿ÉÒÔÑ¡Ôñ¶Ôµ±Ç°¹¤³Ì£¬µ±Ç°File,µ±Ç°Module »òÕ߯äËûModule½øÐзÖÎö£¬µÈ´ýÔËÐÐÒ»¶Îʱ¼ä·ÖÎö½á¹ûÈçÏÂͼ11Ëùʾ£º

ͼ11 Run ¡®Overly long method¡¯ ½á¹û

µÃµ½Í¼11·ÖÎö½á¹ûÖ®ºó£¬ÎÒÃǾͿÉÒÔÓÐÕë¶ÔÐÔµÄÈ¥½øÐÐÓÅ»¯Öع¹ÁË£¬ÖªµÀÄÄЩÀàÄÄЩº¯ÊýÐèҪȥÓÅ»¯£¬¾ßÌåÖØ¹¹ÓÅ»¯ÊÇÒ»°ã¿ÉÒÔ½«¹ý³¤µÄº¯Êý²ð·Ö³É¼¸¸ö²»Í¬µÄСº¯Êý£¬²ð·ÖÔ­Ôò£ºÒ»¸öº¯ÊýµÄ¹¦ÄÜÒª±£³ÖÖ°Ôðµ¥Ò»£¬²éѯºÍÐÞ¸ÄÖ°Ôð·Ö¿ª£»ËùÒÔ¿ÉÒÔͨ¹ý²»Í¬ÀàÐ͵ŦÄÜÒµÎñÂß¼­´¦Àí»òÕß²éѯ¡¢Ð޸ŦÄÜÈ¥²ð·Ö´óº¯Êý¡£

Too many parameters ʵս

º¯Êý²ÎÊý¹ý¶à£¬Ò²ÊǵäÐ͵ġ°´úÂ뻵ζµÀ¡±Ö®Ò»£¬Í¬Àí´ò¿ªÈçÉÏͼ8ËùʾµÄ½çÃæ£¬È»ºóÊäÈë too many pa ¹Ø¼ü×Ö´ò¿ªÈçÏÂͼ12ËùʾµÄ½çÃæ£º

ͼ12 Analyze too many pa ¹Ø¼ü×Ö½çÃæ

Ñ¡ÔñͼÖÐËùʾµÄ ¡°Method with too many parameters¡±,»á³öÏÖÈçÉÏͼ10ËùʾµÄ½çÃæ£¬È»ºóÑ¡Ôñ¡°Whole Project¡±,ÔËÐÐÖ®ºó£¬·ÖÎöµÃµ½µÄ½á¹ûÈçÏÂͼ13Ëùʾ£º

ͼ13 ¡°Too many parameters¡±½á¹û·ÖÎöͼ

Redundant local variable ʵս

ÈßÓàµÄ¾Ö²¿±äÁ¿£¬Í¬ÑùÊÇÔì³É´úÂ뻵ζµÀµÄÔ´Í·£¬ÊäÈë ¡°Redudant ¹Ø¼ü×Ö¡±£¬Í¬ÀíÖ´Ðеóö·ÖÎö½á¹ûÈçÏÂͼ14Ëùʾ£¬È»ºóÎÒÃǸù¾Ý·ÖÎöºóµÄ½á¹ûÓÐÕë¶ÔÐÔµÄÈ¥ÖØ¹¹ÓÅ»¯£º

ͼ14 ÈßÓà¾Ö²¿±äÁ¿·ÖÎö½á¹û

Unused Declaration ¨CÎÞÓú¯Êýʵս

ÎÞÓú¯ÊýÊÇ¡°´úÂ뻵ζµÀ¡±À´Ô´Ö®Ò»£¬ºÜ¶àº¯ÊýÒòΪÀúÊ·ÒÅÁôµÄÔ­Òò£¬ÐèÇóÒѾ­ÏÂÏßÁ˵«ÊÇ´úÂ뻹ÔÚÒÅÁôÔÚ¹¤³ÌÀïÃæ£¬»òÕßÒòÎªÖØ¹¹£¬ÀúÊ·ÒÅÁô´úÂëûÓÐÍêȫɾ³ý»òÕßÏëÔÝʱÁô×Åϸö°æ±¾Ê¹Óã¬ÕâЩ¶¼ÊDz»ºÃµÄϰ¹ß£¬²»ÓõĴúÂëÓ¦¸ÃÁ¢¼´É¾³ý£¬¶ø²»Ó¦¸Ã±£ÁôÔÚ¹¤³ÌÏîÄ¿ÖС£

ͬÀí´ò¿ªÈçÉÏͼ8ËùʾµÄ½çÃæ£¬È»ºóÊäÈë Unused declaration¹Ø¼ü×Ö´ò¿ªÈçÏÂͼ15ËùʾµÄ½çÃæ£º

ͼ15 Unused declaration

·ÖÎö½á¹ûÄܵóöÄãÕû¸ö¹¤³ÌÖÐûÓб»Ê¹Óõĺ¯Êý£¬ÎÒÃǶ¼¿ÉÒÔɾ³ýµô¡£

ÎÞÓú¯Êý²ÎÊý-ʵս

ͬÀí£¬ÊäÈë¹Ø¼ü×Ö Unused method parameter, ÈçÏÂͼ16Ëùʾ£¬ Ö´ÐпÉÒÔ·ÖÎö³ö¹¤³ÌÖÐÓÐÄÄЩº¯Êý´æÔÚÎÞÓòÎÊý£¬¿ÉÒÔÕë¶ÔÐԵĽøÐÐÓÅ»¯¡£

ͼ16 unused method parameter

infer ʵս

Infer ÊÇFacebook¿ªÔ´µÄ¾²Ì¬´úÂë¼ì²é¹¤¾ß£¬¿É¼ì²é Android ºÍ Java ´úÂëÖÐµÄ NullPointException ºÍ ×ÊԴй¶¡£³ýÁËÒÔÉÏ£¬Infer »¹¿É·¢ÏÖ iOS ºÍ C ´úÂëÖеÄÄÚ´æÐ¹Â¶£¬ÄÚ´æÐ¹Â¶£¬ÄÚ´æÐ¹Â¶¡£

Android studio ÒѾ­½«infer¼¯³Éµ½¹¤¾ßÀ¸ÀïÃæ£¬µã»÷Analyze->infer Nullity,Ö´ÐзÖÎöµÃ³öµÄ½çÃæÀàËÆÈçÏÂͼ17Ëùʾ£º

ͼ17 infer Nullity ·ÖÎö½á¹ûͼ

µã»÷ͼ17ËùʾµÄ·ÖÎö½á¹û¾ßÌåÏ¿ÉÒÔ¶¨Î»µ½¾ßÌåµÄ´úÂëÎļþ£¬È»ºóÎÒÃÇÈ¥ÊÖ¶¯ÅÐ¶Ï »òÕßÖ±½Óµã»÷¡°Infer Nullity Annotations¡±,¹¤¾ßÖ±½Ó°ïÎÒÈ¥Íê³É¸ÄÔì½á¹û¡£

µÚÈý·½²å¼þÓëAndroid studio µÄ¼¯³É

FindBugs ¼¯³É

FindBugsÊÇÒ»¸ö¿ªÔ´µÄ¾²Ì¬´úÂë·ÖÎö¹¤¾ß£¬»ùÓÚLGPL¿ªÔ´Ð­Ò飬ÎÞÐèÔËÐй¤³Ì¾ÍÄܶԴúÂë½øÐзÖÎöµÄ¹¤¾ß¡£Ëü²»×¢ÖØstyle¼°format£¬×¢Öؼì²âÕæÕýµÄbug¼°Ç±ÔÚµÄÐÔÄÜÎÊÌâ £¬ÒÔbytecode£¨*.class¡¢*.jar£©Îª¶ÔÏó½øÐмì²é¡£³ýÁ˵¥¶ÀÔËÐУ¬»¹¿ÉÒÔÓÃ×÷Android-studio ºÍEclipse µÄPlug-in£¬ÒÔ¼°Ç¶ÈëAnt»òÕßMaven×÷ΪtaskÖ®Ò»½øÐÐÔËÐС£

Findbugs×Ô´ø60ÓàÖÖBad practice£¬80ÓàÖÖCorrentness£¬1ÖÖInternationalization£¬12ÖÖMalicious code vulnerability£¬27ÖÖMultithreaded correntness£¬23ÖÖPerformance£¬43ÖÖDodgy¡£Ëü¿ÉÒÔ¼ì²â¼ì²âjava programingÖÐÈÝÒ×ÏÝÈëµÄbug pattern£¬±ÈÈçequals()ʵÏÖʱµÄÒ»°ã¹æÔ¼Î¥·´Null pointerµÄ²ÎÕÕ £¬MethodµÄ·µ»ØÖµµÄcheckÒÅ© £¬³õʼ»¯Ç°fieldµÄ·ÃÎÊ£¬ Multi-threadµÄÕýÈ·ÐÔ£¬ÎÞÌõ¼þµÄwait£¬CodeµÄ´àÈõÐÔ £¬¿ÉÒÔ±ä¸üµÄ¾²Ì¬object £¬ÄÚ²¿ÊýÁвÎÕÕµÄreturnµÈ¡£

Android Studio ¿ÉÒÔͨ¹ý²å¼þµÄ·½Ê½°²×°£¬¾ßÌåÊÇ´ò¿ªAndroid Studio->Preference ¨C>ËÑË÷plugin Ñ¡Ôñ Plugins Tab ,´ò¿ª½çÃæÈçÏÂͼ17Ëùʾ£º

ͼ17 ËÑË÷FindBugs-IDEA½çÃæ

ÈçÉÏͼ17ÖУ¬µã»÷install ,downloading plugin install ,È»ºóÖØÆôAndroid studio ,»áÓÐÌáʾ½çÃæÈçÏÂͼ18Ëùʾ£º

ͼ18 Android FindBugs Enable

µã»÷¡°Enable Android FindBugs¡±,»á´ò¿ª½çÃæ£¬ÔÚ¼ûÃæÖÐÌí¼ÓPlugin For Android FindBugs¼´¿É¡£

È»ºóÔÚAndroid Studio¹¤¾ßÀ¸ÉÏ£¬´ò¿ªÈçÏÂͼ19ËùʾµÄ½çÃæ£º

ͼ19 FindBugs Èë¿Ú½çÃæ

ÈçÉÏͼ19Ëùʾ£¬¿ÉÒÔ·ÖÎö¶ÔǰµÄÎļþ£¬¿ÉÒÔ·ÖÎöÒ»¸öModule files £¬Ò²¿ÉÒÔ·ÖÎöÒ»¸ö¹¤³ÌÎļþ£¬Ñ¡ÔñÒ»Ïî»áµÃ³ö·ÖÎö½á¹ûÈçÏÂͼ20Ëùʾ£º

ͼ20 FindBugs·ÖÎö½á¹ûͼ

¸ù¾Ýͼ20ËùʾµÄ½á¹û£¬ÎÒÃÇ¿ÉÒԲ鿴¾ßÌåµÄBug details ,´æÔÚʲôÎÊÌ⣬Ȼºó¾ßÌå¸ú×Ùµ½¶ÔÓ¦µÄ´úÂ룬¸ù¾Ý¶ÔÓ¦µÄ½¨ÒéÈ¥Ð޸ġ£

MetricsReloaded ¼¯³É

MetricsReloadedÊÇÒ»¸ö¼ÆËã´úÂ븴ÔӶȼ´È¦¸´ÔӶȵÄJetbrain¿ªÔ´¿ª·¢µÄµÚÈý·½²å¼þ¡£¹ØÓÚ´úÂ븴ÔÓ¶È£¬Óиöά¶ÈµÄºâÁ¿£¬ÔÚÕâÀïÐèÒªÆÕ¼°ÏÂÈí¼þ¸´ÔӶȵÄÏà¹ØÖªÊ¶£º»ù±¾¸´ÔÓ¶È£¨Essential Complexity (ev(G))¡¢Ä£¿éÉè¼Æ¸´ÔÓ¶È£¨Module Design Complexity (iv(G))£©¡¢Cyclomatic Complexity (v(G))Ȧ¸´ÔÓ¶È¡£

ev(G)»ù±¾¸´ÔÓ¶ÈÊÇÓÃÀ´ºâÁ¿³ÌÐò·Ç½á¹¹»¯³Ì¶ÈµÄ£¬·Ç½á¹¹³É·Ö½µµÍÁ˳ÌÐòµÄÖÊÁ¿£¬Ôö¼ÓÁË´úÂëµÄά»¤ÄѶȣ¬Ê¹³ÌÐòÄÑÓÚÀí½â¡£Òò´Ë£¬»ù±¾¸´ÔӶȸßÒâζ×ŷǽṹ»¯³Ì¶È¸ß£¬ÄÑÒÔÄ£¿é»¯ºÍά»¤¡£Êµ¼ÊÉÏ£¬Ïû³ýÁËÒ»¸ö´íÎóÓÐʱ»áÒýÆðÆäËûµÄ´íÎó¡£

Iv(G)Ä£¿éÉè¼Æ¸´ÔÓ¶ÈÊÇÓÃÀ´ºâÁ¿Ä£¿éÅж¨½á¹¹£¬¼´Ä£¿éºÍÆäËûÄ£¿éµÄµ÷ÓùØÏµ¡£Èí¼þÄ£¿éÉè¼Æ¸´ÔӶȸßÒâζģ¿éñîºÏ¶È¸ß£¬Õ⽫µ¼ÖÂÄ£¿éÄÑÓÚ¸ôÀ롢ά»¤ºÍ¸´Óá£Ä£¿éÉè¼Æ¸´ÔÓ¶ÈÊÇ´ÓÄ£¿éÁ÷³ÌͼÖÐÒÆÈ¥ÄÇЩ²»°üº¬µ÷ÓÃ×ÓÄ£¿éµÄÅж¨ºÍÑ­»·½á¹¹ºóµÃ³öµÄȦ¸´ÔÓ¶È£¬Òò´ËÄ£¿éÉè¼Æ¸´ÔӶȲ»ÄÜ´óÓÚȦ¸´ÔÓ¶È£¬Í¨³£ÊÇԶСÓÚȦ¸´ÔÓ¶È¡£

v(G)ÊÇÓÃÀ´ºâÁ¿Ò»¸öÄ£¿éÅж¨½á¹¹µÄ¸´Ôӳ̶ȣ¬ÊýÁ¿ÉϱíÏÖΪ¶ÀÁ¢Â·¾¶µÄÌõÊý£¬¼´ºÏÀíµÄÔ¤·À´íÎóËùÐè²âÊÔµÄ×îÉÙ·¾¶ÌõÊý£¬È¦¸´ÔÓ¶È´ó˵Ã÷³ÌÐò´úÂë¿ÉÄÜÖÊÁ¿µÍÇÒÄÑÓÚ²âÊÔºÍά»¤£¬¾­Ñé±íÃ÷£¬³ÌÐòµÄ¿ÉÄÜ´íÎóºÍ¸ßµÄȦ¸´ÔÓ¶ÈÓÐןܴó¹ØÏµ¡£

ͬÀí£¬ÈçÉÏͼ17ËùʾһÑùÈ¥°²×°MetricsReloaded²å¼þ£¬°²×°³É¹¦ºóÖ´ÐÐAnalyze->Calculate Metrics,´ò¿ªÈçÏÂͼ21ËùʾµÄ½çÃæ£º

ͼ21 Calculate Metrics ½çÃæ

ÈçÉÏͼËùʾ£¬Ñ¡ÔñComplexity metrics,Ö´ÐзÖÎö½á¹ûÈçÏÂͼ22Ëùʾ£º

ͼ22 Calculate Metrics ·ÖÎö½á¹ûͼ

ÈçÉÏͼ22Ëùʾ½çÃæÖеĺìÑÕÉ«²¿·Ö£¬´ú±íÐèÒªÈ¥ÖØ¹¹ÓÅ»¯µÄ£¬µã»÷µ±Ç°ÐУ¬»á¶¨Î»µ½Ô´´úÂ룬ȻºóÎÒÃÇÕë¶ÔÐÔÈ¥ÓÅ»¯º¯Êý¡£ÉÏͼÖУ¬¿ÉÒÔ·ÖÎö³ö·½·¨µÄȦ¸´ÔÓ¶È¡¢ÀàµÄȦ¸´ÔÓ¶È¡¢°üµÄȦ¸´ÔÓ¶È¡¢Ä£¿éµÄȦ¸´ÔÓ¶È¡¢¹¤³ÌµÄȦ¸´ÔÓ¶È¡£

Sonar ¼¯³É

¶ÔÓÚAndroid£¨Java£©¹¤³Ì£¬Sonar¹Ù·½ÌṩÁËJava PluginºÍJava-specific Plugins£¬ÕâЩ²å¼þ¿ÉÒÔʵÏִ󲿷ÖFindbugs¡¢PMD¡¢Checkstyle¡¢Android LintµÈµÄ¼ì²é¹æÔò¡£Ö÷Òª¿ÉÒÔ´ÓÒÔϼ¸¸ö·½Ãæ¼ì²â´úÂëÖÊÁ¿£º

£¨1£©¸´ÔÓ¶È£ºÏîÄ¿Öз½·¨¡¢Àà¡¢ÎļþµÄ¸´ÔÓ¶È·Ö²¼Çé¿ö£»

£¨2£©Öظ´£ºÕ¹Ê¾´úÂëÖÐÖØ¸´ÑÏÖØµÄµØ·½£»

£¨3£©µ¥Ôª²âÊÔ¸²¸ÇÂÊ£ºÍ³¼Æ²¢Õ¹Ê¾µ¥Ôª²âÊÔ¸²¸ÇÂÊ£¨Ö÷ÒªÓÃÓÚjava¹¤³Ì£©£»

£¨4£©´úÂë±ê×¼£ºÍ¨¹ýPMD¡¢CheckStyleµÈ´úÂë¹æÔò¼ì²â¹¤¾ß¹æ·¶´úÂë±àд£»

£¨5£©´úÂë×¢ÊÍ£ºÃ»ÓÐ×¢ÊÍ»òÕß¹ý¶àµÄ×¢ÊͶ¼²»ÊÇÒ»¸öÁ¼ºÃµÄ±à³Ìϰ¹ß£»

£¨6£©Ç±ÔÚµÄbug£º ͨ¹ýPMD¡¢FindbugsµÈ´úÂë¼ì²â¹¤¾ß¼ì²â³öDZÔÚµÄbug£»

£¨7£©¼Ü¹¹Éè¼Æ£º¿ÉÒÔ¼ì²âñîºÏ¡¢ÒÀÀµ¹ØÏµ¡¢¼Ü¹¹¹æÔò¡¢¹ÜÀíµÚÈý·½µÄjar°üµÈ¡£

¼¯³ÉSonarÖ®ºó£¬ÎÒÃÇÐèÒª×ÅÖÖ½â¾öµÄ¾ÍÊÇ´úÂëÖØ¸´ÂÊÎÊÌ⣬ÕâÒ²ÊÇ¡°´úÂ뻵ζµÀ¡±×îµäÐ͵ÄÎÊÌ⣬¿ª·¢Õß×îÈÝÒ×·¸Õâ¸öÎÊÌâ£¬ÌØ±ðÊDz»ÉÙ¿ª·¢Õßϲ»¶ÍµÀÁ£¬ÈÝÒ׿½±´À´¿½±´È¥£¬Ôì³É¹¤³Ì´úÂëµÄÖØ¸´ÂʱȽϸߡ£Ò»´Î¹¹½¨ÔËÐÐÖ®ºó£¬ÎÒÃÇ¿ÉÒԵóö·ÖÎö½á¹û£¬ÀàËÆÈçÏÂͼ23Ëùʾ£º

ͼ23 sonar¹¹½¨ÔËÐнá¹û

µã»÷ÖØ¸´ÂÊ£¬ÎÒÃÇ¿ÉÒÔ¿´³öÄÄЩÎļþÖ®¼äµÄ´úÂëÊÇÖØ¸´µÄ£¬È»ºóÕë¶ÔÐÔʹÓóéÈ¡¹¤¾ßÀà¡¢ºÏ²¢Àà¡¢ºÏ²¢·Ö½âº¯ÊýµÈ¼¼ÊõÖØ¹¹ÊÖ¶ÎÈ¥ÓÅ»¯¡£

SonarLint¼¯³É

Ç°ÃæÎÒÃÇËù½²µ½µÄSonar֮ǰµÄÌṩµÄ±¾µØ¹¤¾ßÊÇÐèÒªÒÀÀµSonarQube·þÎñÆ÷µÄ£¬ÕâÑùµ¼ÖÂÆäÔËÐÐËÙ¶È»ºÂý¡£ гöµÄSonarLintµÄɨÃèÒýÇæÖ±½Ó°²×°ÔÚ±¾µØ£¬Ëٶȳ¬¿ì£¬ÊµÊ±Ì½²â´úÂë¼¼ÊõÕ®Îñ£¬¸ø³ÌÐòÔ±×î¿ìËٵķ´À¡£¬Åųý´úÂëÒìζµÄ¾ø¼ÑÀûÆ÷£¬°ïÖú³ÌÐòÔ±»ñµÃClean code¡£ аæSonarLintÒ²ÄÜÁ´½ÓSonarQube·þÎñÆ÷£¬µ«Õâ²¢²»±ØÒª¡£±¾µØ°²×°SonarLintÀ´×ö´úÂë±¾µØÉ¨Ã裬±¾µØ·¢ÏÖ±¾µØÐ޸쬶øÇÒÄÜ¿ìËÙ¿´µ½Ð޸Ľá¹û£¬¿ìËÙ´¦Àí´úÂë³ô棬ÓÐЧ¿ØÖƼ¼ÊõÕ®Îñ¡£

°´ÕÕÈçÉÏͼ17ËùʾһÑùÈ¥°²×°SonarLint²å¼þ£¬°²×°Ö®ºóÖØÆôAndroid Studio ,¼´¿É¶¯Ì¬É¨Ãè³ö½á¹ûÈçÏÂͼ24Ëùʾ£º

ͼ24 SonarLintɨÃè½á¹ûͼ

ÖØ¹¹¼¼ÇÉʵս-С½á

±¾ÎÄÎÒÃǽ²ÊöÁËÔÚAndroid³ÌÐò¿ª·¢¹ý³ÌÖÐÈçºÎ½áºÏ¹¤¾ßÈ¥°ïÖúÎÒÃÇ×öÖØ¹¹ÓÅ»¯µÄ¸÷ÖÖ¼¼ÄܰüÀ¨Android Studio×Ô¼ºÒѾ­¼¯³ÉµÄ²å¼þCode Inspection ¡¢infer NullityÒÔ¼°FindBugs¡¢MetricsReloaded¡¢Sonar¡¢SonarLintµÈµÚÈý·½²å¼þ¹¤¾ß£¬Æäʵ»¹ÓкܶàÀàËÆÖøÃûµÄ²å¼þ±ÈÈçQAPlugin¡¢PMD¡¢Hammurapi ¡¢Lint4jµÈ¹¤¾ß£¬´ó¼Ò¿ÉÒÔ×ÔÐг¢ÊÔʹÓã¬ÔÚÕâÀïÎÒ²»Ò»Ò»ËµÃ÷¡£

Ëùν¹¤ÓûÉÆÆäʱØÏÈÀû¾ÍÊÇÕâ¸öµÀÀí£¬ÎÒÃÇÈç¹ûÐèҪȥ×öÖØ¹¹ÓÅ»¯£¬Ê×ÏÈÎÒÃÇÒªÖªµÀÎÒÃÇ×öµÄ²»ºÃµÄµØ·½-´úÂëµÄ»µÎ¶µÀÔÚÄÄÀÕâÖÖ¹¤×÷Èç¹û¿¿ÈËΪÊÖ¶¯µÄÈ¥·¢ÏÖ£¬ÄÇôЧÂʺͲú³ö½«»á¼°ÆäµÍÏ£¬ËùÒÔÎÒÃÇÐèÒª½èÖúÓÚ¼¯³É²å¼þ¹¤¾ß°ïÎÒÃÇ×Ô¶¯È¥É¨Ãè·¢ÏÖÎÊÌ⣬ȻºóÔÙÈ¥Õë¶ÔÐÔµÄÖØ¹¹ÓÅ»¯£¬²ú³öClean code ¡£

дÔÚ×îºó

ÖØ¹¹ÊÇÒ»ÃűȽϴó¶øÉîµÄ»°ÌâºÍ¿ÎÌ⣬±ÊÕßÕâ´ÎÖ÷Ҫ̽ÌÖÁËÈçºÎͨ¹ýÓÐЧµÄÖØ¹¹¼¼ÇÉȥд³ÉÓÅÐãµÄÕû½à´úÂ룬´úÂëÕû½àÖ®µÀ¾ÍÊÇÒª½«Öع¹Ê¼ÖչᴩÔÚÕû¸ö¿ª·¢¹ý³ÌÖУ¬²»¶ÏµÄ³ÖÐøµÄ½¥½øÖع¹£¬´Ó¶ø½«ÒÔǰµÄ¼¼Êõծȫ²¿»¹Íê¡£

ÖØ¹¹ÊǸö¼¼Êõ»î£¬ÐèÒªºÜ×ÊÉîµÄÈËʿȥÕûÌå¼Ü¹¹°Ñ¿Ø¼¼Êõ·½°¸ºÍ²úÆ·ÖÊÁ¿£¬²ÅÄÜÊ¹ÖØ¹¹×öµÄ¸ü¼ÓÓÐЧ²¢ÇÒ²»»áÒýÈëеÄÎÊÌ⣬µ«ÊÇÎÞÂÛÎÒÃÇ×îÖÕ²ÉȡʲôÊÖ¶ÎÈ¥ÖØ¹¹£¬×îÖÕÎÒÃǶ¼ÐèÒª¾¡Á¿·ûºÏSolidÉè¼ÆÏà¹ØÔ­Ôò£º

ÀàµÄµ¥Ò»Ö°Ôð£ºÌåÏÖÁËÀàÖ»Ó¦¸Ã×öÒ»¼þÊ£¬Á¼ºÃµÄÈí¼þÉè¼ÆÖÐϵͳÊÇÓÉÒ»×é´óÁ¿µÄ¶ÌСµÄÀà×é³É£¬ÒÔ¼°ÐèÒªËûÃÇÖ®¼ä¹¦ÄÜЭ×÷Íê³É£¬¶ø²»ÊǼ¸¸öÉϵÛÀà¡£Èç¹ûÀàµÄÖ°Ô𳬹ýÒ»¸ö£¬ÕâЩְÔðÖ®¼ä¾Í»á²úÉúñîºÏ¡£¸Ä±äÒ»¸öÖ°Ô𣬿ÉÄÜ»áÓ°ÏìºÍ·Á°­ÀàΪÆäËûÈË·þÎñµÄ¹¦ÄÜ¡£ÕâÖÖÀàÐ͵ÄñîºÏ½«»áµ¼Ö´àÈõµÄÉè¼Æ£¬ÔÚÐ޸ĵÄʱºò¿ÉÄÜ»áÒýÈë²»ÉÙδ֪µÄÎÊÌâ¡£

¿ª±ÕÔ­Ôò£ºÆä¶¨ÒåÊÇ˵һ¸öÈí¼þʵÌåÈçÀ࣬ģ¿éºÍº¯ÊýÓ¦¸Ã¶ÔÀ©Õ¹¿ª·Å£¬¶ø¶ÔÐ޸Ĺرգ¬¾ßÌåÀ´Ëµ¾ÍÊÇÄãÓ¦¸Ãͨ¹ýÀ©Õ¹À´ÊµÏֱ仯£¬¶ø²»ÊÇͨ¹ýÐÞ¸ÄÔ­ÓеĴúÂëÀ´ÊµÏֱ仯£¬¸ÃÔ­ÔòÊÇÃæÏà¶ÔÏóÉè¼Æ×î»ù±¾µÄÔ­Ôò¡£ÆäÖ¸µ¼Ë¼Ïë¾ÍÊÇ£¨1£©³éÏó³öÏà¶ÔÎȶ¨µÄ½Ó¿Ú£¬Õⲿ·ÖÓ¦¸Ã²»¶¯»òÕߺÜÉٸ͝£»£¨2£©·â×°±ä»¯£»²»¹ýÔÚÈí¼þ¿ª·¢¹ý³ÌÖУ¬ÒªÒ»¿ªÊ¼¾ÍÍêÈ«°´ÕÕ¿ª±ÕÔ­ÔòÀ´¿ÉÄܱȽÏÀ§ÄÑ£¬¸ü¶àµÄÇé¿öÊÇÔÚ²»¶ÏµÄµü´úÖØ¹¹¹ý³ÌÖÐÈ¥¸Ä½ø£¬ÔÚ¿ÉÔ¤¼ûµÄ±ä»¯·¶Î§ÄÚÈ¥×öÉè¼Æ¡£

ÀïÊÏÌæ»»Ô­Ôò£º×ÓÀà¿ÉÒÔÀ©Õ¹¸¸ÀàµÄ¹¦ÄÜ£¬µ«²»Äܸı丸ÀàÔ­ÓеŦÄÜ¡£¼òµ¥À´Ëµ£¬ËùÓÐʹÓûùÀà´úÂëµÄµØ·½£¬Èç¹û»»³É×ÓÀà¶ÔÏóµÄʱºò»¹Äܹ»Õý³£ÔËÐУ¬ÔòÂú×ãÕâ¸öÔ­Ôò£¬·ñÔò¾ÍÊǼ̳йØÏµÓÐÎÊÌ⣬Ӧ¸Ã·Ï³ýÁ½Õߵļ̳йØÏµ£¬Õâ¸öÔ­Ôò¿ÉÒÔÓÃÀ´ÅжÏÎÒÃǵĶÔÏó¼Ì³Ð¹ØÏµÊÇ·ñºÏÀí¡£Í¨³£ÔÚÉè¼ÆµÄʱºò£¬ÎÒÃǶ¼»áÓÅÏȲÉÓÃ×éºÏ¶ø²»ÊǼ̳У¬ÒòΪ¼Ì³ÐËäÈ»¼õÉÙÁË´úÂ룬Ìá¸ßÁË´úÂëµÄÖØÓÃÐÔ£¬µ«ÊǸ¸Àà¸ú×ÓÀà»áÓкÜÇ¿µÄñîºÏÐÔ£¬ÆÆ»µÁË·â×°¡£

½Ó¿Ú¸ôÀëÔ­Ôò£º²»ÄÜÇ¿ÆÈÓû§È¥ÒÀÀµÄÇЩËûÃDz»Ê¹ÓõĽӿڡ£¼òµ¥À´Ëµ¾ÍÊǿͻ§¶ËÐèҪʲô½Ó¿Ú£¬¾ÍÌṩ¸øËüʲôÑùµÄ½Ó¿Ú£¬ÆäËü¶àÓàµÄ½Ó¿Ú¾Í²»ÒªÌṩ£¬²»ÒªÈýӿڱäµÃÓ·Ö×£¬·ñÔòµ±¶ÔÏóÒ»¸öûÓÐʹÓõķ½·¨±»¸Ä±äÁË£¬Õâ¸ö¶ÔÏóÒ²½«»áÊܵ½Ó°Ïì¡£½Ó¿ÚµÄÉè¼ÆÓ¦¸Ã×ñÑ­×îС½Ó¿ÚÔ­Ôò£¬ÆäʵÕâÒ²ÊǸßÄÚ¾ÛµÄÒ»ÖÖ±íÏÖ£¬»»¾ä»°Ëµ£¬Ê¹Óöà¸ö¹¦Äܵ¥Ò»¡¢¸ßÄھ۵ĽӿÚ×ܱÈʹÓÃÒ»¸öÅÓ´óµÄ½Ó¿ÚÒªºÃ¡£

ÒÀÀµµ¹Öã¨DIP£©£º¸ß²ãÄ£¿é²»Ó¦¸ÃÒÀÀµµÍ²ãÄ£¿é£¬Á½Õß¶¼Ó¦¸ÃÒÀÀµÆä³éÏó£»³éÏó²»Ó¦¸ÃÒÀÀµÏ¸½Ú£»Ï¸½ÚÓ¦¸ÃÒÀÀµ³éÏ󡣯äʵÕâ¾ÍÊÇÎÒÃǾ­³£ËµµÄ¡°Õë¶Ô½Ó¿Ú±à³Ì¡±£¬ÕâÀïµÄ½Ó¿Ú¾ÍÊdzéÏó£¬ÎÒÃÇÓ¦¸ÃÒÀÀµ½Ó¿Ú£¬¶ø²»ÊÇÒÀÀµ¾ßÌåµÄʵÏÖÀ´±à³Ì¡£DIPÃèÊö×é¼þÖ®¼ä¸ß²ã×é¼þ²»Ó¦¸ÃÒÀÀµÓڵײã×é¼þ¡£ÒÀÀµµ¹ÖÃÊÇָʵÏֺͽӿڵ¹Ö㬲ÉÓÃ×Ô¶¥Ïòϵķ½Ê½¹Ø×¢ËùÐèµÄµ×²ã×é¼þ½Ó¿Ú£¬¶ø²»ÊÇÆäʵÏÖ¡£DIģʽºÜºÃÀý×ӵľÍÊÇÓ¦ÓÃIOC£¨¿ØÖÆ·´×ª£©¿ò¼Ü£¬¹¹Ô췽ʽ·ÖΪ·Ö¹¹Ôì×¢È룬º¯Êý×¢È룬ÊôÐÔ×¢Èë ¡£

µ±ÎÒÃÇÔÚ×öÖØ¹¹ÓÅ»¯µÄʱºòÓ¦¸Ã³ä·Ö¿¼ÂÇÉÏÃæÕ⼸¸öÔ­Ôò£¬Ò»¿ªÊ¼¿ÉÄÜÉè¼Æ²¢²»ÍêÃÀ£¬²»¹ý¿ÉÒÔÔÚÖØ¹¹µÄ¹ý³ÌÖв»¶ÏÍêÉÆ¡£µ«ÆäʵºÜ¶àÈ˶¼Ìø¹ýÁËÉè¼ÆÕâ¸ö»·½Ú£¬Äõ½Ò»¸öÄ£¿éÖ±½Ó¶¯ÊÖ±àд´úÂ룬¸ü²»ÓÃ˵ȥ˼¿¼Éè¼ÆÁË£¬ÏîÄ¿ÖÐÒ²ÓкܶàÕâÑùµÄÀý×Ó¡£µ±È»¶ÔÓÚ¼òµ¥µÄÄ£¿é»òÐí²»ÓÃʲôÉè¼Æ£¬²»¹ý¼ÙÈçÄ£¿éÏà¶Ô¸´Ôӵϰ£¬Äܹ»ÔÚ¶¯ÊÖд´úÂë֮ǰºÃºÃÉè¼ÆË¼¿¼Ò»Ï£¬Ñø³ÉÕâ¸öϰ¹ß£¬¿Ï¶¨»á¶Ô±àд³ö¿É¶ÁÐÔ¡¢Îȶ¨ÐÔ¡¢½¡×³ÐÔ¡¢Áé»îÐÔ¡¢¿É·þÓÃÐÔ¡¢¿ÉÀ©Õ¹ÐԽϸߵĴúÂëÓаïÖú¡£

 

   
3221 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì