LinuxÒÁµéÔ°ÂÛ̳'s Archiver

thanksgod ·¢±íÓÚ 2006-1-7 13:45

д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]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.