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