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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁìÓòÇý¶¯Éè¼ÆÔÚ»¥ÁªÍøÒµÎñ¿ª·¢ÖеÄʵ¼ù
 
 
  2272  次浏览      31
 2021-4-30
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËÁìÓòÇý¶¯Éè¼ÆÔÚ»¥ÁªÍøÒµÎñ¿ª·¢ÖеÄʵ¼ùÖ®¹ý¶ÈñîºÏ¡¢Æ¶ÑªÖ¢ºÍʧÒäÖ¢¡¢Èí¼þϵͳ¸´ÔÓÐÔÓ¦¶Ô¼°Õ½ÂÔ½¨Ä£µÈ£¬Ï£Íû¶ÔÄãµÄѧϰÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼­¡¢ÍƼö¡£

ÖÁÉÙ30ÄêÒÔǰ£¬Ò»Ð©Èí¼þÉè¼ÆÈËÔ±¾ÍÒѾ­Òâʶµ½ÁìÓò½¨Ä£ºÍÉè¼ÆµÄÖØÒªÐÔ£¬²¢ÐγÉÒ»ÖÖ˼³±£¬Eric Evans½«Æä¶¨ÒåΪÁìÓòÇý¶¯Éè¼Æ£¨Domain-Driven Design£¬¼ò³ÆDDD£©¡£ÔÚ»¥ÁªÍø¿ª·¢¡°Ð¡²½¿ìÅÜ£¬µü´úÊÔ´í¡±µÄ´ó»·¾³Ï£¬DDDËÆºõÊÇÒ»ÖֱȽϡ°¹ÅÀ϶ø»ºÂý¡±µÄ˼Ï롣Ȼ¶ø£¬ÓÉÓÚ»¥ÁªÍø¹«Ë¾Ò²Öð½¥ÉîÈëʵÌå¾­¼Ã£¬ÒµÎñÈÕÒæ¸´ÔÓ£¬ÎÒÃÇÔÚ¿ª·¢ÖÐÒ²Ô½À´Ô½¶àµØÓöµ½´«Í³ÐÐÒµÈí¼þ¿ª·¢ÖÐËùÃæÁÙµÄÎÊÌâ¡£±¾ÎľÍÏÈÀ´½²Ò»ÏÂÕâЩÎÊÌ⣬ȻºóÔÙ³¢ÊÔÔÚʵ¼ùÖÐÓÃDDDµÄ˼ÏëÀ´½â¾öÕâЩÎÊÌâ¡£

¹ý¶ÈñîºÏ

ÒµÎñ³õÆÚ£¬ÎÒÃǵŦÄܴ󶼷dz£¼òµ¥£¬ÆÕͨµÄCRUD¾ÍÄÜÂú×㣬´ËʱϵͳÊÇÇåÎúµÄ¡£Ëæ×ŵü´úµÄ²»¶ÏÑÝ»¯£¬ÒµÎñÂß¼­±äµÃÔ½À´Ô½¸´ÔÓ£¬ÎÒÃǵÄϵͳҲԽÀ´Ô½ÈßÔÓ¡£Ä£¿é±Ë´Ë¹ØÁª£¬Ë­¶¼ºÜÄÑ˵ÇåÄ£¿éµÄ¾ßÌ幦ÄÜÒâͼÊÇɶ¡£ÐÞ¸ÄÒ»¸ö¹¦ÄÜʱ£¬ÍùÍù¹â»ØËݸù¦ÄÜÐèÒªµÄÐ޸ĵã¾ÍÐèÒªºÜ³¤Ê±¼ä£¬¸ü±ðÌáÐ޸ĴøÀ´µÄ²»¿ÉÔ¤ÖªµÄÓ°ÏìÃæ¡£

ÏÂͼÊÇÒ»¸ö³£¼ûµÄϵͳñîºÏ²¡Àý¡£

·þÎññîºÏʾÒâͼ

¶©µ¥·þÎñ½Ó¿ÚÖÐÌṩÁ˲éѯ¡¢´´½¨¶©µ¥Ïà¹ØµÄ½Ó¿Ú£¬Ò²ÌṩÁ˶©µ¥ÆÀ¼Û¡¢Ö§¸¶¡¢±£ÏյĽӿڡ£Í¬Ê±ÎÒÃǵıíÒ²ÊÇÒ»¸ö¶©µ¥´ó±í£¬°üº¬Á˷dz£¶à×ֶΡ£ÔÚÎÒÃÇά»¤´úÂëʱ£¬Ç£Ò»·¢¶ø¶¯È«Éí£¬ºÜ¿ÉÄÜÖ»ÊÇÏë¸ÄÏÂÆÀ¼ÛÏà¹ØµÄ¹¦ÄÜ£¬È´Ó°Ïìµ½ÁË´´µ¥ºËÐÄ·¾¶¡£ËäÈ»ÎÒÃÇ¿ÉÒÔͨ¹ý²âÊÔ±£Ö¤¹¦ÄÜÍ걸ÐÔ£¬µ«µ±ÎÒÃÇÔÚ¶©µ¥ÁìÓòÓдóÁ¿ÐèÇóͬʱ²¢Ðпª·¢Ê±£¬¸Ä¶¯Öصþ¡¢¶ñÐÔÑ­»·¡¢Æ£ÓÚ±¼ÃüÐ޸ĸ÷ÖÖÎÊÌâ¡£

ÉÏÊöÎÊÌ⣬¹é¸ùµ½µ×ÔÚÓÚϵͳ¼Ü¹¹²»ÇåÎú£¬»®·Ö³öÀ´µÄÄ£¿éÄھ۶ȵ͡¢¸ßñîºÏ¡£

ÓÐÒ»ÖÖ½â¾ö·½°¸£¬°´ÕÕÑݽøÊ½Éè¼ÆµÄÀíÂÛ£¬ÈÃϵͳµÄÉè¼ÆËæ×ÅϵͳʵÏÖµÄÔö³¤¶øÔö³¤¡£ÎÒÃDz»ÐèÒª×÷ÌáǰÉè¼Æ£¬¾ÍÈÃϵͳ°éËæÒµÎñ³É³¤¶øÑݽø¡£Õ⵱ȻÊÇ¿ÉÐеģ¬Ãô½Ýʵ¼ùÖеÄÖØ¹¹¡¢²âÊÔÇý¶¯Éè¼Æ¼°³ÖÐø¼¯³É¿ÉÒÔ¶Ô¸¶¸÷ÖÖ»ìÂÒÎÊÌâ¡£ÖØ¹¹¡ª¡ª±£³ÖÐÐΪ²»±äµÄ´úÂë¸ÄÉÆÇå³ýÁ˲»Ð­µ÷µÄ¾Ö²¿Éè¼Æ£¬²âÊÔÇý¶¯Éè¼ÆÈ·±£¶ÔϵͳµÄ¸ü¸Ä²»»áµ¼ÖÂϵͳ¶ªÊ§»òÆÆ»µÏÖÓй¦ÄÜ£¬³ÖÐø¼¯³ÉÔòΪÍŶÓÌṩÁËͬһ´úÂë¿â¡£

ÔÚÕâÈýÖÖʵ¼ùÖУ¬Öع¹Êǿ˷þÑݽøÊ½Éè¼ÆÖдóÔÓ»âÎÊÌâµÄÖ÷Á¦£¬Í¨¹ýÔÚµ¥¶ÀµÄÀ༰·½·¨¼¶±ðÉÏ×öһϵÁÐС²½Öع¹À´Íê³É¡£ÎÒÃÇ¿ÉÒÔºÜÈÝÒ×ÖØ¹¹³öÒ»¸ö¶ÀÁ¢µÄÀàÀ´·ÅijЩͨÓõÄÂß¼­£¬µ«ÊÇÄã»á·¢ÏÖÄãºÜÄѸøËüÒ»¸öÒµÎñÉϵĺ¬Ò壬ֻÄܸøÓèÒ»¸ö¼¼Êõά¶ÈÃè»æµÄº¬Òå¡£Õâ»á´øÀ´Ê²Ã´ÎÊÌâÄØ£¿ÐÂͬѧ²¢²»×ÜÊÇÖªµÀ¶ÔͨÓÃÂß¼­µÄ¸Ä¶¯»ò»ñÈ¡À´×Ô¸ÃÀà¡£ÏÔÈ»£¬Öƶ¨ÏîÄ¿¹æ·¶²¢²»ÊǺõÄidea¡£ÎÒÃÇÓÖÎŵ½ÁË´úÂë¼´½«¸¯°ÜµÄζµÀ¡£

ÊÂʵÉÏ£¬Äã¿ÉÄÜÒâʶµ½ÎÊÌâÖ®ËùÔÚ¡£ÔÚ½â¾öÏÖʵÎÊÌâʱ£¬ÎÒÃǻὫÎÊÌâÓ³Éäµ½ÄÔº£ÖеĸÅÄîÄ£ÐÍ£¬ÔÚÄ£ÐÍÖнâ¾öÎÊÌ⣬ÔÙ½«½â¾ö·½°¸×ª»»ÎªÊµ¼ÊµÄ´úÂë¡£ÉÏÊöÎÊÌâÔÚÓÚÎÒÃǽâ¾öÁËÉè¼Æµ½´úÂëÖ®¼äµÄÖØ¹¹£¬µ«ÌáÁ¶³öÀ´µÄÉè¼ÆÄ£ÐÍ£¬²¢²»¾ßÓÐʵ¼ÊµÄÒµÎñº¬Ò壬Õâ¾Íµ¼ÖÂÔÚ¿ª·¢ÐÂÐèÇóʱ£¬ÆäËûͬѧ²¢²»ÄܺÜ×ÔÈ»µØ½«ÒµÎñÎÊÌâÓ³Éäµ½¸ÃÉè¼ÆÄ£ÐÍ¡£Éè¼ÆËÆºõ±ä³ÉÁËÖØ¹¹ÕßµÄ×ÔÓé×ÔÀÖ£¬´úÂë¼ÌÐø¸¯°Ü£¬ÖØÐÂÖØ¹¹¡­¡­ÎÞÐÝÖ¹µÄÑ­»·¡£

ÓÃDDDÔò¿ÉÒԺܺõؽâ¾öÁìÓòÄ£Ð͵½Éè¼ÆÄ£Ð͵Äͬ²½¡¢ÑÝ»¯£¬×îºóÔÙ½«·´Ó³ÁËÁìÓòµÄÉè¼ÆÄ£ÐÍתΪʵ¼ÊµÄ´úÂë¡£

×¢£ºÄ£ÐÍÊÇÎÒÃǽâ¾öʵ¼ÊÎÊÌâËù³éÏó³öÀ´µÄ¸ÅÄîÄ£ÐÍ£¬ÁìÓòÄ£ÐÍÔò±í´ïÓëÒµÎñÏà¹ØµÄÊÂʵ£»Éè¼ÆÄ£ÐÍÔòÃèÊöÁËËùÒª¹¹½¨µÄϵͳ¡£

ƶѪ֢ºÍʧÒäÖ¢

ƶѪÁìÓò¶ÔÏó

ƶѪÁìÓò¶ÔÏó£¨Anemic Domain Object£©ÊÇÖ¸½öÓÃ×÷Êý¾ÝÔØÌ壬¶øÃ»ÓÐÐÐΪºÍ¶¯×÷µÄÁìÓò¶ÔÏó¡£

