§@ªÌ¡GªLÄ£¬Ã
2004¦~ 1 ¤ë
¥Rº¡·ÀIªº³nÅé¶}µo±M®×
¦Û±q¹q¸£µo©ú«á¡A¼Æ¦Ê¸Uªºµ{¦¡³]p®v±N¨t²Î»Ý¨DÂàͦ¨¹q¸£¬Ý±oÀ´ªº«ü¥O¡A¤£ª¾²£¥X¤F¦h¤Ö»õ¦æªºµ{¦¡¡A¦³¤@¨Çµ{¦¡¤w¸g¦b¾÷¾¹¸Ì±°õ¦æ¦h¦~¡A³Ð³y¤F³\¦h°Ó·~»ùÈ¡A¤]¦³¤@¨Çµ{¦¡¦]¬°¥¢»~¦Ó¾ÉP«¤j·l¥¢¡A¦ý¬Û·í¤j¤ñ²v (70%) ªºµ{¦¡«h¦]¬°°¾Â÷»Ý¨D¡B©ÎµLªk¸Ñ¨M°ÝÃD¦Ó«Å§i¥¢±Ñ¡C®Ú¾Ú The Standish Group ¹ï³nÅé±M®×¶i¦æ¤j³W¼Òªº½Õ¬d¡A2000 ¦~ªº³ø§iÅã¥Ü³nÅé±M®×ªº¦¨¥\²v¤£¨ì 30%¡A©Ò¥H§ÚÌ»Ýn¦³§ó¦nªº¤èªk¨Ó¶i¦æ³nÅé¶}µoªº¤u§@¡C
¤°»ò¬O AntiPatterns
¬°¤F´£°ª³nÅé±M®×¦¨¥\ªº¤ñ²v¡A±M®a¾ÇªÌ´£¥X³\¦h¥ý¶iªº³nÅé¶}µo§Þ³N¡A¨Ò¦p Iterative development process¡Bª«¥ó¾É¦V§Þ³N¡B³]p¼Ò¦¡ (design patterns)¡B³nÅ餸¥ó¡B¥¥x»P®Ø¬[ (Platform & Framework)¡A³o¨Ç¥¿¦V¥B¨ã¦³«Ø³]©Êªº§Þ³N¨ó§U§ÚÌ¥¿½T¦a«Øºc¸ê°T¨t²Î¡C¥»¤ån¤¶²Ðªº¤º®eÄÝ©ó°f¦V«ä¦Òªº§Þ³N¡AºÙ¬° AntiPatterns¡A¥¦Ì¬O±q³\¦h¥¢±Ñªº³nÅé±M®×¤¤Âk¯Ç¥X¨Óªº¿ù»~¼Ò¦¡¡A©Ò¥H³nÅ餤¥]§t¶V¦h AntiPatterns¡A¥¢±Ñ¾÷²v¶V°ª¡CAntiPatterns ¼sªx¥X²{¦bªº¨t²Î¤W¡A¦ý¤´¦³³\¦h³nÅé¤Hû¦b¶}µo·s¨t²Î®É«ÁÐÂÐÂá¡A¦Ó¥B¥Ø«e¦³¤@¥b¥H¤Wªº MIS ¸ê°T¤Hû»ÝnºûÅ@©Î©µ®i¦Ñªº¨t²Î¡A©Ò¥H¼ô±x AntiPatterns ¤£¦ý¦³§U©ó§ïµ½Â¨t²ÎªººûÅ@¤u§@¡A¦Ó¥B¥i¥H°§C¶}µo·s¨t²Îªº¥¢±Ñ·ÀI¡C
AntiPattern ªº´yz»P¤ÀÃþ
´yz AntiPattern ¦³Â²©ú¤Î§¹¾ã¤GºØ§Î¦¡¡A²©ú§Î¦¡ (Mini-Form) ¥]§t¦WºÙ (name)¡B°ÝÃD´yz (Problem)¡B¸Ñ¨M°ÝÃDªº¤è®× (Refactored Solution)¡A¦³®ÉԨϥΤ@´Tº©µe©Î¤@«h½ì»D¨Ó¬ðÅã°ÝÃDªº¥»½è¡C§¹¾ã§Î¦¡ (Full-Template) «h¥]§t¦WºÙ»P§O¦W¡A°ÝÃDªº´yz¡AÂÇ¥H¿ëÃѰÝÃDªº¯gª¬¡A¤£¨}ªº«áªG¡A°ÝÃDªº®Ú¥»ì¦]¡A¤Î¸Ñ¨M°ÝÃDªº¤è®×¡CAntiPatterns «ö·Ó³nÅé¶}µoªº¤j²¤¤À¤u³W«h¤À¬°¤T¤jºØÃþ¡GDevelopment (µ{¦¡³]p)¡BArchitecture (¬[ºc) »P Management (ºÞ²z)¡A¤À§O¤¶²Ð¦p¤U¡C
µ{¦¡³]pªº AntiPatterns
Development AntiPatterns ¥Dn¬O´yz¤£¨}µ{¦¡³]p¡A¨Ò¦pªì¾Çª«¥ó¾É¦V§Þ³Nªºµ{¦¡³]p®v±`¥Ç The Blob AntiPattern¡AThe Blob ªº§O¦W¬O God Class¡A¨ä¯gª¬¬Oµ{¦¡¤¤¥]§t¤@Ó«D±`½ÆÂøªºÃþ§O (class) t³d°õ¦æ¥þ³¡ªº¥\¯à¡A¦Ó¨ä¥LªºÃþ§O«h¥u¦³¸ê®Æ©Î§t¦³¤Ö¶qªº¥\¯à¡A¾ÉP³oºØ AntiPattern ªº®Ú¥»ì¦]¬Oµ{¦¡³]p®v¤´¨Ï¥Î Procedural ¤è¦¡³]pµ{¦¡¡A¸Ñ¨M³o°ÝÃDªº¤èªk¬O±NÀ³¥Îµ{¦¡ªº¥\¯à§¡¿Å¤À°t¨ì¾A·íªºÃþ§O¡C¨ä¥L±`¨£ªº AntiPatterns ¨Ò¦p Spaghetti code¡Gªí¥Ü¤@¹Î²V¶Ãªºµ{¦¡½X¡A³q±`³sì¨Ó¼¶¼gªº¤H³£·d¤£²M·¡¨ä¤¤ªºÅÞ¿è¡A§ó¤£¥Î»¡±µ¤âºûÅ@ªº¤H¡CLava Flow (¤õ¤s©¥¼ß¬y)¡Gªí¥Üµ{¦¡ªº¥\¯à§ïÅܩΫùÄòºt¤Æ«á¡A¯d¤U³\¦h¤w¸g¤£¦A¨Ï¥Î©ÎµL¤HÃö¤ßªºµ{¦¡½X¡A¦ý¤S¨S¦³¤H·d²M·¡§R°£³o¨Ç code ·|¤£·|¦³·N¥~¼vÅT¡CInput Kludge¡Gµ{¦¡¤¤¥]§t¤C«÷¤K´êªº¿é¤JÅçÃÒ¥\¯à¡A³q±`¬O¦]¬°¿é¤JÄæ¦ì¤¹³\¨Ï¥Î Free format¡A¾ÉPÃø¥H³B²z¿é¤Jªº¸ê®Æ¡C
¬[ºcªº AntiPatterns
Architecture AntiPattern ±`¨£ªº¨Ò¤l¬O Architecture by Implication (¨S¦³©ú½Tªº¬[ºc)¡A©Ò¥H¨CÓ¤H®Ú¾Ú¦Û¤v»{¬°ªº¬[ºc Coding¡A³oºØª¬ªpªº®Ú¥»ì¦]¬O¨S¦³¤Ht³d¬[ºc³]p¡A¨ä¸Ñ¨M¤èªk¬O¦³¤Ht³d§â¨t²Î¤Á³Î¬°¼ÆÓ¥Dnªº³nÅ餸¥ó¡A©w¸q¨CÓ¤¸¥óªº¤¶±¤Î¤¸¥ó¶¡ªº·¾³q¼Ð·Ç¡C¨ä¥L±`¨£ªº AntiPatterns ¨Ò¦p Jumble (Âø¶Ã)¡G³nÅ餸¥ó¤¬¬Û©I¥s¡A¨ä¶¡ªºÃö«YªÈÄñ²V¶Ã¡A¸Ñ¨Mªº¤èªk¤§¤@¬O¿í´`¦h¼h¦¡¬[ºcªº³]p³W½d¡CVendor Lock-in¡GÀ³¥Îµ{¦¡ª½±µ©I¥s¥~ÁʳnÅ餸¥óªº¥\¯à¡A¨Ï±oÀ³¥Îµ{¦¡°ª«×ʿহ¥~ÁʳnÅé¡A¨ä¸Ñ¨M¤è¦¡¬O¸ò¾Ú»Ý¨D³]p¤@¼h¤¶±»P¥~ÁʳnÅé·¾³q¡AÀ³¥Îµ{¦¡§Y¥i±o¨ì¸û°ªªº¿W¥ß©Ê¡C
ºÞ²zªº AntiPatterns
Management AntiPattern ªº¨å«¬¬O Project MisManagement (¤£¨}ªº±M®×ºÞ²z)¡G®Ú¥»ì¦]³q±`¬O¹ï±M®×ªº¤£Ãö¤ß¡A¦]¦Ó©¿²¤¤F¾A«×¦a³W¹º¡B±±¨î»PÀˬdµ¥µ¥±M®×¦¨¥\ªº¥²n¦]¯À¡C¨ä¥Lªº AntiPatterns ¨Ò¦p Analysis Paralysis (¤ÀªRÅõºÈ)¡G¨t²Î¤ÀªR®v¬°¨D§¹¬ü©Î¹L«×¥J²Ó¦Ó©µ»~³W®æ½T¥ß¡AÀ½À£«áÄò¤u§@ªº®Éµ{¡A¨ä¸Ñ¨M¤è®×¬O±Ä¥Î»¼¼W¦¡¶}µo¬yµ{ (Incremental & Iterative development process)¡CViewgraph Engineering¡G¶}µo¤Hû³Q»s§@¹Ïªí¤Î¤å¥óªº¤u§@©µ»~®Éµ{¡Aì¦]³q±`¬O¶}µo¤Hû¨Ï¥Î¤£·íªº¤u¨ã¡A¸Ñ¨Mªº¤èªk«h¬O³]ªk¨ú±o¾A·íªº¤u¨ã¡C
ÂÔ·VÀ³¥Î AntiPatterns
À³¥Î AntiPatterns ®É¥²¶·ª`·N¤@¨Çª¬ªp¥HÁ×§K¤Ï®ÄªG¡Aº¥ýnª`·Nªº¬O«ü¥X²Õ´©Îµ{¦¡ªº AntiPatterns ¥i¯à偒¤Î¥L¤H¡A¨Ã¤Þ°_¤¬¬Û«ü³dªº±¡¨Æ¡A©Ò¥Hn§â AntiPattern ¿Ä¤J³nÅé¶}µo¬yµ{¡A¨Ï¤§¶¶§Q¦¨¬°§ïµ½«~½èªº¤u§@§Þ¥©¡C¨ä¦¸¬O¿í´`¡y¦pªG¨SÃa´N¤£nײz¡zì«h¡A¤£n¬°¤F°l¨D§Þ³N§¹¬ü¦Ó«_µM°Ê¤â¡C¦pªG»Ýn¶i¦æ§ïµ½¡A«hÀ³§´µ½³W¹º¡A¨ÃÁ×§K¦P¤@®É¶¡³B²z¦hÓ AntiPatterns¡C
µ²½×
Design Patterns »P AntiPatterns ¬O¬Û»²¬Û¦¨ªº§Þ³N¡ADesign Patterns ¬O¸Ñ¨M°ÝÃDªº¥¿½T¼Ò¦¡¡A¦Ó AntiPatterns «h¬O¾ÉP¥¢±Ñªº¿ù»~¤èªk¡A©Ò¥H§Ų́ϥΠDesign Patterns ¶}µo³nÅé¡A¨Ï¥Î AntiPatterns ´£¿ô§ÚÌÁ×¶}³´¨À¡C¦ý¬OÀô¹Ò©Î§Þ³NªºÅܾE¡A²{¦bªº Design Patterns ¥i¯àÅܦ¨¥¼¨Óªº AntiPatterns¡A¨Ò¦p·í¦~ªºµ²ºc¤Æ¨t²Î¤ÀªR»P³]p§Þ³N«K¬O³Ì©úÅã¨Ò¤l¡C©Ò¥H³nÅé¶}µo¤Hû¦b¹B¥Î Patterns ®É¡A°È¥²¦Ò¼{¾A¥Îªº±ø¥ó¡B½d³ò¡B¤Î¥I¥Xªº¦¨¥»¡A¤è¯à¹ê²{§Æ±æ±o¨ìªº®Ä¯q¡C
¬ÛÃö¸ê·½¡G
§@ªÌ²¤¶
ªLÄ£¬Ã¬° Microsoft.NET §Þ³N¥N¨¥¤H¡A¥Ø«e¥ô¾²Ä¤Tªi¸ê°T§Þ³NÁ`ºÊ¡A¾ú¥ô²Ä¤Tªi¸ê°T±Ð¨|°V½m³B³Bªø¤Î¨|ùּƦì¬ì§ÞÁ`¸g²z¡C±Mªø©ó¸ê°T¨t²Î³W¹º¤Î³nÅé¶}µo§Þ³N¡A¾Ö¦³ Microsoft MCSD / MCSE / MCDBA¡ARational OOAD¡ALotus Notes / Domino µ¥»{ÃÒ¸ê®æ¡A¨Ã¬° Microsoft.NET / Java J2EE / ª«¥ó¾É¦V¨t²Î¤ÀªR³]pªº¸ê²`Á¿®v¤Î¦h®a¤½¥ÁÀç¾÷ºcªº e ¤ÆÅU°Ý¡C
·N¨£»P¤ä´©
±z¦³¥ô¦ó°ÝÃD¡B·N¨£©Î«ØÄ³¶Ü¡H±z¥i¥H³z¹L¤U¦C¹q¤l¶l¥ó»P§@ªÌ³sµ¸¡G
lyaochen@ms3.hinet.net