дJava³ÌÐò×îÈÝÒ×·¸µÄ21ÖÖ´íÎóÀýÎö
[font=Arial][url="http://java.chinaitlab.com/base/39097.html"]http://java.chinaitlab.com/base/39097.html[/url][/font]1.Duplicated Code
¡¡¡¡´úÂëÖØ¸´¼¸ºõÊÇ×î³£¼ûµÄÒìζÁË¡£ËûÒ²ÊÇRefactoringµÄÖ÷ҪĿ±êÖ®Ò»¡£´úÂëÖØ¸´ÍùÍùÀ´×ÔÓÚcopy-and-pasteµÄ±à³Ì·ç¸ñ¡£ÓëËûÏà¶ÔÓ¦OAOOÊÇÒ»¸öºÃϵͳµÄÖØÒª±êÖ¾¡£
¡¡¡¡2.Long method
¡¡¡¡ËüÊÇ´«Í³½á¹¹»¯µÄ¡°ÒŶ¾¡±¡£Ò»¸ö·½·¨Ó¦µ±¾ßÓÐ×ÔÎÒ¶ÀÁ¢µÄÒâͼ£¬²»Òª°Ñ¼¸¸öÒâͼ·ÅÔÚÒ»Æð¡£
¡¡¡¡3.Large Class
¡¡¡¡´óÀà¾ÍÊÇÄã°ÑÌ«¶àµÄÔðÈν»¸øÁËÒ»¸öÀà¡£ÕâÀïµÄ¹æÔòÊÇOne Class One Responsibility.
¡¡¡¡4.Divergent Change
¡¡¡¡Ò»¸öÀàÀïÃæµÄÄÚÈݱ仯Âʲ»Í¬¡£Ä³Ð©×´Ì¬Ò»¸öСʱ±äÒ»´Î£¬Ä³Ð©Ôò¼¸¸öÔÂÒ»Äê²Å±äÒ»´Î£»Ä³Ð©×´Ì¬ÒòΪÕâ·½ÃæµÄÔÒò·¢Éú±ä»¯£¬¶øÁíһЩÔòÒòΪÆäËû·½ÃæµÄÔÒò±äÒ»´Î¡£ÃæÏò¶ÔÏóµÄ³éÏó¾ÍÊǰÑÏà¶Ô²»±äµÄºÍÏà¶Ô±ä»¯Ïà¸ôÀë¡£°ÑÎÊÌâ±ä»¯µÄÒ»·½ÃæºÍÁíÒ»·½ÃæÏà¸ôÀë¡£ÕâʹµÃÕâЩÏà¶Ô²»±äµÄ¿ÉÒÔÖØÓá£ÎÊÌâ±ä»¯µÄÿ¸ö·½Ãæ¶¼¿ÉÒÔµ¥¶ÀÖØÓá£ÕâÖÖÏàÒì±ä»¯µÄ¹²´æÊ¹µÃÖØÓ÷dz£À§ÄÑ¡£
¡¡¡¡5.Shotgun Surgery
¡¡¡¡ÕâÕýºÃºÍÉÏÃæÏà·´¡£¶Ôϵͳһ¸öµØ·½µÄ¸Ä±äÉæ¼°µ½ÆäËûÐí¶àµØ·½µÄÏà¹Ø¸Ä±ä¡£ÕâЩ±ä»¯Âʺͱ仯ÄÚÈÝÏàËÆµÄ״̬ºÍÐÐΪͨ³£Ó¦µ±·ÅÔÚͬһ¸öÀàÖС£
¡¡¡¡6.Feature Envy
¡¡¡¡¶ÔÏóµÄÄ¿µÄ¾ÍÊÇ·âװ״̬ÒÔ¼°ÓëÕâЩ״̬½ôÃÜÏà¹ØµÄÐÐΪ¡£Èç¹ûÒ»¸öÀàµÄ·½·¨Æµ·±ÓÃget ·½·¨´æÈ¡ÆäËûÀàµÄ״̬½øÐмÆË㣬ÄÇôÄãÒª¿¼ÂǰÑÐÐÎªÒÆµ½É漰״̬ÊýÄ¿×î¶àµÄÄǸöÀà¡£
¡¡¡¡7.Data Clumps
¡¡¡¡Ä³Ð©Êý¾Ýͨ³£Ïñº¢×ÓÒ»Ñù³ÉÈºÍæË££ºÒ»Æð³öÏÖÔںܶàÀàµÄ³ÉÔ±±äÁ¿ÖУ¬Ò»Æð³öÏÖÔÚÐí¶à·½·¨µÄ²ÎÊýÖУ¬ÕâЩÊý¾Ý»òÐíÓ¦¸Ã×Ô¼º¶ÀÁ¢ÐγɶÔÏó¡£
¡¡¡¡8.Primitive Obsession
¡¡¡¡ÃæÏò¶ÔÏóµÄÐÂÊÖͨ³£Ï°¹ßʹÓü¸¸öÔʼÀàÐ͵ÄÊý¾ÝÀ´±íʾһ¸ö¸ÅÄƩÈç¶ÔÓÚ·¶Î§£¬ËûÃÇ»áʹÓÃÁ½¸öÊý×Ö¡£¶ÔÓÚMoney£¬ËûÃÇ»áÓÃÒ»¸ö¸¡µãÊýÀ´±íʾ¡£ÒòΪÄãûÓÐʹÓöÔÏóÀ´±í´ïÎÊÌâÖдæÔڵĸÅÄÕâʹµÃ´úÂë±äµÄÄÑÒÔÀí½â£¬½â¾öÎÊÌâµÄÄѶȴó´óÔö¼Ó¡£ºÃµÄϰ¹ßÊÇÀ©³äÓïÑÔËùÄÜÌṩÔʼÀàÐÍ£¬ÓÃС¶ÔÏóÀ´±íʾ·¶Î§¡¢½ð¶î¡¢×ª»¯ÂÊ¡¢ÓÊÕþ±àÂëµÈµÈ¡£
¡¡¡¡9.Switch Statement
¡¡¡¡»ùÓÚ³£Á¿µÄ¿ª¹ØÓï¾äÊÇOO µÄ´óµÐ£¬ÄãÓ¦µ±°ÑËû±äΪ×ÓÀà¡¢state»òstrategy.
¡¡¡¡10. Parallel Inheritance Hierarchies
¡¡¡¡²¢Ðеļ̳вã´ÎÊÇshotgun surgeryµÄÌØÊâÇé¿ö¡£ÒòΪµ±Äã¸Ä±äÒ»¸ö²ã´ÎÖеÄijһ¸öÀàʱ£¬Äã±ØÐëͬʱ¸Ä±äÁíÍâÒ»¸ö²ã´ÎµÄ²¢ÐÐ×ÓÀà¡£
¡¡¡¡11. Lazy Class
¡¡¡¡Ò»¸ö¸É»î²»¶àµÄÀà¡£ÀàµÄά»¤ÐèÒª¶îÍâµÄ¿ªÏú£¬Èç¹ûÒ»¸öÀà³Ðµ£ÁËÌ«ÉÙµÄÔðÈΣ¬Ó¦µ±Ïû³ýËü¡£
¡¡¡¡12. Speculative Generality
¡¡¡¡Ò»¸öÀàʵÏÖÁË´ÓδÓõ½µÄ¹¦ÄܺÍͨÓÃÐÔ¡£Í¨³£ÕâÑùµÄÀà»ò·½·¨Î¨Ò»µÄÓû§ÊÇtestcase.²»ÒªÓÌÔ¥£¬É¾³ýËü¡£
¡¡¡¡13. Temporary Field
¡¡¡¡Ò»¸ö¶ÔÏóµÄÊôÐÔ¿ÉÄÜÖ»ÔÚijЩÇé¿öϲÅÓÐÒâÒå¡£ÕâÑùµÄ´úÂ뽫ÄÑÒÔÀí½â¡£×¨ÃލÁ¢Ò»¸ö¶ÔÏóÀ´³ÖÓÐÕâÑùµÄ¹Â¶ùÊôÐÔ£¬°ÑÖ»ºÍËûÏà¹ØµÄÐÐÎªÒÆµ½¸ÃÀà¡£×î³£¼ûµÄÊÇÒ»¸öÌØ¶¨µÄËã·¨ÐèҪijЩֻÓиÃËã·¨²ÅÓÐÓõıäÁ¿¡£
¡¡¡¡14. Message Chain
¡¡¡¡ÏûÏ¢Á´·¢ÉúÓÚµ±Ò»¸ö¿Í»§ÏòÒ»¸ö¶ÔÏóÒªÇóÁíÒ»¸ö¶ÔÏó£¬È»ºó¿Í»§ÓÖÏòÕâÁíÒ»¶ÔÏóÒªÇóÁíÒ»¸ö¶ÔÏó£¬ÔÙÏòÕâÁíÒ»¸ö¶ÔÏóÒªÇóÁíÒ»¸ö¶ÔÏó£¬Èç´ËÈç´Ë¡£Õâʱ£¬ÄãÐèÒªÒþ²Ø·ÖÅÉ¡£
¡¡¡¡15. Middle Man
¡¡¡¡¶ÔÏóµÄ»ù±¾ÌØÐÔÖ®Ò»¾ÍÊÇ·â×°£¬¶øÄã¾³£»áͨ¹ý·ÖÅÉȥʵÏÖ·â×°¡£µ«ÊÇÕâÒ»²½²»ÄÜ×ßµÃ̫Զ£¬Èç¹ûÄã·¢ÏÖÒ»¸öÀà½Ó¿ÚµÄÒ»´ó°ë·½·¨¶¼ÔÚ×ö·ÖÅÉ£¬Äã¿ÉÄÜÐèÒªÒÆÈ¥Õâ¸öÖмäÈË¡£
¡¡¡¡16. Inappropriate Intimacy
¡¡¡¡Ä³Ð©ÀàÏ໥֮¼äÌ«Ç×ÃÜ£¬ËüÃÇ»¨·ÑÁËÌ«¶àµÄʱ¼äȥשÑбðÈ˵Ä˽Óв¿·Ö¡£¶ÔÈËÀà¶øÑÔ£¬ÎÒÃÇÒ²Ðí²»Ó¦¸ÃÌ«¼ÙÕý¾£¬µ«ÎÒÃÇÓ¦µ±ÈÃ×Ô¼ºµÄÀàÑϸñ×ñÊØ½ûÓûÖ÷Òå¡£
¡¡¡¡17. Alternative Classes with Different Interfaces
¡¡¡¡×öÏàͬÊÂÇéµÄ·½·¨Óв»Í¬µÄº¯Êýsignature£¬Ò»Ö°ÑËüÃÇÍùÀà²ã´ÎÉÏÒÆ£¬Ö±ÖÁÐÒéÒ»Ö¡£
¡¡¡¡18. Incomplete Library Class
¡¡¡¡Òª½¨Á¢Ò»¸öºÃµÄÀà¿â·Ç³£À§ÄÑ¡£ÎÒÃÇ´óÁ¿µÄ³ÌÐò¹¤×÷¶¼»ùÓÚÀà¿âʵÏÖ¡£È»¶ø£¬Èç´Ë¹ã·º¶øÓÖÏàÒìµÄÄ¿±ê¶Ô¿â¹¹½¨ÕßÌá³öÁË¿Á¿ÌµÄÒªÇ󡣿⹹½¨ÕßÒ²²»ÊÇÍòÄܵġ£ÓÐʱºòÎÒÃǻᷢÏÖ¿âÀàÎÞ·¨ÊµÏÖÎÒÃÇÐèÒªµÄ¹¦ÄÜ¡£¶øÖ±½Ó¶Ô¿âÀàµÄÐÞ¸ÄÓзdz£À§ÄÑ¡£Õâʱºò¾ÍÐèÒªÓø÷ÖÖÊֶνøÐÐRefactoring.
¡¡¡¡19. Data Class
¡¡¡¡¶ÔÏó°üÀ¨×´Ì¬ºÍÐÐΪ¡£Èç¹ûÒ»¸öÀàÖ»ÓÐ״̬ûÓÐÐÐΪ£¬ÄÇô¿Ï¶¨ÓÐʲôµØ·½³öÎÊÌâÁË¡£
¡¡¡¡20. Refused Bequest
¡¡¡¡³¬Àà´«ÏÂÀ´ºÜ¶àÐÐΪºÍ״̬£¬¶ø×ÓÀàÖ»ÊÇÓÃÁËÆäÖеĺÜСһ²¿·Ö¡£Õâͨ³£Òâζ×ÅÄãµÄÀà²ã´ÎÓÐÎÊÌâ¡£
¡¡¡¡21. Comments
¡¡¡¡¾³£¾õµÃҪдºÜ¶à×¢ÊͱíʾÄãµÄ´úÂëÄÑÒÔÀí½â¡£Èç¹ûÕâÖָоõÌ«¶à£¬±íʾÄãÐèÒªRefactoring.
Ò³:
[1]