ÔÚÎÒÃÇϰ¹ßÁËJ2EEµÄ¿ª·¢Ä£Ê½ºó£¬Action/Service/DAOÕâÖÖ·Ö²ãģʽ£¬»áºÜ×ÔÈ»µØÐ´³ö¹ý³Ìʽ´úÂ룬¶øÑ§µ½µÄºÜ¶à¹ØÓÚOOÀíÂÛµÄÒ²ºÁÎÞÓÃÎäÖ®µØ¡£Ê¹ÓÃÕâÖÖ¿ª·¢·½Ê½£¬¶ÔÏóÖ»ÊÇÊý¾ÝµÄÔØÌ壬ûÓÐÐÐΪ¡£ÒÔÊý¾ÝΪÖÐÐÄ£¬ÒÔÊý¾Ý¿âERÉè¼Æ×÷Çý¶¯¡£·Ö²ã¼Ü¹¹ÔÚÕâÖÖ¿ª·¢Ä£Ê½Ï£¬¿ÉÒÔÀí½âΪÊǶÔÊý¾ÝÒÆ¶¯¡¢´¦ÀíºÍʵÏֵĹý³Ì¡£

ÒÔ±ÊÕß×î½ü¿ª·¢µÄϵͳ³é½±Æ½Ì¨ÎªÀý£º

³¡¾°ÐèÇó

½±³ØÀïÅäÖÃÁ˺ཱܶÏÎÒÃÇÐèÒª°´ÔËÓªÔ¤ÏÈÅäÖõĸÅÂʳéÖÐÒ»¸ö½±Ïî¡£ ʵÏַdz£¼òµ¥£¬Éú³ÉÒ»¸öËæ»úÊý£¬Æ¥Åä·ûºÏ¸ÃËæ»úÊýÉú³É¸ÅÂʵĽ±Ïî¼´¿É¡£

ƶѪģÐÍʵÏÖ·½°¸

ÏÈÉè¼Æ½±³ØºÍ½±ÏîµÄ¿â±íÅäÖá£

³é½±ERͼ

Éè¼ÆAwardPoolºÍAwardÁ½¸ö¶ÔÏó£¬Ö»Óмòµ¥µÄgetºÍsetÊôÐԵķ½·¨


class AwardPool {
int awardPoolId;
List<Award> awards;
public List<Award> getAwards() {
return awards;
}

public void setAwards(List<Award> awards) {
this.awards = awards;
}
......
}

class Award {
int awardId;
int probability;//¸ÅÂÊ

......


}

Service´úÂëʵÏÖ

Éè¼ÆÒ»¸öLotteryService£¬ÔÚÆäÖеÄdrawLottery()·½·¨Ð´·þÎñÂß¼­

AwardPool awardPool = awardPoolDao.getAwardPool(poolId);//sql²éѯ£¬½«Êý¾ÝÓ³Éäµ½AwardPool¶ÔÏó
for (Award award : awardPool.getAwards()) {
//ѰÕÒµ½·ûºÏaward.getProbability()¸ÅÂʵÄaward


}

°´ÕÕÎÒÃÇͨ³£Ë¼Â·ÊµÏÖ£¬¿ÉÒÔ·¢ÏÖ£ºÔÚÒµÎñÁìÓòÀï·Ç³£ÖØÒªµÄ³é½±£¬ÎÒµÄÒµÎñÂß¼­¶¼ÊÇдÔÚServiceÖеģ¬Award³äÆäÁ¿Ö»ÊǸöÊý¾ÝÔØÌ壬ûÓÐÈκÎÐÐΪ¡£¼òµ¥µÄÒµÎñϵͳ²ÉÓÃÕâÖÖÆ¶ÑªÄ£Ðͺ͹ý³Ì»¯Éè¼ÆÊÇûÓÐÎÊÌâµÄ£¬µ«ÔÚÒµÎñÂß¼­¸´ÔÓÁË£¬ÒµÎñÂß¼­¡¢×´Ì¬»áÉ¢Âäµ½ÔÚ´óÁ¿·½·¨ÖУ¬Ô­±¾µÄ´úÂëÒâͼ»á½¥½¥²»Ã÷È·£¬ÎÒÃǽ«ÕâÖÖÇé¿ö³ÆÎªÓÉÆ¶ÑªÖ¢ÒýÆðµÄʧÒäÖ¢¡£

¸üºÃµÄÊDzÉÓÃÁìÓòÄ£Ð͵Ŀª·¢·½Ê½£¬½«Êý¾ÝºÍÐÐΪ·â×°ÔÚÒ»Æð£¬²¢ÓëÏÖʵÊÀ½çÖеÄÒµÎñ¶ÔÏóÏàÓ³Éä¡£¸÷Àà¾ß±¸Ã÷È·µÄÖ°Ôð»®·Ö£¬½«ÁìÓòÂß¼­·ÖÉ¢µ½ÁìÓò¶ÔÏóÖС£¼ÌÐø¾ÙÎÒÃÇÉÏÊö³é½±µÄÀý×Ó£¬Ê¹ÓøÅÂÊÑ¡Ôñ¶ÔÓ¦µÄ½±Æ·¾ÍÓ¦µ±·Åµ½AwardPoolÀàÖС£

Èí¼þϵͳ¸´ÔÓÐÔÓ¦¶Ô

½â¾ö¸´ÔӺʹó¹æÄ£Èí¼þµÄÎäÆ÷¿ÉÒÔ±»´ÖÂԵعéΪÈýÀࣺ³éÏó¡¢·ÖÖκÍ֪ʶ¡£

·ÖÖÎ?°ÑÎÊÌâ¿Õ¼ä·Ö¸îΪ¹æÄ£¸üСÇÒÒ×ÓÚ´¦ÀíµÄÈô¸É×ÓÎÊÌâ¡£·Ö¸îºóµÄÎÊÌâÐèÒª×㹻С£¬ÒÔ±ãÒ»¸öÈ˵¥Ç¹Æ¥Âí¾ÍÄܹ»½â¾öËûÃÇ£»Æä´Î£¬±ØÐ뿼ÂÇÈçºÎ½«·Ö¸îºóµÄ¸÷¸ö²¿·Ö×°ÅäΪÕûÌå¡£·Ö¸îµÃÔ½ºÏÀíÔ½Ò×ÓÚÀí½â£¬ÔÚ×°Åä³ÉÕûÌåʱ£¬ËùÐè¸ú×ÙµÄϸ½ÚÒ²¾ÍÔ½ÉÙ¡£¼´¸üÈÝÒ×Éè¼Æ¸÷²¿·ÖµÄЭ×÷·½Ê½¡£ÆÀÅÐʲôÊÇ·ÖÖεú㬼´¸ßÄÚ¾ÛµÍñîºÏ¡£

³éÏó?ʹÓóéÏóÄܹ»¾«¼òÎÊÌâ¿Õ¼ä£¬¶øÇÒÎÊÌâԽСԽÈÝÒ×Àí½â¡£¾Ù¸öÀý×Ó£¬´Ó±±¾©µ½ÉϺ£³ö²î£¬¿ÉÒÔÏÈÀí½âΪʹÓý»Í¨¹¤¾ßǰÍù£¬µ«²»ÐèÒªÒ»¿ªÊ¼¾ÍÏëÇå³þµ½µ×ÊǸßÌú»¹ÊÇ·É»ú£¬ÒÔ¼°³Ë×øËûÃÇÐèҪעÒâʲô¡£

֪ʶ?¹ËÃû˼Ò壬DDD¿ÉÒÔÈÏΪÊÇ֪ʶµÄÒ»ÖÖ¡£

DDDÌṩÁËÕâÑùµÄ֪ʶÊֶΣ¬ÈÃÎÒÃÇÖªµÀÈçºÎ³éÏó³öÏÞ½çÉÏÏÂÎÄÒÔ¼°ÈçºÎÈ¥·ÖÖΡ£

Óë΢·þÎñ¼Ü¹¹ÏàµÃÒæÕÃ

΢·þÎñ¼Ü¹¹ÖÚËùÖÜÖª£¬´Ë´¦²»×ö׸Êö¡£ÎÒÃÇ´´½¨Î¢·þÎñʱ£¬ÐèÒª´´½¨Ò»¸ö¸ßÄÚ¾Û¡¢µÍñîºÏµÄ΢·þÎñ¡£¶øDDDÖеÄÏÞ½çÉÏÏÂÎÄÔòÍêÃÀÆ¥Åä΢·þÎñÒªÇ󣬿ÉÒÔ½«¸ÃÏÞ½çÉÏÏÂÎÄÀí½âΪһ¸ö΢·þÎñ½ø³Ì¡£

ÉÏÊöÊÇ´Ó¸üÖ±¹ÛµÄ½Ç¶ÈÀ´ÃèÊöÁ½ÕßµÄÏàËÆ´¦¡£

ÔÚϵͳ¸´ÔÓÖ®ºó£¬ÎÒÃǶ¼ÐèÒªÓ÷ÖÖÎÀ´²ð½âÎÊÌâ¡£Ò»°ãÓÐÁ½ÖÖ·½Ê½£¬¼¼Êõά¶ÈºÍÒµÎñά¶È¡£¼¼Êõά¶ÈÊÇÀàËÆMVCÕâÑù£¬ÒµÎñά¶ÈÔòÊÇÖ¸°´ÒµÎñÁìÓòÀ´»®·Öϵͳ¡£

΢·þÎñ¼Ü¹¹¸üÇ¿µ÷´ÓÒµÎñά¶ÈÈ¥×ö·ÖÖÎÀ´Ó¦¶Ôϵͳ¸´ÔÓ¶È£¬¶øDDDÒ²ÊÇͬÑùµÄ×ÅÖØÒµÎñÊӽǡ£ Èç¹ûÁ½ÕßÔÚ×·ÇóµÄÄ¿±ê£¨ÒµÎñά¶È£©´ïµ½ÁËÉÏÏÂÎĵÄͳһ£¬ÄÇôÔÚ¾ßÌå×ö·¨ÉÏÓÐʲôÁªÏµºÍ²»Í¬ÄØ£¿

ÎÒÃǽ«¼Ü¹¹Éè¼Æ»î¶¯¾«¼òΪÒÔÏÂÈý¸ö²ãÃæ£º

ÒµÎñ¼Ü¹¹¡ª¡ª¸ù¾ÝÒµÎñÐèÇóÉè¼ÆÒµÎñÄ£¿é¼°Æä¹ØÏµ

ϵͳ¼Ü¹¹¡ª¡ªÉè¼ÆÏµÍ³ºÍ×ÓϵͳµÄÄ£¿é

¼¼Êõ¼Ü¹¹¡ª¡ª¾ö¶¨²ÉÓõļ¼Êõ¼°¿ò¼Ü

ÒÔÉÏÈýÖֻÔÚʵ¼Ê¿ª·¢ÖÐÊÇÓÐÏȺó˳ÐòµÄ£¬µ«²»Ò»¶¨ÊëÏÈÊëºó¡£ÔÚÎÒÃǽâ¾ö³£¹æÌ×·ÎÊÌâʱ£¬ÎÒÃÇ»áºÜ×ÔÈ»µØÍùÊìϤµÄ·Ö²ã¼Ü¹¹Ì×£¨ÏÈÈ·¶¨ÏµÍ³¼Ü¹¹£©£¬»òÕßÓÃPHP¿ª·¢ºÜ¿ì£¨ÏÈÈ·¶¨¼¼Êõ¼Ü¹¹£©£¬ÔÚÒµÎñ²»¸´ÔÓʱ£¬ÕâÑùÊǺÏÀíµÄ¡£

Ìø¹ýÒµÎñ¼Ü¹¹Éè¼Æ³öÀ´µÄ¼Ü¹¹¹Ø×¢µã²»ÔÚÒµÎñÏìÓ¦ÉÏ£¬¿ÉÄܾÍÊǸö´óÄàÇò£¬ÔÚÃæÁÙÐèÇóµü´ú»òÏìÓ¦Êг¡±ä»¯Ê±¾ÍºÜÍ´¿à¡£

