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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁìÓòÇý¶¯Éè¼ÆÔÚ»¥ÁªÍøÒµÎñ¿ª·¢ÖеÄʵ¼ù
 
  1900  次浏览      27
 2018-7-23 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôcnblogs£¬½éÉÜÁË¿ª·¢ÖÐÓöµ½´«Í³ÐÐÒµÈí¼þÃæÁÙµÄÎÊÌ⣬ȻºóÔÙ³¢ÊÔÔÚʵ¼ùÖÐÓÃDDDµÄ˼ÏëÀ´½â¾öÕâЩÎÊÌâ¡£

ǰÑÔ

ÖÁÉÙ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£¼òµ¥£¬Éú³ÉÒ»¸öËæ»úÊý£¬Æ¥Åä·ûºÏ¸ÃËæ»úÊýÉú³É¸ÅÂʵĽ±Ïî¼´¿É¡£

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

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

Éè¼Æ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ÌṩÁËÕâÑùµÄ֪ʶÊֶΣ¬ÈÃÎÒÃÇÖªµÀÈçºÎ³éÏó³öÏÞ½çÉÏÏÂÎÄÒÔ¼°ÈçºÎÈ¥·ÖÖΡ£

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

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

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

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

΢·þÎñ¼Ü¹¹¸üÇ¿µ÷´ÓÒµÎñά¶ÈÈ¥×ö·ÖÖÎÀ´Ó¦¶Ôϵͳ¸´ÔÓ¶È£¬¶øDDDÒ²ÊÇͬÑùµÄ×ÅÖØÒµÎñÊӽǡ£

Èç¹ûÁ½ÕßÔÚ×·ÇóµÄÄ¿±ê£¨ÒµÎñά¶È£©´ïµ½ÁËÉÏÏÂÎĵÄͳһ£¬ÄÇôÔÚ¾ßÌå×ö·¨ÉÏÓÐʲôÁªÏµºÍ²»Í¬ÄØ£¿

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

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

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

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

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

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

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

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

ÈçºÎʵ¼ùDDD

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

Ê×ÏÈ¿´Ï³齱ϵͳµÄ´óÖÂÐèÇó£º

ÔËÓª¡ª¡ª¿ÉÒÔÅäÖÃÒ»¸ö³é½±»î¶¯£¬¸Ã»î¶¯ÃæÏòÒ»¸öÌØ¶¨µÄÓû§ÈºÌ壬²¢Õë¶ÔÒ»¸öÓû§ÈºÌå·¢·ÅÒ»Åú²»Í¬ÀàÐ͵Ľ±Æ·£¨ÓÅ»Ýȯ£¬¼¤»îÂ룬ʵÎアƷµÈ£©¡£

Óû§¡ª¡ªÍ¨¹ý»î¶¯Ò³Ãæ²ÎÓ벻ͬÀàÐ͵ij齱»î¶¯¡£

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

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

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

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

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

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

Õ½ÂÔ½¨Ä£

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

ÁìÓò

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

ÏÞ½çÉÏÏÂÎÄ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ÓÉÓÚC¶Ë´æÔÚһЩˢµ¥ÐÐΪ£¬ÎÒÃǸù¾Ý²úÆ·ÐèÇó¶¨ÒåÁË·ç¿ØÉÏÏÂÎÄ£¬ÓÃÓڶԻ½øÐÐ·ç¿Ø¡£

×îºó£¬»î¶¯×¼Èë¡¢·ç¿Ø¡¢³é½±µÈÁìÓò¶¼Éæ¼°µ½Ò»Ð©´ÎÊýµÄÏÞÖÆ£¬Òò´ËÎÒÃǶ¨ÒåÁ˼ÆÊýÉÏÏÂÎÄ¡£

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

ÉÏÏÂÎÄÓ³Éäͼ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ÓÉÓڳ齱£¬·ç¿Ø£¬»î¶¯×¼È룬¿â´æ£¬¼ÆÊýÎå¸öÉÏÏÂÎͼ´¦Ôڳ齱ÁìÓòµÄÄÚ²¿£¬ËùÒÔËüÃÇÖ®¼ä·ûºÏ¡°Ò»ÈÙ¾ãÈÙ£¬Ò»Ëð¾ãË𡱵ĺÏ×÷¹ØÏµ£¨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 . DrawLottery CacheAccessObj ; //·Ö²¼Ê½»º´æ·ÃÎʶÔÏó-³é½±»º´æ·ÃÎÊ
import com.company. team.bussiness .lottery.repo. repository . DrawLottery Repository ; //×ÊÔ´¿â·ÃÎʶÔÏó-³é½±×ÊÔ´¿â

´úÂëÑÝʾ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 (bulidDrawLottery Context ( drawLottery , lotteryContext));//Ñ¡Öн±³Ø
Award award = awardPool.randomChooseAward();//Ñ¡Öн±Æ·
return buildIssueResponse (awardSendService.sendAward(award, lotteryContext )) ;//·¢³ö½±Æ·ÊµÌå
}
private IssueResponse buildIssueResponse ( AwardSend Response awardSendResponse ) {...}
}

´úÂëÑÝʾ8 LotteryService

Êý¾ÝÁ÷ת

Ôڳ齱ƽ̨µÄʵ¼ùÖУ¬ÎÒÃǵÄÊý¾ÝÁ÷תÈçÉÏͼËùʾ¡£

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

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

ÉÏÏÂÎÉ

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

Ôڳ齱ϵͳÖУ¬ÎÒÃÇʹÓõÄÊÇ¿ª·Å·þÎñ½Ó¿Ú½øÐн»»¥µÄ¡£×îÃ÷ÏÔµÄÌåÏÖÊǼÆÊýÉÏÏÂÎÄ£¬Ëü×÷Ϊһ¸öͨÓÃÉÏÏÂÎÄ£¬¶Ô³é½±¡¢·ç¿Ø¡¢»î¶¯×¼ÈëµÈÉÏÏÂÎͼÌṩÁË·ÃÎʽӿڡ£

ͬʱ£¬Èç¹ûÔÚÒ»¸öÉÏÏÂÎĶÔÁíÒ»¸öÉÏÏÂÎĽøÐм¯³Éʱ£¬ÈôÐèÒªÒ»¶¨µÄ¸ôÀëºÍÊÊÅ䣬¿ÉÒÔÒýÈë·À¸¯²ãµÄ¸ÅÄî¡£ÕâÒ»²¿·ÖµÄʾÀý¿ÉÒԲο¼Ç°ÎĵķÀ¸¯²ã´úÂëʾÀý¡£

·ÖÀëÁìÓò

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

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

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

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

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

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

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

×¢£º¾ßÌåµÄ¼Ü¹¹Êµ¼ù¿É°´ÕÕÍŶӺÍÒµÎñµÄʵ¼ÊÇé¿öÀ´£¬´Ë´¦½öΪ×÷Õß×ÔÉíµÄÒµÎñʵ¼ù¡£³ý·Ö²ã¼Ü¹¹Í⣬Èç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 = condition Service .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 lottery Context ){...}
private Response <PrizeInfo, ErrorData> buildErrorResponse (int code , String msg){...}
private Response <PrizeInfo, ErrorData> buildSuccessResponse (PrizeInfo prizeInfo){...}
}

´úÂëÑÝʾ9 LotteryApplicationService

½áÓï

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

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

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

   
1900 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