DDDµÄºËÐÄËßÇó¾ÍÊǽ«ÒµÎñ¼Ü¹¹Ó³É䵽ϵͳ¼Ü¹¹ÉÏ£¬ÔÚÏìÓ¦ÒµÎñ±ä»¯µ÷ÕûÒµÎñ¼Ü¹¹Ê±£¬Ò²ËæÖ®±ä»¯ÏµÍ³¼Ü¹¹¡£¶øÎ¢·þÎñ×·ÇóÒµÎñ²ãÃæµÄ¸´Óã¬Éè¼Æ³öÀ´µÄϵͳ¼Ü¹¹ºÍÒµÎñÒ»Ö£»ÔÚ¼¼Êõ¼Ü¹¹ÉÏÔòϵͳģ¿éÖ®¼ä³ä·Ö½âñ¿ÉÒÔ×ÔÓɵØÑ¡ÔñºÏÊʵļ¼Êõ¼Ü¹¹£¬È¥ÖÐÐÄ»¯µØÖÎÀí¼¼ÊõºÍÊý¾Ý¡£

¿ÉÒԲμûÏÂͼÀ´¸üºÃµØÀí½âË«·½Ö®¼äµÄЭ×÷¹ØÏµ£º

DDDÓë΢·þÎñ¹ØÏµ

ÎÒÃǽ«Í¨¹ýÉÏÎÄÌáµ½µÄ³é½±Æ½Ì¨£¬À´Ïêϸ½éÉÜÎÒÃÇÈçºÎͨ¹ýDDDÀ´½â¹¹Ò»¸öÖÐÐ͵ĻùÓÚ΢·þÎñ¼Ü¹¹µÄϵͳ£¬´Ó¶ø×öµ½ÏµÍ³µÄ¸ßÄÚ¾Û¡¢µÍñîºÏ¡£

Ê×ÏÈ¿´Ï³齱ϵͳµÄ´óÖÂÐèÇó£º ÔËÓª¡ª¡ª¿ÉÒÔÅäÖÃÒ»¸ö³é½±»î¶¯£¬¸Ã»î¶¯ÃæÏòÒ»¸öÌØ¶¨µÄÓû§ÈºÌ壬²¢Õë¶ÔÒ»¸öÓû§ÈºÌå·¢·ÅÒ»Åú²»Í¬ÀàÐ͵Ľ±Æ·£¨ÓÅ»Ýȯ£¬¼¤»îÂ룬ʵÎアƷµÈ£©¡£ Óû§-ͨ¹ý»î¶¯Ò³Ãæ²ÎÓ벻ͬÀàÐ͵ij齱»î¶¯¡£

Éè¼ÆÁìÓòÄ£Ð͵ÄÒ»°ã²½ÖèÈçÏ£º

¸ù¾ÝÐèÇó»®·Ö³ö³õ²½µÄÁìÓòºÍÏÞ½çÉÏÏÂÎÄ£¬ÒÔ¼°ÉÏÏÂÎÄÖ®¼äµÄ¹ØÏµ£»

½øÒ»²½·ÖÎöÿ¸öÉÏÏÂÎÄÄÚ²¿£¬Ê¶±ð³öÄÄЩÊÇʵÌ壬ÄÄЩÊÇÖµ¶ÔÏó£»

¶ÔʵÌå¡¢Öµ¶ÔÏó½øÐйØÁªºÍ¾ÛºÏ£¬»®·Ö³ö¾ÛºÏµÄ·¶³ëºÍ¾ÛºÏ¸ù£»

Ϊ¾ÛºÏ¸ùÉè¼Æ²Ö´¢£¬²¢Ë¼¿¼ÊµÌå»òÖµ¶ÔÏóµÄ´´½¨·½Ê½£»

ÔÚ¹¤³ÌÖÐʵ¼ùÁìÓòÄ£ÐÍ£¬²¢ÔÚʵ¼ùÖмìÑéÄ£Ð͵ĺÏÀíÐÔ£¬µ¹ÍÆÄ£ÐÍÖв»×ãµÄµØ·½²¢Öع¹¡£

Õ½ÂÔ½¨Ä£

Õ½ÂÔºÍÕ½ÊõÉè¼ÆÊÇÕ¾ÔÚDDDµÄ½Ç¶È½øÐл®·Ö¡£Õ½ÂÔÉè¼Æ²àÖØÓڸ߲ã´Î¡¢ºê¹ÛÉÏÈ¥»®·ÖºÍ¼¯³ÉÏÞ½çÉÏÏÂÎÄ£¬¶øÕ½ÊõÉè¼ÆÔò¹Ø×¢¸ü¾ßÌåʹÓý¨Ä£¹¤¾ßÀ´Ï¸»¯ÉÏÏÂÎÄ¡£

ÁìÓò

ÏÖʵÊÀ½çÖУ¬ÁìÓò°üº¬ÁËÎÊÌâÓòºÍ½âϵͳ¡£Ò»°ãÈÏΪÈí¼þÊǶÔÏÖʵÊÀ½çµÄ²¿·ÖÄ£Äâ¡£ÔÚDDDÖУ¬½âϵͳ¿ÉÒÔÓ³ÉäΪһ¸ö¸öÏÞ½çÉÏÏÂÎÄ£¬ÏÞ½çÉÏÏÂÎľÍÊÇÈí¼þ¶ÔÓÚÎÊÌâÓòµÄÒ»¸öÌØ¶¨µÄ¡¢ÓÐÏ޵Ľâ¾ö·½°¸¡£

ÏÞ½çÉÏÏÂÎÄ

ÏÞ½çÉÏÏÂÎÄ

Ò»¸öÓÉÏÔʾ±ß½çÏÞ¶¨µÄÌØ¶¨Ö°Ôð¡£ÁìÓòÄ£ÐÍ±ã´æÔÚÓÚÕâ¸ö±ß½çÖ®ÄÚ¡£Ôڱ߽çÄÚ£¬Ã¿Ò»¸öÄ£Ð͸ÅÄ°üÀ¨ËüµÄÊôÐԺͲÙ×÷£¬¶¼¾ßÓÐÌØÊâµÄº¬Òå¡£

Ò»¸ö¸ø¶¨µÄÒµÎñÁìÓò»á°üº¬¶à¸öÏÞ½çÉÏÏÂÎÄ£¬ÏëÓëÒ»¸öÏÞ½çÉÏÏÂÎŵͨ£¬ÔòÐèҪͨ¹ýÏÔʾ±ß½ç½øÐÐͨÐÅ¡£ÏµÍ³Í¨¹ýÈ·¶¨µÄÏÞ½çÉÏÏÂÎÄÀ´½øÐнâñ¶øÃ¿Ò»¸öÉÏÏÂÎÄÄÚ²¿½ôÃÜ×éÖ¯£¬Ö°ÔðÃ÷È·£¬¾ßÓнϸߵÄÄÚ¾ÛÐÔ¡£

Ò»¸öºÜÐÎÏóµÄÒþÓ÷£ºÏ¸°ûÖÊËùÒÔÄܹ»´æÔÚ£¬ÊÇÒòΪϸ°ûĤÏÞ¶¨ÁËʲôÔÚϸ°ûÄÚ£¬Ê²Ã´ÔÚϸ°ûÍ⣬²¢ÇÒÈ·¶¨ÁËʲôÎïÖÊ¿ÉÒÔͨ¹ýϸ°ûĤ¡£

»®·ÖÏÞ½çÉÏÏÂÎÄ

»®·ÖÏÞ½çÉÏÏÂÎÄ£¬²»¹ÜÊÇEric Evans»¹ÊÇVaughn Vernon£¬ÔÚËûÃǵĴó×÷ÀﶼûÓÐÔõôÌá¼°¡£

ÏÔÈ»ÎÒÃDz»Ó¦¸Ã°´¼¼Êõ¼Ü¹¹»òÕß¿ª·¢ÈÎÎñÀ´´´½¨ÏÞ½çÉÏÏÂÎÄ£¬Ó¦¸Ã°´ÕÕÓïÒåµÄ±ß½çÀ´¿¼ÂÇ¡£

ÎÒÃǵÄʵ¼ùÊÇ£¬¿¼ÂDzúÆ·Ëù½²µÄͨÓÃÓïÑÔ£¬´ÓÖÐÌáȡһЩÊõÓï³ÆÖ®Îª¸ÅÄî¶ÔÏó£¬Ñ°ÕÒ¶ÔÏóÖ®¼äµÄÁªÏµ£»»òÕß´ÓÐèÇóÀïÌáȡһЩ¶¯´Ê£¬¹Û²ì¶¯´ÊºÍ¶ÔÏóÖ®¼äµÄ¹ØÏµ£»ÎÒÃǽ«½ôñîºÏµÄ¸÷×ÔȦÔÚÒ»Æð£¬¹Û²ìËûÃÇÄÚÔÚµÄÁªÏµ£¬´Ó¶øÐγɶÔÓ¦µÄ½çÏÞÉÏÏÂÎÄ¡£ÐγÉÖ®ºó£¬ÎÒÃÇ¿ÉÒÔ³¢ÊÔÓÃÓïÑÔÀ´ÃèÊöϽçÏÞÉÏÏÂÎĵÄÖ°Ô𣬿´ËüÊÇ·ñÇåÎú¡¢×¼È·¡¢¼ò½àºÍÍêÕû¡£¼òÑÔÖ®£¬ÏÞ½çÉÏÏÂÎÄÓ¦¸Ã´ÓÐèÇó³ö·¢£¬°´ÁìÓò»®·Ö¡£

ǰÎÄÌáµ½£¬ÎÒÃǵÄÓû§»®·ÖΪÔËÓªºÍÓû§¡£ÆäÖУ¬ÔËÓª¶Ô³é½±»î¶¯µÄÅäÖÃÊ®·Ö¸´ÔÓµ«Ïà¶ÔµÍƵ¡£Óû§¶ÔÕâЩ³é½±»î¶¯ÅäÖõÄʹÓÃÊÇ¸ßÆµ´ÎÇÒÎÞ¸ÐÖªµÄ¡£¸ù¾ÝÕâÑùµÄÒµÎñÌØµã£¬ÎÒÃÇÊ×ÏȽ«³é½±Æ½Ì¨»®·ÖΪC¶Ë³é½±ºÍM¶Ë³é½±¹ÜÀíÆ½Ì¨Á½¸ö×ÓÓò£¬ÈÃÁ½ÕßÍêÈ«½âñî¡£

³é½±Æ½Ì¨ÁìÓò

ÔÚÈ·ÈÏÁËM¶ËÁìÓòºÍC¶ËµÄÏÞ½çÉÏÏÂÎĺó£¬ÎÒÃÇÔÙ¶Ô¸÷×ÔÉÏÏÂÎÄÄÚ²¿½øÐÐÏÞ½çÉÏÏÂÎĵĻ®·Ö¡£ÏÂÃæÎÒÃÇÓÃC¶Ë½øÐоÙÀý¡£

²úÆ·µÄÐèÇó¸ÅÊöÈçÏ£º

1. ³é½±»î¶¯ÓлÏÞÖÆ£¬ÀýÈçÓû§µÄ³é½±´ÎÊýÏÞÖÆ£¬³é½±µÄ¿ªÊ¼ºÍ½áÊøµÄʱ¼äµÈ£»

2. Ò»¸ö³é½±»î¶¯°üº¬¶à¸ö½±Æ·£¬¿ÉÒÔÕë¶ÔÒ»¸ö»ò¶à¸öÓû§ÈºÌ壻

3. ½±Æ·ÓÐ×ÔÉíµÄ½±Æ·ÅäÖã¬ÀýÈç¿â´æÁ¿£¬±»³éÖеĸÅÂʵȣ¬×î¶à±»Ò»¸öÓû§³éÖеĴÎÊýµÈµÈ£»

4. Óû§ÈºÌåÓжàÖÖÇø±ð·½Ê½£¬Èç°´ÕÕÓû§ËùÔÚ³ÇÊÐÇø·Ö£¬°´ÕÕÐÂÀÏ¿ÍÇø·ÖµÈ£»

5. »î¶¯¾ßÓÐ·ç¿ØÅäÖã¬Äܹ»ÏÞÖÆÓû§²ÎÓë³é½±µÄƵÂÊ¡£

¸ù¾Ý²úÆ·µÄÐèÇó£¬ÎÒÃÇÌáÈ¡ÁËһЩ¹Ø¼üÐԵĸÅÄî×÷Ϊ×ÓÓò£¬ÐγÉÎÒÃǵÄÏÞ½çÉÏÏÂÎÄ¡£

C¶Ë³é½±ÁìÓò

Ê×ÏÈ£¬³é½±ÉÏÏÂÎÄ×÷ΪÕû¸öÁìÓòµÄºËÐÄ£¬³Ðµ£×ÅÓû§³é½±µÄºËÐÄÒµÎñ£¬³é½±Öаüº¬Á˽±Æ·ºÍÓû§ÈºÌåµÄ¸ÅÄî¡£

ÔÚÉè¼Æ³õÆÚ£¬ÎÒÃÇÔø¾­¿¼ÂÇ»®·Ö³ö³é½±ºÍ·¢½±Á½¸öÁìÓò£¬Ç°Õ߸ºÔðÑ¡½±£¬ºóÕ߸ºÔð½«Ñ¡ÖеĽ±Æ··¢·Å³öÈ¥¡£µ«ÔÚʵ¼Ê¿ª·¢¹ý³ÌÖУ¬ÎÒÃÇ·¢ÏÖÕâÁ½²¿·ÖµÄÂß¼­½ôÃÜÁ¬½Ó£¬ÄÑÒÔ²ð·Ö¡£²¢ÇÒµ¥´¿µÄ·¢½±Âß¼­×ã¹»¼òµ¥£¬½ö½öÊǵ÷ÓõÚÈý·½·þÎñ½øÐз¢½±£¬²»×ãÒÔ¶ÀÁ¢³öÀ´³ÉΪһ¸öÁìÓò¡£

¶ÔÓڻµÄÏÞÖÆ£¬ÎÒÃǶ¨ÒåÁ˻׼ÈëµÄͨÓÃÓïÑÔ£¬½«»î¶¯¿ªÊ¼/½áÊøÊ±¼ä£¬»î¶¯¿É²ÎÓë´ÎÊýµÈÏÞÖÆÌõ¼þ¶¼ÊÕ£µ½»î¶¯×¼ÈëÉÏÏÂÎÄÖС£

¶ÔÓڳ齱µÄ½±Æ·¿â´æÁ¿£¬ÓÉÓÚ¿â´æµÄÐÐΪÓ뽱Ʒ±¾ÉíÏà¶Ô½âñ¿â´æ¹Ø×¢µã¸ü¶àÊÇ¿â´æÄÚÈݵĺËÏú£¬ÇÒ¿â´æ±¾Éí¾ß±¸Í¨ÓÃÐÔ£¬¿ÉÒÔ±»½±Æ·Ö®ÍâµÄÄÚÈÝʹÓã¬Òò´ËÎÒÃǶ¨ÒåÁ˶ÀÁ¢µÄ¿â´æÉÏÏÂÎÄ¡£

ÓÉÓÚC¶Ë´æÔÚһЩˢµ¥ÐÐΪ£¬ÎÒÃǸù¾Ý²úÆ·ÐèÇó¶¨ÒåÁË·ç¿ØÉÏÏÂÎÄ£¬ÓÃÓڶԻ½øÐÐ·ç¿Ø¡£ ×îºó£¬»î¶¯×¼Èë¡¢·ç¿Ø¡¢³é½±µÈÁìÓò¶¼Éæ¼°µ½Ò»Ð©´ÎÊýµÄÏÞÖÆ£¬Òò´ËÎÒÃǶ¨ÒåÁ˼ÆÊýÉÏÏÂÎÄ¡£

¿ÉÒÔ¿´µ½£¬Í¨¹ýDDDµÄÏÞ½çÉÏÏÂÎÄ»®·Ö£¬ÎÒÃǽ綨³ö³é½±¡¢»î¶¯×¼Èë¡¢·ç¿Ø¡¢¼ÆÊý¡¢¿â´æµÈÎå¸öÉÏÏÂÎÄ£¬Ã¿¸öÉÏÏÂÎÄÔÚϵͳÖж¼¸ß¶ÈÄÚ¾Û¡£

ÉÏÏÂÎÄÓ³Éäͼ

ÔÚ½øÐÐÉÏÏÂÎÄ»®·ÖÖ®ºó£¬ÎÒÃÇ»¹ÐèÒª½øÒ»²½ÊáÀíÉÏÏÂÎÄÖ®¼äµÄ¹ØÏµ¡£

¿µÍþ£¨Ã·¶û¡¤¿µÍþ£©¶¨ÂÉ

ÈκÎ×éÖ¯ÔÚÉè¼ÆÒ»Ì×ϵͳ£¨¹ãÒå¸ÅÄîÉϵÄϵͳ£©Ê±£¬Ëù½»¸¶µÄÉè¼Æ·½°¸ÔڽṹÉ϶¼Óë¸Ã×éÖ¯µÄ¹µÍ¨½á¹¹±£³ÖÒ»Ö¡£

¿µÍþ¶¨ÂɸæËßÎÒÃÇ£¬ÏµÍ³½á¹¹Ó¦¾¡Á¿µÄÓë×éÖ¯½á¹¹±£³ÖÒ»Ö¡£ÕâÀÎÒÃÇÈÏΪÍŶӽṹ£¨ÎÞÂÛÊÇÄÚ²¿×éÖ¯»¹ÊÇÍŶӼä×éÖ¯£©¾ÍÊÇ×éÖ¯½á¹¹£¬ÏÞ½çÉÏÏÂÎľÍÊÇϵͳµÄÒµÎñ½á¹¹¡£Òò´Ë£¬ÍŶӽṹӦ¸ÃºÍÏÞ½çÉÏÏÂÎı£³ÖÒ»Ö¡£

ÊáÀíÇå³þÉÏÏÂÎÄÖ®¼äµÄ¹ØÏµ£¬´ÓÍŶÓÄÚ²¿µÄ¹ØÏµÀ´¿´£¬ÓÐÈçϺô¦£º

ÈÎÎñ¸üºÃ²ð·Ö£¬Ò»¸ö¿ª·¢ÈËÔ±¿ÉÒÔÈ«ÉíÐĵÄͶÈëµ½Ïà¹ØµÄÒ»¸öµ¥¶ÀµÄÉÏÏÂÎÄÖУ»

¹µÍ¨¸ü¼Ó˳³©£¬Ò»¸öÉÏÏÂÎÄ¿ÉÒÔÃ÷È·×Ô¼º¶ÔÆäËûÉÏÏÂÎĵÄÒÀÀµ¹ØÏµ£¬´Ó¶øÊ¹µÃÍŶÓÄÚ¿ª·¢Ö±½Ó¸üºÃµÄ¶Ô½Ó¡£

´ÓÍŶӼäµÄ¹ØÏµÀ´¿´£¬Ã÷È·µÄÉÏÏÂÎĹØÏµÄܹ»´øÀ´ÈçϰïÖú£º

ÿ¸öÍŶÓÔÚËüµÄÉÏÏÂÎÄÖÐÄܹ»¸ü¼ÓÃ÷È·×Ô¼ºÁìÓòÄڵĸÅÄÒòΪÉÏÏÂÎÄÊÇÁìÓòµÄ½âϵͳ£»

¶ÔÓÚÏÞ½çÉÏÏÂÎÄÖ®¼ä·¢Éú½»»¥£¬ÍŶÓÓëÉÏÏÂÎĵÄÒ»ÖÂÐÔ£¬Äܹ»±£Ö¤ÎÒÃÇÃ÷È·¶Ô½ÓµÄÍŶӺÍÒÀÀµµÄÉÏÏÂÓΡ£

ÏÞ½çÉÏÏÂÎÄÖ®¼äµÄÓ³Éä¹ØÏµ

ºÏ×÷¹ØÏµ£¨Partnership£©£ºÁ½¸öÉÏÏÂÎĽôÃܺÏ×÷µÄ¹ØÏµ£¬Ò»ÈÙ¾ãÈÙ£¬Ò»Ëð¾ãËð¡£

¹²ÏíÄںˣ¨Shared Kernel£©£ºÁ½¸öÉÏÏÂÎÄÒÀÀµ²¿·Ö¹²ÏíµÄÄ£ÐÍ¡£

¿Í»§·½-¹©Ó¦·½¿ª·¢£¨Customer-Supplier Development£©£ºÉÏÏÂÎÄÖ®¼äÓÐ×éÖ¯µÄÉÏÏÂÓÎÒÀÀµ¡£

×ñ·îÕߣ¨Conformist£©£ºÏÂÓÎÉÏÏÂÎÄÖ»ÄÜäĿÒÀÀµÉÏÓÎÉÏÏÂÎÄ¡£

·À¸¯²ã£¨Anticorruption Layer£©£ºÒ»¸öÉÏÏÂÎÄͨ¹ýһЩÊÊÅäºÍת»»ÓëÁíÒ»¸öÉÏÏÂÎĽ»»¥¡£

¿ª·ÅÖ÷»ú·þÎñ£¨Open Host Service£©£º¶¨ÒåÒ»ÖÖЭÒéÀ´ÈÃÆäËûÉÏÏÂÎÄÀ´¶Ô±¾ÉÏÏÂÎĽøÐзÃÎÊ¡£

·¢²¼ÓïÑÔ£¨Published Language£©£ºÍ¨³£ÓëOHSÒ»ÆðʹÓã¬ÓÃÓÚ¶¨Ò忪·ÅÖ÷»úµÄЭÒé¡£

´óÄàÇò£¨Big Ball of Mud£©£º»ìÔÓÔÚÒ»ÆðµÄÉÏÏÂÎĹØÏµ£¬±ß½ç²»ÇåÎú¡£

ÁíıËû·£¨SeparateWay£©£ºÁ½¸öÍêȫûÓÐÈκÎÁªÏµµÄÉÏÏÂÎÄ¡£

ÉÏÎ͍ÒåÁËÉÏÏÂÎÄÓ³Éä¼äµÄ¹ØÏµ£¬¾­¹ýÎÒÃǵķ´¸´Õå×㬳齱ƽ̨ÉÏÏÂÎĵÄÓ³Éä¹ØÏµÍ¼ÈçÏ£º

ÉÏÏÂÎÄÓ³Éä¹ØÏµ

ÓÉÓڳ齱£¬·ç¿Ø£¬»î¶¯×¼È룬¿â´æ£¬¼ÆÊýÎå¸öÉÏÏÂÎͼ´¦Ôڳ齱ÁìÓòµÄÄÚ²¿£¬ËùÒÔËüÃÇÖ®¼ä·ûºÏ¡°Ò»ÈÙ¾ãÈÙ£¬Ò»Ëð¾ãË𡱵ĺÏ×÷¹ØÏµ£¨PartnerShip£¬¼ò³ÆPS£©¡£

ͬʱ£¬³é½±ÉÏÏÂÎÄÔÚ½øÐз¢È¯¶¯×÷ʱ£¬»áÒÀÀµÈ¯Â롢ƽ̨ȯ¡¢ÍâÂôȯÈý¸öÉÏÏÂÎÄ¡£³é½±ÉÏÏÂÎÄͨ¹ý·À¸¯²ã£¨Anticorruption Layer£¬ACL£©¶ÔÈý¸öÉÏÏÂÎĽøÐÐÁ˸ôÀ룬¶øÈý¸öȯÉÏÏÂÎÄͨ¹ý¿ª·ÅÖ÷»ú·þÎñ£¨Open Host Service£©×÷Ϊ·¢²¼ÓïÑÔ£¨Published Language£©¶Ô³é½±ÉÏÏÂÎÄÌṩ·ÃÎÊ»úÖÆ¡£

ͨ¹ýÉÏÏÂÎÄÓ³Éä¹ØÏµ£¬ÎÒÃÇÃ÷È·µÄÏÞÖÆÁËÏÞ½çÉÏÏÂÎĵÄñîºÏÐÔ£¬¼´Ôڳ齱ƽ̨ÖУ¬ÎÞÂÛÊÇÉÏÏÂÎÄÄÚ²¿½»»¥£¨ºÏ×÷¹ØÏµ£©»¹ÊÇÓëÍⲿÉÏÏÂÎĽ»»¥£¨·À¸¯²ã£©£¬ñîºÏ¶È¶¼ÏÞ¶¨ÔÚÊý¾ÝñîºÏ£¨Data Coupling£©µÄ²ã¼¶¡£

Õ½Êõ½¨Ä£¡ª¡ªÏ¸»¯ÉÏÏÂÎÄ

ÊáÀíÇå³þÉÏÏÂÎÄÖ®¼äµÄ¹ØÏµºó£¬ÎÒÃÇÐèÒª´ÓÕ½Êõ²ãÃæÉÏÆÊÎöÉÏÏÂÎÄÄÚ²¿µÄ×éÖ¯¹ØÏµ¡£Ê×ÏÈ¿´ÏÂDDDÖеÄһЩ¶¨Òå¡£

ʵÌå

µ±Ò»¸ö¶ÔÏóÓÉÆä±êʶ£¨¶ø²»ÊÇÊôÐÔ£©Çø·Öʱ£¬ÕâÖÖ¶ÔÏó³ÆÎªÊµÌ壨Entity£©¡£

Àý£º×î¼òµ¥µÄ£¬¹«°²ÏµÍ³µÄÉí·ÝÐÅϢ¼È룬¶ÔÓÚÈ˵ÄÄ£Ä⣬¼´ÈÏΪÊÇʵÌ壬ÒòΪÿ¸öÈËÊǶÀÒ»ÎÞ¶þµÄ£¬ÇÒÆä¾ßÓÐΨһ±êʶ£¨È繫°²ÏµÍ³·Ö·¢µÄÉí·ÝÖ¤ºÅÂ룩¡£

ÔÚʵ¼ùÉϽ¨Ò齫ÊôÐÔµÄÑéÖ¤·Åµ½ÊµÌåÖС£

Öµ¶ÔÏó

µ±Ò»¸ö¶ÔÏóÓÃÓÚ¶ÔÊÂÎñ½øÐÐÃèÊö¶øÃ»ÓÐΨһ±êʶʱ£¬Ëü±»³Æ×÷Öµ¶ÔÏó£¨Value Object£©¡£

Àý£º±ÈÈçÑÕÉ«ÐÅÏ¢£¬ÎÒÃÇÖ»ÐèÒªÖªµÀ{¡°name¡±:¡°ºÚÉ«¡±£¬¡±css¡±:¡°#000000¡±}ÕâÑùµÄÖµÐÅÏ¢¾ÍÄܹ»Âú×ãÒªÇóÁË£¬Õâ±ÜÃâÁËÎÒÃǶԱêʶ׷×Ù´øÀ´µÄϵͳ¸´ÔÓÐÔ¡£

Öµ¶ÔÏóºÜÖØÒª£¬ÔÚϰ¹ßÁËʹÓÃÊý¾Ý¿âµÄÊý¾Ý½¨Ä£ºó£¬ºÜÈÝÒ×½«ËùÓжÔÏó¿´×÷ʵÌ塣ʹÓÃÖµ¶ÔÏ󣬿ÉÒÔ¸üºÃµØ×öϵͳÓÅ»¯¡¢¾«¼òÉè¼Æ¡£

Ëü¾ßÓв»±äÐÔ¡¢ÏàµÈÐԺͿÉÌæ»»ÐÔ¡£

ÔÚʵ¼ùÖУ¬ÐèÒª±£Ö¤Öµ¶ÔÏó´´½¨ºó¾Í²»Äܱ»Ð޸쬼´²»ÔÊÐíÍⲿÔÙÐÞ¸ÄÆäÊôÐÔ¡£ÔÚ²»Í¬ÉÏÏÂÎÉʱ£¬»á³öÏÖÄ£Ð͸ÅÄîµÄ¹«Óã¬ÈçÉÌÆ·Ä£ÐÍ»á´æÔÚÓÚµçÉ̵ĸ÷¸öÉÏÏÂÎÄÖС£ÔÚ¶©µ¥ÉÏÏÂÎÄÖÐÈç¹ûÄãÖ»¹Ø×¢Ïµ¥Ê±ÉÌÆ·ÐÅÏ¢¿ìÕÕ£¬ÄÇô½«ÉÌÆ·¶ÔÏóÊÓΪֵ¶ÔÏóÊǺܺõÄÑ¡Ôñ¡£

¾ÛºÏ¸ù

Aggregate(¾ÛºÏ£©ÊÇÒ»×éÏà¹Ø¶ÔÏóµÄ¼¯ºÏ£¬×÷Ϊһ¸öÕûÌå±»Íâ½ç·ÃÎÊ£¬¾ÛºÏ¸ù£¨Aggregate Root£©ÊÇÕâ¸ö¾ÛºÏµÄ¸ù½Úµã¡£

¾ÛºÏÊÇÒ»¸ö·Ç³£ÖØÒªµÄ¸ÅÄºËÐÄÁìÓòÍùÍù¶¼ÐèÒªÓþۺÏÀ´±í´ï¡£Æä´Î£¬¾ÛºÏÔÚ¼¼ÊõÉÏÓзdz£¸ßµÄ¼ÛÖµ£¬¿ÉÒÔÖ¸µ¼ÏêϸÉè¼Æ¡£

¾ÛºÏÓɸùʵÌ壬ֵ¶ÔÏóºÍʵÌå×é³É¡£

ÈçºÎ´´½¨ºÃµÄ¾ÛºÏ£¿

±ß½çÄÚµÄÄÚÈݾßÓÐÒ»ÖÂÐÔ£ºÔÚÒ»¸öÊÂÎñÖÐÖ»ÐÞ¸ÄÒ»¸ö¾ÛºÏʵÀý¡£Èç¹ûÄã·¢Ïֱ߽çÄÚºÜÄѽÓÊÜǿһÖ£¬²»¹ÜÊdzöÓÚÐÔÄÜ»ò²úÆ·ÐèÇóµÄ¿¼ÂÇ£¬Ó¦¸Ã¿¼ÂǰþÀë³ö¶ÀÁ¢µÄ¾ÛºÏ£¬²ÉÓÃ×îÖÕÒ»Öµķ½Ê½¡£

Éè¼ÆÐ¡¾ÛºÏ£º´ó²¿·ÖµÄ¾ÛºÏ¶¼¿ÉÒÔÖ»°üº¬¸ùʵÌ壬¶øÎÞÐè°üº¬ÆäËûʵÌå¡£¼´Ê¹Ò»¶¨Òª°üº¬£¬¿ÉÒÔ¿¼Âǽ«Æä´´½¨ÎªÖµ¶ÔÏó¡£

ͨ¹ýΨһ±êʶÀ´ÒýÓÃÆäËû¾ÛºÏ»òʵÌ壺µ±´æÔÚ¶ÔÏóÖ®¼äµÄ¹ØÁªÊ±£¬½¨ÒéÒýÓÃÆäΨһ±êʶ¶ø·ÇÒýÓÃÆäÕûÌå¶ÔÏó¡£Èç¹ûÊÇÍⲿÉÏÏÂÎÄÖеÄʵÌ壬ÒýÓÃÆäΨһ±êʶ»ò½«ÐèÒªµÄÊôÐÔ¹¹ÔìÖµ¶ÔÏó¡£ Èç¹û¾ÛºÏ´´½¨¸´ÔÓ£¬ÍƼöʹÓù¤³§·½·¨À´ÆÁ±ÎÄÚ²¿¸´ÔӵĴ´½¨Âß¼­¡£

¾ÛºÏÄÚ²¿¶à¸ö×é³É¶ÔÏóµÄ¹ØÏµ¿ÉÒÔÓÃÀ´Ö¸µ¼Êý¾Ý¿â´´½¨£¬µ«²»¿É±ÜÃâ´æÔÚÒ»¶¨µÄ¿¹×è¡£Èç¾ÛºÏÖдæÔÚList<Öµ¶ÔÏó>£¬ÄÇôÔÚÊý¾Ý¿âÖн¨Á¢1:NµÄ¹ØÁªÐèÒª½«Öµ¶ÔÏóµ¥¶À½¨±í£¬´ËʱÊÇÓÐidµÄ£¬½¨Òé²»Òª½«¸Ãid±©Â¶µ½×ÊÔ´¿âÍⲿ£¬¶ÔÍâÒþ±Î¡£

ÁìÓò·þÎñ

Ò»Ð©ÖØÒªµÄÁìÓòÐÐΪ»ò²Ù×÷£¬¿ÉÒÔ¹éÀàΪÁìÓò·þÎñ¡£Ëü¼È²»ÊÇʵÌ壬Ҳ²»ÊÇÖµ¶ÔÏóµÄ·¶³ë¡£

µ±ÎÒÃDzÉÓÃÁË΢·þÎñ¼Ü¹¹·ç¸ñ£¬Ò»ÇÐÁìÓòÂß¼­µÄ¶ÔÍⱩ¶¾ùÐèҪͨ¹ýÁìÓò·þÎñÀ´½øÐС£ÈçÔ­±¾Óɾۺϸù±©Â¶µÄÒµÎñÂß¼­Ò²ÐèÒªÒÀÍÐÓÚÁìÓò·þÎñ¡£

ÁìÓòʼþ

ÁìÓòʼþÊǶÔÁìÓòÄÚ·¢ÉúµÄ»î¶¯½øÐеĽ¨Ä£¡£

³é½±Æ½Ì¨µÄºËÐÄÉÏÏÂÎÄÊdz齱ÉÏÏÂÎÄ£¬½ÓÏÂÀ´½éÉÜÏÂÎÒÃǶԳ齱ÉÏÏÂÎĵĽ¨Ä£¡£

³é½±ÉÏÏÂÎÄ

Ôڳ齱ÉÏÏÂÎÄÖУ¬ÎÒÃÇͨ¹ý³é½±(DrawLottery)Õâ¸ö¾ÛºÏ¸ùÀ´¿ØÖƳ齱ÐÐΪ£¬¿ÉÒÔ¿´µ½£¬Ò»¸ö³é½±°üÀ¨Á˳齱ID£¨LotteryId£©ÒÔ¼°¶à¸ö½±³Ø£¨AwardPool£©£¬¶øÒ»¸ö½±³ØÕë¶ÔÒ»¸öÌØ¶¨µÄÓû§ÈºÌ壨UserGroup£©ÉèÖÃÁ˶à¸ö½±Æ·£¨Award£©¡£

ÁíÍ⣬Ôڳ齱ÁìÓòÖУ¬ÎÒÃÇ»¹»áʹÓó齱½á¹û£¨SendResult£©×÷ΪÊä³öÐÅÏ¢£¬Ê¹ÓÃÓû§Áì½±¼Ç¼£¨UserLotteryLog£©×÷ΪÁ콱ƾ¾ÝºÍ´æ¸ù¡£

½÷É÷ʹÓÃÖµ¶ÔÏó

ÔÚʵ¼ùÖУ¬ÎÒÃÇ·¢ÏÖËäȻһЩÁìÓò¶ÔÏó·ûºÏÖµ¶ÔÏóµÄ¸ÅÄµ«ÊÇËæ×ÅÒµÎñµÄ±ä¶¯£¬ºÜ¶àÔ­Óе͍Òå»á·¢Éú±ä¸ü£¬Öµ¶ÔÏó¿ÉÄÜÐèÒªÔÚÒµÎñÒâÒå¾ßÓÐΨһ±êʶ£¬¶ø¶ÔÕâÀàÖµ¶ÔÏóµÄÖØ¹¹ÍùÍùÐèÒª½Ï¸ß³É±¾¡£Òò´ËÔÚÌØ¶¨µÄÇé¿öÏ£¬ÎÒÃÇÒ²Òª¸ù¾Ýʵ¼ÊÇé¿öÀ´È¨ºâÁìÓò¶ÔÏóµÄÑ¡ÐÍ¡£

DDD¹¤³ÌʵÏÖ

ÔÚ¶ÔÉÏÏÂÎĽøÐÐϸ»¯ºó£¬ÎÒÃÇ¿ªÊ¼ÔÚ¹¤³ÌÖÐÕæÕýÂ䵨DDD¡£

Ä£¿é

Ä£¿é£¨Module£©ÊÇDDDÖÐÃ÷È·Ìáµ½µÄÒ»ÖÖ¿ØÖÆÏÞ½çÉÏÏÂÎĵÄÊֶΣ¬ÔÚÎÒÃǵŤ³ÌÖУ¬Ò»°ã¾¡Á¿ÓÃÒ»¸öÄ£¿éÀ´±íʾһ¸öÁìÓòµÄÏÞ½çÉÏÏÂÎÄ¡£

Èç´úÂëÖÐËùʾ£¬Ò»°ãµÄ¹¤³ÌÖаüµÄ×éÖ¯·½Ê½Îª{com.¹«Ë¾Ãû.×éÖ¯¼Ü¹¹.ÒµÎñ.ÉÏÏÂÎÄ.*}£¬ÕâÑùµÄ×éÖ¯½á¹¹Äܹ»Ã÷È·µÄ½«Ò»¸öÉÏÏÂÎÄÏÞ¶¨ÔÚ°üµÄÄÚ²¿¡£

import com.company.team.bussiness.lottery.*;//³é½±ÉÏÏÂÎÄ

import com.company.team.bussiness.riskcontrol.*;//·ç¿ØÉÏÏÂÎÄ

import com.company.team.bussiness.counter.*;//¼ÆÊýÉÏÏÂÎÄ

import com.company.team.bussiness.condition.*;//»î¶¯×¼ÈëÉÏÏÂÎÄ

import com.company.team.bussiness.stock.*;//¿â´æÉÏÏÂÎÄ

´úÂëÑÝʾ1 Ä£¿éµÄ×éÖ¯

¶ÔÓÚÄ£¿éÄÚµÄ×éÖ¯½á¹¹£¬Ò»°ãÇé¿öÏÂÎÒÃÇÊǰ´ÕÕÁìÓò¶ÔÏó¡¢ÁìÓò·þÎñ¡¢ÁìÓò×ÊÔ´¿â¡¢·À¸¯²ãµÈ×éÖ¯·½Ê½¶¨ÒåµÄ¡£

import com.company.team.bussiness.lottery.domain.valobj.*;//ÁìÓò¶ÔÏó-Öµ¶ÔÏó

import com.company.team.bussiness.lottery.domain.entity.*;//ÁìÓò¶ÔÏó-ʵÌå

import com.company.team.bussiness.lottery.domain.aggregate.*;//ÁìÓò¶ÔÏó-¾ÛºÏ¸ù

import com.company.team.bussiness.lottery.service.*;//ÁìÓò·þÎñ

import com.company.team.bussiness.lottery.repo.*;//ÁìÓò×ÊÔ´¿â

import com.company.team.bussiness.lottery.facade.*;//ÁìÓò·À¸¯²ã

´úÂëÑÝʾ2 Ä£¿éµÄ×éÖ¯

ÿ¸öÄ£¿éµÄ¾ßÌåʵÏÖ£¬ÎÒÃǽ«ÔÚÏÂÎÄÖÐÕ¹¿ª¡£

ÁìÓò¶ÔÏó

ǰÎÄÌáµ½£¬ÁìÓòÇý¶¯Òª½â¾öµÄÒ»¸öÖØÒªµÄÎÊÌ⣬¾ÍÊǽâ¾ö¶ÔÏóµÄƶѪÎÊÌâ¡£ÕâÀïÎÒÃÇÓÃ֮ǰ¶¨ÒåµÄ³é½±£¨DrawLottery£©¾ÛºÏ¸ùºÍ½±³Ø£¨AwardPool£©Öµ¶ÔÏóÀ´¾ßÌå˵Ã÷¡£

³é½±¾ÛºÏ¸ù³ÖÓÐÁ˳齱»î¶¯µÄidºÍ¸Ã»î¶¯ÏµÄËùÓпÉÓý±³ØÁÐ±í£¬ËüµÄÒ»¸ö×îÖ÷ÒªµÄÁìÓò¹¦ÄܾÍÊǸù¾ÝÒ»¸ö³é½±·¢Éú³¡¾°£¨DrawLotteryContext£©£¬Ñ¡Ôñ³öÒ»¸öÊÊÅäµÄ½±³Ø£¬¼´chooseAwardPool·½·¨¡£

chooseAwardPoolµÄÂß¼­ÊÇÕâÑùµÄ£ºDrawLotteryContext»á´øÓÐÓû§³é½±Ê±µÄ³¡¾°ÐÅÏ¢£¨³é½±µÃ·Ö»ò³é½±Ê±ËùÔڵijÇÊУ©£¬DrawLottery»á¸ù¾ÝÕâ¸ö³¡¾°ÐÅÏ¢£¬Æ¥ÅäÒ»¸ö¿ÉÒÔ¸øÓû§·¢½±µÄAwardPool¡£

package com.company.team.bussiness.lottery.domain.aggregate;
import ...;

public class DrawLottery {
private int lotteryId; //³é½±id
private List<AwardPool> awardPools; //½±³ØÁбí

//getter & setter
public void setLotteryId(int lotteryId) {
if(id<=0){
throw new IllegalArgumentException("·Ç·¨µÄ³é½±id");
}
this.lotteryId = lotteryId;
}

//¸ù¾Ý³é½±Èë²ÎcontextÑ¡Ôñ½±³Ø
public AwardPool chooseAwardPool(DrawLotteryContext context) {
if(context.getMtCityInfo()!=null) {
return chooseAwardPoolByCityInfo(awardPools, context.getMtCityInfo());
} else {
return chooseAwardPoolByScore(awardPools, context.getGameScore());
}
}

//¸ù¾Ý³é½±ËùÔÚ³ÇÊÐÑ¡Ôñ½±³Ø
private AwardPool chooseAwardPoolByCityInfo(List<AwardPool> awardPools, MtCifyInfo cityInfo) {
for(AwardPool awardPool: awardPools) {
if(awardPool.matchedCity(cityInfo.getCityId())) {
return awardPool;
}
}
return null;
}

//¸ù¾Ý³é½±»î¶¯µÃ·ÖÑ¡Ôñ½±³Ø
private AwardPool chooseAwardPoolByScore(List<AwardPool> awardPools, int gameScore) {...}¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª


}

 

´úÂëÑÝʾ3 DrawLottery

ÔÚÆ¥Åäµ½Ò»¸ö¾ßÌåµÄ½±³ØÖ®ºó£¬ÐèҪȷ¶¨×îºó¸øÓû§µÄ½±Æ·ÊÇʲô¡£Õⲿ·ÖµÄÁìÓò¹¦ÄÜÔÚAwardPoolÄÚ¡£

package com.company.team.bussiness.lottery.domain.valobj;

import ...;

public class AwardPool {

private String cityIds;//½±³ØÖ§³ÖµÄ³ÇÊÐ

private String scores;//½±³ØÖ§³ÖµÄµÃ·Ö

private int userGroupType;//½±³ØÆ¥ÅäµÄÓû§ÀàÐÍ

private List<Awrad> awards;//½±³ØÖаüº¬µÄ½±Æ·

//µ±Ç°½±³ØÊÇ·ñÓë³ÇÊÐÆ¥Åä

public boolean matchedCity(int cityId) {...}

//µ±Ç°½±³ØÊÇ·ñÓëÓû§µÃ·ÖÆ¥Åä

public boolean matchedScore(int score) {...}

//¸ù¾Ý¸ÅÂÊÑ¡Ôñ½±³Ø

public Award randomGetAward() {

int sumOfProbablity = 0;

for(Award award: awards) {

sumOfProbability += award.getAwardProbablity();

}

int randomNumber = ThreadLocalRandom.current().nextInt(sumOfProbablity);

range = 0;

for(Award award: awards) {

range += award.getProbablity();

if(randomNumber<range) {

return award;

}

}

return null;

}

}

´úÂëÑÝʾ4 AwardPool

ÓëÒÔÍùµÄ½öÓÐgetter¡¢setterµÄÒµÎñ¶ÔÏó²»Í¬£¬ÁìÓò¶ÔÏó¾ßÓÐÁËÐÐΪ£¬¶ÔÏó¸ü¼Ó·áÂú¡£Í¬Ê±£¬±ÈÆð½«ÕâЩÂß¼­Ð´ÔÚ·þÎñÄÚ£¨ÀýÈç**Service£©£¬ÁìÓò¹¦ÄܵÄÄÚ¾ÛÐÔ¸üÇ¿£¬Ö°Ôð¸ü¼ÓÃ÷È·¡£

×ÊÔ´¿â

ÁìÓò¶ÔÏóÐèÒª×ÊÔ´´æ´¢£¬´æ´¢µÄÊֶοÉÒÔÊǶàÑù»¯µÄ£¬³£¼ûµÄÎÞ·ÇÊÇÊý¾Ý¿â£¬·Ö²¼Ê½»º´æ£¬±¾µØ»º´æµÈ¡£×ÊÔ´¿â£¨Repository£©µÄ×÷Ó㬾ÍÊǶÔÁìÓòµÄ´æ´¢ºÍ·ÃÎʽøÐÐͳһ¹ÜÀíµÄ¶ÔÏó¡£Ôڳ齱ƽ̨ÖУ¬ÎÒÃÇÊÇͨ¹ýÈçϵķ½Ê½×éÖ¯×ÊÔ´¿âµÄ¡£

//Êý¾Ý¿â×ÊÔ´

import com.company.team.bussiness.lottery.repo.dao.AwardPoolDao;//Êý¾Ý¿â·ÃÎʶÔÏó-½±³Ø

import com.company.team.bussiness.lottery.repo.dao.AwardDao;//Êý¾Ý¿â·ÃÎʶÔÏó-½±Æ·

import com.company.team.bussiness.lottery.repo.dao.po.AwardPO;//Êý¾Ý¿â³Ö¾Ã»¯¶ÔÏó-½±Æ·

import com.company.team.bussiness.lottery.repo.dao.po.AwardPoolPO;//Êý¾Ý¿â³Ö¾Ã»¯¶ÔÏó-½±³Ø

import com.company.team.bussiness.lottery.repo.cache.DrawLotteryCacheAccessObj;//·Ö²¼Ê½»º´æ·ÃÎʶÔÏó-³é½±»º´æ·ÃÎÊ

import com.company.team.bussiness.lottery.repo.repository.DrawLotteryRepository;//×ÊÔ´¿â·ÃÎʶÔÏó-³é½±×ÊÔ´¿â

´úÂëÑÝʾ5 Repository×éÖ¯½á¹¹

×ÊÔ´¿â¶ÔÍâµÄÕûÌå·ÃÎÊÓÉRepositoryÌṩ£¬Ëü¾ÛºÏÁ˸÷¸ö×ÊÔ´¿âµÄÊý¾ÝÐÅÏ¢£¬Í¬Ê±Ò²³Ðµ£ÁË×ÊÔ´´æ´¢µÄÂß¼­£¨ÀýÈ绺´æ¸üлúÖÆµÈ£©¡£

Ôڳ齱×ÊÔ´¿âÖУ¬ÎÒÃÇÆÁ±ÎÁ˶Եײ㽱³ØºÍ½±Æ·µÄÖ±½Ó·ÃÎÊ£¬¶øÊǽö¶Ô³é½±µÄ¾ÛºÏ¸ù½øÐÐ×ÊÔ´¹ÜÀí¡£´úÂëʾÀýÖÐչʾÁ˳齱×ÊÔ´»ñÈ¡µÄ·½·¨£¨×î³£¼ûµÄCache Aside Pattern£©¡£

±ÈÆðÒÔÍù½«×ÊÔ´¹ÜÀí·ÅÔÚ·þÎñÖеÄ×ö·¨£¬ÓÉ×ÊÔ´¿â¶Ô×ÊÔ´½øÐйÜÀí£¬Ö°Ôð¸ü¼ÓÃ÷È·£¬´úÂëµÄ¿É¶ÁÐԺͿÉά»¤ÐÔÒ²¸üÇ¿¡£

package com.company.team.bussiness.lottery.repo;

import ...;

@Repository

public class DrawLotteryRepository {

@Autowired

private AwardDao awardDao;

@Autowired

private AwardPoolDao awardPoolDao;

@AutoWired

private DrawLotteryCacheAccessObj drawLotteryCacheAccessObj;

public DrawLottery getDrawLotteryById(int lotteryId) {

DrawLottery drawLottery = drawLotteryCacheAccessObj.get(lotteryId);

if(drawLottery!=null){

return drawLottery;

}

drawLottery = getDrawLotteyFromDB(lotteryId);

drawLotteryCacheAccessObj.add(lotteryId, drawLottery);

return drawLottery;

}

private DrawLottery getDrawLotteryFromDB(int lotteryId) {...}

}

´úÂëÑÝʾ6 DrawLotteryRepository

·À¸¯²ã

Òà³ÆÊÊÅä²ã¡£ÔÚÒ»¸öÉÏÏÂÎÄÖУ¬ÓÐʱÐèÒª¶ÔÍⲿÉÏÏÂÎĽøÐзÃÎÊ£¬Í¨³£»áÒýÈë·À¸¯²ãµÄ¸ÅÄîÀ´¶ÔÍⲿÉÏÏÂÎĵķÃÎʽøÐÐÒ»´ÎתÒå¡£

ÓÐÒÔϼ¸ÖÖÇé¿ö»á¿¼ÂÇÒýÈë·À¸¯²ã£º

ÐèÒª½«ÍⲿÉÏÏÂÎÄÖеÄÄ£ÐÍ·­Òë³É±¾ÉÏÏÂÎÄÀí½âµÄÄ£ÐÍ¡£

²»Í¬ÉÏÏÂÎÄÖ®¼äµÄÍŶÓЭ×÷¹ØÏµ£¬Èç¹ûÊǹ©·îÕß¹ØÏµ£¬½¨ÒéÒýÈë·À¸¯²ã£¬±ÜÃâÍⲿÉÏÏÂÎı仯¶Ô±¾ÉÏÏÂÎĵÄÇÖÊ´¡£

¸Ã·ÃÎʱ¾ÉÏÏÂÎÄʹÓù㷺£¬ÎªÁ˱ÜÃâ¸Ä¶¯Ó°Ï췶Χ¹ý´ó¡£

Èç¹ûÄÚ²¿¶à¸öÉÏÏÂÎĶÔÍⲿÉÏÏÂÎÄÐèÒª·ÃÎÊ£¬ÄÇô¿ÉÒÔ¿¼Âǽ«Æä·Åµ½Í¨ÓÃÉÏÏÂÎÄÖС£

Ôڳ齱ƽ̨ÖУ¬ÎÒÃǶ¨ÒåÁËÓû§³ÇÊÐÐÅÏ¢·À¸¯²ã(UserCityInfoFacade)£¬ÓÃÓÚÍⲿµÄÓû§³ÇÊÐÐÅÏ¢ÉÏÏÂÎÄ£¨Î¢·þÎñ¼Ü¹¹Ï±íÏÖΪÓû§³ÇÊÐÐÅÏ¢·þÎñ£©¡£

ÒÔÓû§ÐÅÏ¢·À¸¯²ã¾ÙÀý£¬ËüÒԳ齱ÇëÇó²ÎÊý(LotteryContext)ΪÈë²Î£¬ÒÔ³ÇÊÐÐÅÏ¢(MtCityInfo)ΪÊä³ö¡£

package com.company.team.bussiness.lottery.facade;

import ...;

@Component

public class UserCityInfoFacade {

@Autowired

private LbsService lbsService;//ÍⲿÓû§³ÇÊÐÐÅÏ¢RPC·þÎñ

public MtCityInfo getMtCityInfo(LotteryContext context) {

LbsReq lbsReq = new LbsReq();

lbsReq.setLat(context.getLat());

lbsReq.setLng(context.getLng());

LbsResponse resp = lbsService.getLbsCityInfo(lbsReq);

return buildMtCifyInfo(resp);

}

private MtCityInfo buildMtCityInfo(LbsResponse resp) {...}

}

´úÂëÑÝʾ7 UserCityInfoFacade

ÁìÓò·þÎñ

ÉÏÎÄÖУ¬ÎÒÃǽ«ÁìÓòÐÐΪ·â×°µ½ÁìÓò¶ÔÏóÖУ¬½«×ÊÔ´¹ÜÀíÐÐΪ·â×°µ½×ÊÔ´¿âÖУ¬½«ÍⲿÉÏÏÂÎĵĽ»»¥ÐÐΪ·â×°µ½·À¸¯²ãÖС£´Ëʱ£¬ÎÒÃÇÔٻعýÍ·À´¿´ÁìÓò·þÎñʱ£¬Äܹ»·¢ÏÖÁìÓò·þÎñ±¾ÉíËù³ÐÔØµÄÖ°ÔðÒ²¾Í¸ü¼ÓÇåÎúÁË£¬¼´¾ÍÊÇͨ¹ý´®ÁªÁìÓò¶ÔÏó¡¢×ÊÔ´¿âºÍ·À¸¯²ãµÈһϵÁÐÁìÓòÄڵĶÔÏóµÄÐÐΪ£¬¶ÔÆäËûÉÏÏÂÎÄÌṩ½»»¥µÄ½Ó¿Ú¡£

ÎÒÃÇÒԳ齱·þÎñΪÀý£¨issueLottery£©£¬¿ÉÒÔ¿´µ½ÔÚÊ¡ÂÔÁËһЩ·ÀÓùÐÔÂß¼­£¨Òì³£´¦Àí£¬¿ÕÖµÅжϵȣ©ºó£¬ÁìÓò·þÎñµÄÂß¼­ÒѾ­×ã¹»ÇåÎúÃ÷ÁË¡£

package com.company.team.bussiness.lottery.service.impl

import ...;

@Service

public class LotteryServiceImpl implements LotteryService {

@Autowired

private DrawLotteryRepository drawLotteryRepo;

@Autowired

private UserCityInfoFacade UserCityInfoFacade;

@Autowired

private AwardSendService awardSendService;

@Autowired

private AwardCounterFacade awardCounterFacade;

@Override

public IssueResponse issueLottery(LotteryContext lotteryContext) {

DrawLottery drawLottery = drawLotteryRepo.getDrawLotteryById(lotteryContext.getLotteryId());//»ñÈ¡³é½±ÅäÖþۺϸù

awardCounterFacade.incrTryCount(lotteryContext);//Ôö¼Ó³é½±¼ÆÊýÐÅÏ¢

AwardPool awardPool = lotteryConfig.chooseAwardPool(bulidDrawLotteryContext(drawLottery, lotteryContext));//Ñ¡Öн±³Ø

Award award = awardPool.randomChooseAward();//Ñ¡Öн±Æ·

return buildIssueResponse(awardSendService.sendAward(award, lotteryContext));//·¢³ö½±Æ·ÊµÌå

}

private IssueResponse buildIssueResponse(AwardSendResponse awardSendResponse) {...}

}

´úÂëÑÝʾ8 LotteryService

Êý¾ÝÁ÷ת

Êý¾ÝÁ÷ת

Ôڳ齱ƽ̨µÄʵ¼ùÖУ¬ÎÒÃǵÄÊý¾ÝÁ÷תÈçÉÏͼËùʾ¡£ Ê×ÏÈÁìÓòµÄ¿ª·Å·þÎñͨ¹ýÐÅÏ¢´«Êä¶ÔÏó£¨DTO£©À´Íê³ÉÓëÍâ½çµÄÊý¾Ý½»»¥£»ÔÚÁìÓòÄÚ²¿£¬ÎÒÃÇͨ¹ýÁìÓò¶ÔÏó£¨DO£©×÷ΪÁìÓòÄÚ²¿µÄÊý¾ÝºÍÐÐÎªÔØÌ壻ÔÚ×ÊÔ´¿âÄÚ²¿£¬ÎÒÃÇÑØÏ®ÁËÔ­ÓеÄÊý¾Ý¿â³Ö¾Ã»¯¶ÔÏó£¨PO£©½øÐÐÊý¾Ý¿â×ÊÔ´µÄ½»»¥¡£Í¬Ê±£¬DTOÓëDOµÄת»»·¢ÉúÔÚÁìÓò·þÎñÄÚ£¬DOÓëPOµÄת»»·¢ÉúÔÚ×ÊÔ´¿âÄÚ¡£

ÓëÒÔÍùµÄÒµÎñ·þÎñÏà±È£¬µ±Ç°µÄ±àÂë¹æ·¶¿ÉÄܶàÔì³ÉÁËÒ»´ÎÊý¾Ýת»»£¬µ«Ã¿ÖÖÊý¾Ý¶ÔÏóÖ°ÔðÃ÷È·£¬Êý¾ÝÁ÷ת¸ü¼ÓÇåÎú¡£

ÉÏÏÂÎÉ

ͨ³£¼¯³ÉÉÏÏÂÎĵÄÊÖ¶ÎÓжàÖÖ£¬³£¼ûµÄÊֶΰüÀ¨¿ª·ÅÁìÓò·þÎñ½Ó¿Ú¡¢¿ª·ÅHTTP·þÎñÒÔ¼°ÏûÏ¢·¢²¼-¶©ÔÄ»úÖÆ¡£

Ôڳ齱ϵͳÖУ¬ÎÒÃÇʹÓõÄÊÇ¿ª·Å·þÎñ½Ó¿Ú½øÐн»»¥µÄ¡£×îÃ÷ÏÔµÄÌåÏÖÊǼÆÊýÉÏÏÂÎÄ£¬Ëü×÷Ϊһ¸öͨÓÃÉÏÏÂÎÄ£¬¶Ô³é½±¡¢·ç¿Ø¡¢»î¶¯×¼ÈëµÈÉÏÏÂÎͼÌṩÁË·ÃÎʽӿڡ£ ͬʱ£¬Èç¹ûÔÚÒ»¸öÉÏÏÂÎĶÔÁíÒ»¸öÉÏÏÂÎĽøÐм¯³Éʱ£¬ÈôÐèÒªÒ»¶¨µÄ¸ôÀëºÍÊÊÅ䣬¿ÉÒÔÒýÈë·À¸¯²ãµÄ¸ÅÄî¡£ÕâÒ»²¿·ÖµÄʾÀý¿ÉÒԲο¼Ç°ÎĵķÀ¸¯²ã´úÂëʾÀý¡£

·ÖÀëÁìÓò

½ÓÏÂÀ´½²½âÔÚʵʩÁìÓòÄ£Ð͵Ĺý³ÌÖУ¬ÈçºÎÓ¦Óõ½ÏµÍ³¼Ü¹¹ÖС£

ÎÒÃDzÉÓõÄ΢·þÎñ¼Ü¹¹·ç¸ñ£¬ÓëVernonÔÚ¡¶ÊµÏÖÁìÓòÇý¶¯Éè¼Æ¡·²¢²»Ì«Ò»Ö£¬¸ü¾ßÌå²îÒì¿ÉÔĶÁËûµÄÊéÌå»á¡£

Èç¹ûÎÒÃÇά»¤Ò»¸ö´Óǰµ½ºóµÄÓ¦ÓÃϵͳ£º

ÏÂͼÖÐÁìÓò·þÎñÊÇʹÓÃ΢·þÎñ¼¼Êõ°þÀ뿪À´£¬¶ÀÁ¢²¿Ê𣬶ÔÍⱩ¶µÄÖ»ÄÜÊÇ·þÎñ½Ó¿Ú£¬ÁìÓò¶ÔÍⱩ¶µÄÒµÎñÂß¼­Ö»ÄÜÒÀÍÐÓÚÁìÓò·þÎñ¡£¶øÔÚVernonÖø×÷ÖУ¬²¢Î´¼Ù¶¨Î¢·þÎñ¼Ü¹¹·ç¸ñ£¬Òò´ËÁìÓò²ã±©Â¶µÄ³ýÁËÁìÓò·þÎñÍ⣬»¹Óоۺϡ¢ÊµÌåºÍÖµ¶ÔÏóµÈ¡£´ËʱµÄÓ¦Ó÷þÎñ²ãÊDZȽϼòµ¥µÄ£¬»ñÈ¡À´×Ô½Ó¿Ú²ãµÄÇëÇó²ÎÊý£¬µ÷¶È¶à¸öÁìÓò·þÎñÒÔʵÏÖ½çÃæ²ã¹¦ÄÜ¡£

DDD-·Ö²ã

Ëæ×ÅÒµÎñ·¢Õ¹£¬ÒµÎñϵͳ¿ìËÙÅòÕÍ£¬ÎÒÃǵÄϵͳÊôÓÚºËÐÄʱ£º

Ó¦Ó÷þÎñËäȻûÓÐÁìÓòÂß¼­£¬µ«Éæ¼°µ½Á˶Զà¸öÁìÓò·þÎñµÄ±àÅÅ¡£µ±ÒµÎñ¹æÄ£ÅÓ´óµ½Ò»¶¨³Ì¶È£¬±àÅű¾Éí¾Í¸»º¬ÁËÒµÎñÂß¼­£¨³ý´ËÖ®Í⣬ӦÓ÷þÎñÔÚÎȶ¨ÐÔ¡¢ÐÔÄÜÉÏËù×öµÄ´ëʩҲϣÍûͳһÆðÀ´£¬¶ø·ÇÉ¢Âä¸÷´¦£©£¬ÄÇô´ËʱӦÓ÷þÎñ¶ÔÓÚÍⲿÀ´ËµÊÇÒ»¸öÁìÓò·þÎñ£¬ÕûÌå¿´ÆðÀ´ÔòÊÇÒ»¸ö¶ÀÁ¢µÄÏÞ½çÉÏÏÂÎÄ¡£

´ËʱӦÓ÷þÎñ¶ÔÄÚ»¹ÊôÓÚÓ¦Ó÷þÎñ£¬¶ÔÍâÒÑÊÇÁìÓò·þÎñµÄ¸ÅÄÐèÒª½«Æä±©Â¶ÎªÎ¢·þÎñ¡£

DDD-ϵͳ¼Ü¹¹Í¼

×¢£º¾ßÌåµÄ¼Ü¹¹Êµ¼ù¿É°´ÕÕÍŶӺÍÒµÎñµÄʵ¼ÊÇé¿öÀ´£¬´Ë´¦½öΪ×÷Õß×ÔÉíµÄÒµÎñʵ¼ù¡£³ý·Ö²ã¼Ü¹¹Í⣬ÈçCQRS¼Ü¹¹Ò²ÊDz»´íµÄÑ¡Ôñ

ÒÔÏÂÊÇÒ»¸öʾÀý¡£ÎÒÃǶ¨ÒåÁ˳齱¡¢»î¶¯×¼Èë¡¢·çÏÕ¿ØÖƵȶà¸öÁìÓò·þÎñ¡£ÔÚ±¾ÏµÍ³ÖУ¬ÎÒÃÇÐèÒª¼¯³É¶à¸öÁìÓò·þÎñ£¬Îª¿Í»§¶ËÌṩһÌ×¹¦ÄÜÍ걸µÄ³é½±Ó¦Ó÷þÎñ¡£Õâ¸öÓ¦Ó÷þÎñµÄ×éÖ¯ÈçÏ£º

package ...;

import ...;

@Service

public class LotteryApplicationService {

@Autowired

private LotteryRiskService riskService;

@Autowired

private LotteryConditionService conditionService;

@Autowired

private LotteryService lotteryService;

//Óû§²ÎÓë³é½±»î¶¯

public Response<PrizeInfo, ErrorData> participateLottery(LotteryContext lotteryContext) {

//УÑéÓû§µÇ¼ÐÅÏ¢

validateLoginInfo(lotteryContext);

//УÑé·ç¿Ø

RiskAccessToken riskToken = riskService.accquire(buildRiskReq(lotteryContext));

...

//»î¶¯×¼Èë¼ì²é

LotteryConditionResult conditionResult = conditionService.checkLotteryCondition(otteryContext.getLotteryId(),lotteryContext.getUserId());

...

//³é½±²¢·µ»Ø½á¹û

IssueResponse issueResponse = lotteryService.issurLottery(lotteryContext);

if(issueResponse!=null && issueResponse.getCode()==IssueResponse.OK) {

return buildSuccessResponse(issueResponse.getPrizeInfo());

} else {

return buildErrorResponse(ResponseCode.ISSUE_LOTTERY_FAIL, ResponseMsg.ISSUE_LOTTERY_FAIL)

}

}

private void validateLoginInfo(LotteryContext lotteryContext){...}

private Response<PrizeInfo, ErrorData> buildErrorResponse (int code, String msg){...}

private Response<PrizeInfo, ErrorData> buildSuccessResponse (PrizeInfo prizeInfo){...}

}

´úÂëÑÝʾ9 LotteryApplicationService

ÔÚ±¾ÎÄÖУ¬ÎÒÃDzÉÓÃÁË·ÖÖεÄ˼Ï룬´Ó³éÏóµ½¾ßÌå²ûÊöÁËDDDÔÚ»¥ÁªÍøÕæÊµÒµÎñϵͳÖеÄʵ¼ù¡£Í¨¹ýÁìÓòÇý¶¯Éè¼ÆÕâ¸öÇ¿´óµÄÎäÆ÷£¬ÎÒÃǽ«ÏµÍ³½â¹¹µÄ¸ü¼ÓºÏÀí¡£

µ«ÖµµÃ×¢ÒâµÄÊÇ£¬Èç¹ûÄãÃæÁÙµÄϵͳºÜ¼òµ¥»òÕß×öһЩSmartUIÖ®À࣬ÄÇôÄã²»Ò»¶¨ÐèÒªDDD¡£¾¡¹Ü±¾ÎÄ¶ÔÆ¶ÑªÄ£ÐÍ¡¢ÑݽøÊ½Éè¼ÆÌá³öÁËЩÐí¿´·¨£¬µ«ËüÃÇÔÚÌØ¶¨·¶Î§ºÍ¾ßÌ峡¾°Ï»á¸ü¸ßЧ¡£¶ÁÕßÐèÒªÕë¶Ô×Ô¼ºµÄʵ¼ÊÇé¿ö£¬×öÒ»¶¨È¡ÉᣬÊʺÏ×Ô¼ºµÄ²ÅÊÇ×îºÃµÄ¡£

±¾ÆªÍ¨¹ýDDDÀ´½²ÊöÈí¼þÉè¼ÆµÄÊõÓëÆ÷£¬±¾ÖÊÊÇΪÁ˸ßÄÚ¾ÛµÍñîºÏ£¬½ô¿¿±¾ÖÊ£¬°´×Ô¼ºµÄÀí½âºÍÍŶÓÇé¿öÀ´Êµ¼ùDDD¼´¿É¡£

ÁíÍ⣬¹ØÓÚDDDÔÚµü´ú¹ý³ÌÖÐÄ£Ð͸¯»¯µÄÏà¹ØÎÊÌ⣬±¾ÎÄÖÐûÓÐÌá¼°£¬½«ÔÚºóÐøµÄÎÄÕÂÖÐÂÛÊö£¬¾´ÇëÆÚ´ý¡£

¼øÓÚ×÷Õß¾­ÑéÓÐÏÞ£¬ÎÒÃǶÔÁìÓòÇý¶¯µÄÀí½âÄÑÃâ»áÓв»×ãÖ®´¦£¬»¶Ó­´ó¼Ò¹²Í¬Ì½ÌÖ£¬¹²Í¬Ìá¸ß¡£

   
2272 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]
 
×îÐÂÎÄÕÂ
iPersonµÄ¹ý³Ì¹Û£ºÒª ¹ý³Ì or ½á¹û
¡°ÒÔÈËΪ±¾¡±µÄ¹¤³ÌÕÜѧ
ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
UML ͼ½â£ºË³Ðòͼ£¨ sequence diagram £©
UML ͼ½â£º¶ÔÏóͼ£¨ class diagram £©
×îпγÌ
»ùÓÚUMLºÍEA½øÐÐϵͳ·ÖÎöÉè¼Æ
UML+EA+ÃæÏò¶ÔÏó·ÖÎöÉè¼Æ
»ùÓÚSysMLºÍEA½øÐÐϵͳÉè¼ÆÓ뽨ģ
UML + ǶÈëʽϵͳ·ÖÎöÉè¼Æ
ÁìÓòÇý¶¯µÄ½¨Ä£ÓëÉè¼Æ
³É¹¦°¸Àý
ijµçÐÅÔËÓª¹©Ó¦ÉÌ Ó¦ÓÃUML½øÐÐÃæÏò¶ÔÏó·ÖÎö
·é»ðͨÐÅ UML½øÐÐÃæÏò¶ÔÏóµÄ·ÖÎöÉè¼Æ
Î÷ÃÅ×Ó UMLÓëǶÈëʽÈí¼þ·ÖÎöÉè¼Æ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ ´Óϵͳµ½Èí¼þµÄ·ÖÎö¡¢Éè¼Æ
ÉîÛÚijÆû³µÆóÒµ Ä£ÐÍÇý¶¯µÄ·ÖÎöÉè¼Æ