| ±à¼ÍƼö: |
±¾ÎÄÀ´×Ôoschina£¬ÎÄÕÂÖ÷Òª½éÉÜÁ˽éÉÜÁË΢·þÎñÉè¼Æ»ù´¡»ò¼Ü¹¹Ä£ÐÍ£ºÁìÓòÇý¶¯Éè¼ÆºÍÁ¢·½ÌåÄ£Ð͵ÈÏà¹ØÄÚÈÝ¡£
|
|
±³¾°
΢·þÎñÏÖÔÚ¿ÉÒÔ˵ÊÇÈí¼þÑз¢ÁìÓòÎÞÈ˲»ÌáµÄ»°Ì⣬Ȼ¶øÒµ½çÁ÷ÐеĶԱȶàÊý¶¼ÊÇËùνµÄMonolithic(µ¥ÌåÓ¦ÓÃ)£¬¶ø´óÁ¿µÄϵͳÔÚÊ®¼¸Äêǰ¶¼ÒѾÊÇÒÔSOA(ÃæÏò·þÎñ¼Ü¹¹)Ϊ»ù´¡µÄ·Ö²¼Ê½ÏµÍ³ÁË£¬ÄÇô΢·þÎñ×÷Ϊеļܹ¹±ê×¼ÓëSOAÓÐʲô²îÒìµãÄØ£¿Æä±¾ÖÊÇø±ðÔÚÓÚÉè¼ÆÔÀí£¬Î¢·þÎñÊÇÈ¥ÖÐÐÄ»¯Éè¼Æ£¬SOAÊÇ¡¸¼¯³É¡¹ÐγÉÖÐÐÄÉè¼Æ£»

ÁíÍ⣬±ÊÕßÈÏΪÒÔϼ¸µã²¢²»ÊÇ΢·þÎñºÍSOAµÄÇø±ðµã£º
CI/CD£º³ÖÐø¼¯³É¡¢³ÖÐø²¿Êð±¾ÉíÓëÃô½Ý¡¢DevOpsÊǽ»Ö¯ÔÚÒ»ÆðµÄ£¬CI\CD¸üÇãÏòÓÚÈí¼þ¹¤³ÌµÄÁìÓò£¬Óë΢·þÎñÎ޹أ»
»ùÓÚÈÝÆ÷»¹ÊÇÐéÄâ»ú£ºDocker¡¢ÐéÄâ»ú¡¢ÎïÀí»úµÈÊÇÎïÀí½éÖʵÄÒ»ÖÖʵÏÖ·½Ê½£¬Óë΢·þÎñÎ޹أ»
΢·þÎñÖܱßÉú̬£º±ÈÈçÈÕ־ƽ̨¡¢µ÷ÓÃÁ´ÏµÍ³£¿¸ü¶àµÄÊÇÑз¢±¾Éí¶ÔÓÚЧÂÊÌá¸ßµÄ×ÔÇýÁ¦£¬¶øÓëʹÓúÎÖּܹ¹·½Ê½Î޹أ»
ͨѶÐÒ飺΢·þÎñµÄÍÆ¼öͨѶÐÒéÊÇRESTful£¬¶ø´«Í³µÄSOAÊÇSOAP¡£²»¹ý»ùÓÚÇáÁ¿¼¶µÄRPC¿ò¼ÜDubbo¡¢Thrift¡¢gRPCÀ´ÊµÏÖ΢·þÎñÒ²ºÜ¶à£»ÔÚSpring
CloudÖÐÒ²ÓÐFeign¿ò¼Ü½«±ê×¼RESTfulתΪ´úÂëµÄAPIÕâÖÖ·ÂRPCµÄÐÐΪ£¬ÕâЩͨѶÐÒé²»ÊÇÇø·Ö΢·þÎñ¼Ü¹¹ºÍSOA¼Ü¹¹µÄºËÐIJî±ð£»
µ±È»£¬Èí¼þ¹¤³Ì(DevOps)¡¢»ù´¡ÉèÊ©(ÈÝÆ÷»¯)¡¢Èí¼þ¿ª·¢Ä£Ê½(Ãô½Ý¿ª·¢)µÄ±ä¸ïÓÐÀûµÄÍÆ½øÁË΢·þÎñ¼Ü¹¹µÄ´óÐÐÆäµÀ¡£¶øÎ¢·þÎñ¼Ü¹¹ÊÇÒ»Öּܹ¹·ç¸ñ¡¢¼Ü¹¹ÀíÄÆäÖеġ¸Î¢¡¹¸üÌåÏÖÁËËüµÄ¾«ËèÔÚÇз֡£ÔÚʵ¼Ê΢·þÎñµÄÂ䵨¹ý³ÌÖÐÖ¤Ã÷£¬Èç¹ûÇзÖÊÇ´íÎóµÄ£¬ÄãµÃ²»µ½Î¢·þÎñ³ÐŵµÄ¡¸µÍñîºÏ¡¢×ÔÖΡ¢Ò×ά»¤¡¹Ö®ÀàµÄÓÅÊÆ£¬²¢ÇÒ»¹»á±Èµ¥Ìå¼Ü¹¹ÓµÓиü¶àµÄÂé·³¡£ÄÇôÈçºÎÇзÖÄØ£¿Æäʵ²¢²»ÊÇһЩÐµķ½·¨ÂÛ£¬¶øÊǶ¼Ìá³öºÜ¶àÄêµÄ¼Ü¹¹Éè¼Æ·½·¨£¬Ò²³ÆËüÃÇΪ΢·þÎñÉè¼Æ»ù´¡»ò¼Ü¹¹Ä£ÐÍ£ºÁìÓòÇý¶¯Éè¼ÆºÍÁ¢·½ÌåÄ£ÐÍ¡£
ÁìÓòÇý¶¯Éè¼Æ
2004Ä꣬Eric Evans ·¢±íÁËDomain Driven Design£¨ÁìÓòÇý¶¯Éè¼Æ£¬DDD£©¡£ÁìÓòÇý¶¯Éè¼ÆÒѾÎÊÊÀÊ®¼¸Ä꣬´ÓEric
Evans³ö°æµÄÖø×÷¡¸ÁìÓòÇý¶¯Éè¼Æ¡¹Ò»ÊéÖжÔÁìÓòÇý¶¯×öÁË¿ª´´ÐÔµÄÀíÂÛ²ûÊö£¬ÔÚÈí¼þÉè¼ÆÁìÓòÖУ¬DDD¿ÉÒԳƵÃÉÏÊDz½ÈëĺÄêʱÆÚÁË¡£Òź¶µÄÊÇ£¬¹úÍâÈí¼þȦÏíÓÐÊ¢Óþ²¢ÐÐÖ®ÓÐЧµÄÉè¼Æ·½·¨Ñ§£¬¹úÄÚ´ó¶àÊýµÄ¼¼ÊõÈËԱȴ²¢²»ÁË½â£¬Ò²Î´ÔøÔËÓõ½ÏîĿʵ¼ùÖС£Ö±µ½ÐÐÒµÄÚ´µÆð΢·þÎñµÄÈȷ磬ÈËÃÇËÆºõ²ÅÖØÐ·¢ÏÖÁËÁìÓòÇý¶¯Éè¼ÆµÄ¼ÛÖµ£¬²¢²»ÊÇ΢·þÎñÕü¾ÈÁËÁìÓòÇý¶¯Éè¼Æ£¬ÊÇÒòΪÁìÓòÇý¶¯Éè¼ÆÒ»Ö±ÔÚÍçÇ¿µÄ³É³¤£¬ÆäÉè¼Æ¿ª·ÅµÄÉè¼Æ·½·¨Ìåϵ£¬ËäÈ»´ÓÀ´²»ÔøÔÚ¹úÄÚ´óÐÐÆäµÀ£¬µ«È´·¢»Óמ޴óµÄ¼ÛÖµ¡£±íÃæÉÏ¿´È·ÊµÊÇÒòΪ΢·þÎñ£¬ÁìÓòÇý¶¯Éè¼Æ²ÅÓÖ¿ªÊ¼³öÏÖÔÚ´óÖÚÊÓÒ°Àï¡£
ÁìÓòÇý¶¯Éè¼ÆµÄÒâÒå
µ±È»£¬ÁìÓòÇý¶¯Éè¼Æ²¢·Ç¡¸Òøµ¯¡¹£¬²»ÊÇÄܽâ¾öËùÓÐÒÉÄÑÔÓÖ¢µÄ¡¸Á鵤ÃîÒ©¡¹£¬Ñ§Ï°²¢Ó¦ÓÃËüµÄÒâÒåÔÚÓÚ£º
Ò»Ì×ÍêÕûµÄÄ£ÐÍÇý¶¯µÄÈí¼þÉè¼Æ·½·¨£¬ÓÃÓÚ¼ò»¯Èí¼þÏîÄ¿µÄ¸´ÔÓ¶È£¬ËüÄÜ´ø¸øÄã´ÓÕ½ÂÔÉè¼Æµ½Õ½ÊõÉè¼ÆµÄ¹æ·¶¹ý³Ì£¬Ê¹µÃÄãµÄÉè¼ÆË¼Â·Äܹ»¸ü¼ÓÇåÎú£¬Éè¼Æ¹ý³Ì¸ü¼Ó¹æ·¶£»
Ò»ÖÖ˼ά·½Ê½ºÍ¸ÅÄ¿ÉÒÔÓ¦ÓÃÔÚ´¦Àí¸´ÔÓÒµÎñµÄÈí¼þÏîÄ¿ÖУ¬¼Ó¿ìÏîÄ¿µÄ½»¸¶ËÙ¶È£»
Ò»×éÌáÁ¶³öÀ´µÄÔÔòºÍģʽ£¬¿ÉÒÔ°ïÖú¿ª·¢Õß¿ª·¢ÓÅÑŵÄÈí¼þϵͳ¡¢´Ù½ø¿ª·¢Õ߶Լܹ¹ÓëÄ£Ð͵ľ«ÐÄ´òÄ¥£¬ÓÈÆäÉÆÓÚ´¦Àíϵͳ¼Ü¹¹µÄÑݽøÉè¼Æ¡¢ÓÐÖúÓÚÌá¸ßÍŶӳÉÔ±µÄÃæÏò¶ÔÏóÉè¼ÆÄÜÁ¦Óë¼Ü¹¹Éè¼ÆÄÜÁ¦£»
ÁìÓòÇý¶¯Éè¼ÆÓë΢·þÎñ¼Ü¹¹ÌìÉúÆ¥Å䣬ÎÞÂÛÊÇÔÚÐÂÏîÄ¿ÖÐÉè¼ÆÎ¢·þÎñ¼Ü¹¹£¬»¹Êǽ«ÏµÍ³´Óµ¥Ìå¼Ü¹¹Ñݽøµ½Î¢·þÎñÉè¼Æ£¬¶¼¿ÉÒÔ×ñÑÁìÓòÇý¶¯Éè¼ÆµÄ¼Ü¹¹ÔÔò¡£
µ±È»£¬ÁìÓòÇý¶¯ÄܸøÎÒÃÇ´øÀ´ºÜ¶àÊÕ»ñ£¬µ«Èç¹ûÄãÊÇÊôÓÚÒÔϼ¸ÖÖÇé¿öµÄijÖÖ£¬ÄÇôÄãȷʵ²»ÐèҪѧϰÁìÓòÇý¶¯Éè¼ÆÁË£º
Èç¹ûÄãÊǶÀµ±Ò»ÃæµÄ¼Ü¹¹Ê¦£¬²¢ÄÜÉè¼Æ³öÓÅÑŵÄÈí¼þ¼Ü¹¹
Èç¹ûÄãÊǸßЧ±àÂëµÄ³ÌÐòÔ±£¬²¢Ö»Ïë̤̤ʵʵµÄд´úÂë
Èç¹ûÄãÊÇǰ¶ËµÄÉè¼ÆÈËÔ±£¬²¢·îÐС¸Óû§ÌåÑéÖÁÉÏ¡¹µÄÀíÄî
Èç¹ûÄ㸺ÔðµÄÈí¼þϵͳ²¢²»¸´ÔÓ£¬¶þÈýÈ˱ã¿ÉÇáËÉά»¤
DDDµÄ¹Ø¼ü¸ÅÄî
Ò»¸öÈí¼þϵͳµÄµ®Éú£¬Ò»¶¨ÊÇΪÁ˽â¾öÎÒÃÇÓöµ½µÄij¸öÎÊÌâ¡£±ÈÈçÒ»¼ÒÆóÒµµÄÒ»Ö±²ÉÓÃÏßÏÂÏúÊÛ²úÆ·£¬ºÄ·Ñ´óÁ¿µÄ²ÆÁ¦ºÍÎïÁ¦£¬Ï£Íû¿ÉÒÔÔÚÏßÉÏÏúÊÛ×Ô¼ºµÄ²úÆ·£¬ÓÃÓÚʵÏÖÔÚÏßÏúÊÛÏúÊÛ²úÆ·µÄÄ¿µÄ£¬ÄÇô¾Íµ®ÉúÁËÒ»¸öµçÉÌϵͳ¡£Í¨³£×î³õÉèÁ¢µÄÄ¿±ê»òÒª½â¾öµÄÎÊÌâ¾ÍÊÇÒ»¸öÈí¼þÏîÄ¿µÄ³ö·¢µã£¬Ã÷È·ÎÒÃÇÒª×öʲô¡£±ÈÈçÒ»¸öµçÉÌ¡¢Ò»¸öÂÛ̳¡¢Ò»¸öÖ§¸¶Æ½Ì¨µÈ¡£
ÏÂÎĽ«´ÓÁìÓò¡¢ÎÊÌâÓò¡¢ÁìÓòÄ£ÐÍ¡¢Éè¼Æ¡¢Çý¶¯Õ⼸¸ö´ÊÓïµÄº¬ÒåºÍÁªÏµµÄ½Ç¶ÈÈ¥²ûÊöDDDÊÇÈçºÎÈÚÈëµ½Èí¼þ¿ª·¢µÄ¡£ÒªÀí½âʲôÊÇÁìÓòÇý¶¯Éè¼Æ£¬Ê×ÏÈÒªÀí½âʲôÊÇÁìÓò£¬Ê²Ã´ÊÇÉè¼Æ£¬Ê²Ã´ÊÇÇý¶¯£¬Ê²Ã´Çý¶¯Ê²Ã´¡£
ʲôÊÇÁìÓò/×ÓÁìÓò(Domain/Subdomain)
ÁìÓòÊÇÓëij¸öÌØ¶¨ÎÊÌâÏà¹ØµÄ֪ʶºÍÐÐΪ¡£±ÈÈçÖ§¸¶Æ½Ì¨¾ÍÊôÓÚÌØ¶¨µÄÁìÓò£¬Ö»ÒªÊÇÕâ¸öÁìÓò£¬¶¼»áÓÐÕË»§¡¢»á¼Ç¡¢ÊÕ¿î¡¢¸¶¿î¡¢·ç¿ØµÈºËÐÄ»·½Ú¡£ËùÒÔ£¬Í¬Ò»¸öÁìÓòµÄϵͳ¶¼¾ßÓÐÏàͬµÄºËÐÄÒµÎñ£¬ËûÃÇÒª½â¾öµÄÎÊÌâµÄ±¾ÖÊÊÇÒ»Öµġ£Ò»¸öÁìÓò±¾ÖÊÉÏ¿ÉÒÔÀí½âΪ¾ÍÊÇÒ»¸öÎÊÌâÓò£¬Ö»ÒªÊÇͬһ¸öÁìÓò£¬ÄÇÎÊÌâÓò¾ÍÏàͬ¡£ËùÒÔ£¬Ö»ÒªÎÒÃÇÈ·¶¨ÁËϵͳËùÊôµÄÁìÓò£¬ÄÇÕâ¸öϵͳµÄºËÐÄÒµÎñ£¬¼´Òª½â¾öµÄ¹Ø¼üÎÊÌâ¡¢ÎÊÌâµÄ·¶Î§±ß½ç¾Í»ù±¾È·¶¨ÁË¡£
ÔÚÈÕ³£¿ª·¢ÖУ¬ÎÒÃÇͨ³£»á½«Ò»¸ö´óÐ͵ÄÈí¼þϵͳ²ð·Ö³ÉÈô¸É¸ö×Óϵͳ¡£ÕâÖÖ»®·ÖÓпÉÄÜÊÇ»ùÓڼܹ¹·½ÃæµÄ¿¼ÂÇ£¬Ò²ÓпÉÄÜÊÇ»ùÓÚ»ù´¡ÉèÊ©µÄ¡£ÔÚDDDÖУ¬ÎÒÃǶÔϵͳµÄ»®·ÖÊÇ»ùÓÚÁìÓò(»ùÓÚÒµÎñ)µÄ¡£±ÈÈçÉÏÎÄÌáµ½Ö§¸¶Æ½Ì¨ÊÇÒ»¸öÁìÓò£¬¶øÕË»§¡¢»á¼Ç¡¢ÊÕ¿î¡¢¸¶¿îµÈÔòΪ×ÓÁìÓò¡£Ò»¸öÁìÓòÓÉÖÚ¶à×ÓÁìÓò¾Û¼¯¶øÐγɡ£
µ±È»£¬ÎÊÌâËæÖ®¶øÀ´£º
ÄÄЩ¸ÅÄîÓ¦¸Ã½¨Ä£ÔÚÄÄЩ×ÓϵͳÀïÃæ£¿
ÓÐʱ¿ÉÄܻᷢÏÖÒ»¸öÁìÓò¸ÅÄģÔÚ×ÓϵͳAÖÐÊÇ¿ÉÒԵ쬶ø½¨Ä£ÔÚ×ÓϵͳBÖÐÒ²ºÏÇéºÏÀí¡£
¸÷¸ö×Óϵͳ֮¼äµÄÓ¦¸ÃÈçºÎ¼¯³É£¿
ÓÐÈË¿ÉÄÜ»á˵£¬Õâ²»¼òµ¥µÃ¾ÍÏñ¿Í»§¶Ëµ÷Ó÷þÎñ¶ËÄÇô¼òµ¥Âð£¿ÎÊÌâÔÚÓÚ£¬Á½¸öϵͳ֮¼äµÄ¼¯³ÉÉæ¼°µ½»ù´¡ÉèÊ©ºÍ²»Í¬ÁìÓò¸ÅÄîÔÚÁ½¸öϵͳ֮¼äµÄ·Ò룬ÉÔ²»×¢Ò⣬ÕâЩ¸ÅÄî¾Í»á¶ÔÎÒÃǾ«ÐÄ´´½¨ºÃµÄÁìÓòÄ£ÐÍÔì³ÉÎÛȾ¡£
DDDÖУ¬Óбê×¼·½·¨½â¾öÉÏÊöÎÊÌ⣬¾ÍÊÇ**ÏÞ½çÉÏÏÂÎÄ(Bounded Context)ºÍÉÏÏÂÎÄÓ³Éäͼ¡£**ÔÚÒ»¸öÁìÓò/×ÓÓòÖУ¬ÎÒÃǻᴴ½¨Ò»¸ö¸ÅÄîÉϵÄÁìÓò±ß½ç£¬ÔÚÕâ¸ö±ß½çÖУ¬ÈκÎÁìÓò¶ÔÏó¶¼Ö»±íÊ¾ÌØ¶¨Óڸñ߽çÄÚ²¿µÄÈ·Çк¬Òå¡£ÕâÑùµÄ±ß½ç±ã³ÆÎªÏÞ½çÉÏÏÂÎÄ¡£ÏÞ½çÉÏÏÂÎĺÍÁìÓò¾ßÓÐÒ»¶ÔÒ»µÄ¹ØÏµ¡£´ÓÎïÀí²ãÃæ½²£¬Ò»¸öÏÞ½çÉÏÏÂÎÄ×îÖÕ¿ÉÒÔÊÇÒ»¸öJar/WarÎļþ£¬ÉõÖÁ¿ÉÒÔÊÇÒ»¸öPackageÖеÄËùÓжÔÏó¡£µ«ÊÇ£¬¼¼Êõ±¾Éí²¢²»ÊÇÓÃÀ´½ç·ÖÏÞ½çÉÏÏÂÎÄ¡£

ÉÏͼÒý×Ô¡¶ÊµÏÖÁìÓòÇý¶¯Éè¼Æ¡·¡£Í¨³£Çé¿öÏ£¬Ò»¸öÁìÓòÓÐÇÒÖ»ÓÐÒ»¸öºËÐÄÎÊÌ⣬ÎÒÃdzÆÖ®Îª¸ÃÁìÓòµÄ¡¸ºËÐÄÓò¡¹¡£ÔÚºËÐÄÓò¡¢Í¨ÓÃ×ÓÓò¡¢Ö§³Å×ÓÓòÊáÀíµÄͬʱ£¬»á¶¨Òå³ö×ÓÓòÖеġ¸ÏÞ½çÉÏÏÂÎÄ¡¹¼°Æä¹ØÏµ£¬ÓÃËüÀ´²ûÊö×ÓÓòÖ®¼äµÄ¹ØÏµ¡£½çÏÞÉÏÏÂÎÄ¿ÉÒÔ¼òµ¥Àí½â³ÉÒ»¸ö×Óϵͳ»ò×é¼þÄ£¿é¡£
ʲôÊÇÉè¼Æ(Design)
DDDÖеÄÉè¼ÆÖ÷ÒªÖ¸ÁìÓòÄ£Ð͵ÄÉè¼Æ¡£DDDÊÇÒ»ÖÖ»ùÓÚÄ£ÐÍÇý¶¯¿ª·¢µÄÈí¼þ¿ª·¢Ë¼Ï룬ǿµ÷ÁìÓòÄ£ÐÍÊÇÕû¸öϵͳµÄºËÐÄ£¬ÁìÓòÄ£ÐÍÒ²ÊÇÕû¸öƽ̨µÄºËÐļÛÖµ¡£Ã¿Ò»¸öÁìÓò¶¼ÓÐÒ»¸ö¶ÔÓ¦µÄÁìÓòÄ£ÐÍ£¬ÁìÓòÄ£ÐÍÄܹ»ºÜºÃµÄ½â¾ö¸ºÔðµÄÒµÎñÎÊÌâ¡£ËùÒÔÁìÓòÄ£Ð͵ÄÉè¼ÆºÍ¼Ü¹¹Éè¼ÆÍ¬µÈÖØÒª¡£
ʲôÊÇÇý¶¯(Driven)
DDDÖУ¬×ÜÊÇÒÔÁìÓòΪ±ß½ç£¬·ÖÎöÁìÓòÖеĺËÐÄÎÊÌâ(ºËÐĹØ×¢µã)¡£È»ºóÉè¼Æ¶ÔÓ¦µÄÁìÓòÄ£ÐÍ£¬Í¨¹ýÁìÓòÄ£ÐÍÇý¶¯´úÂëµÄʵÏÖ¡£¶øÊý¾Ý¿âÉè¼Æ¡¢³Ö¾Ã»¯¼¼ÊõÕâЩ¶¼²»ÊÇDDDµÄºËÐÄ£¬ÊôÓÚÍâΧµÄ¶«Î÷¡£ÓëÊý¾Ý¿âÇý¶¯¿ª·¢µÄ˼·ÐγɶԱȣ¬Çý¶¯ÖÐÐèÒª¼ÇסÁ½¸öÔÔò£º
ÁìÓòÇý¶¯ÁìÓòÄ£ÐÍÉè¼Æ
ÁìÓòÄ£ÐÍÇý¶¯´úÂëʵÏÖ
ÁìÓòÇý¶¯Éè¼ÆµÄ×î´ó¼ÛÖµÊÇÈÃÎÒÃǸæ±ð´ÓÃæÏò¹ý³ÌʽµÄ˼Ïë(ÌìÂíÐǿգ¬Ïëµ½ÄÄдµ½ÄÄ)ת»¯Îª»ùÓÚϵͳ»¯µÄÄ£ÐÍÇý¶¯Ë¼Î¬¡£ÎÒÃÇÄÔ²¹Ò»ÏÂÈí¼þ¿ª·¢Öеij£¹æÐÄ·Àú³Ì£º
1¡¢Éè¼Æ±í½á¹¹
2¡¢Ð´´úÂë(´úÂëдµÄºÜÈßÓ࣬²»¹»³éÏó)
3¡¢Î¬»¤´úÂë(ÊÊÓ¦ÒµÎñ±ä»¯)
4¡¢Óöµ½À§ÄÑ(Êý¾Ý½á¹¹Éè¼Æ²»ºÏÀí¡¢´úÂëµ½´¦ÈßÓà¡¢¸ÄBUGÒýÈëÐÂBUG¡¢ÐÂÈË¿´´úÂëºÍÎÞ×ÖÌìÊéÒ»°ã)
5¡¢Óú·¢ÄÑÒÔά»¤£¬¿ªÊ¼Öع¹(ÀíÂÛÉÏÔÚÀÏ»ù´¡Éϸĵļ¼ÊõÕ®Îñ¿°±ÈÖØÐ¿ª·¢)
6¡¢Öع¹Íê³É£¬ÐÂϵͳÉÏÏß(¼æÈÝÀúÊ·Êý¾Ý¡¢Êý¾ÝÇ¨ÒÆ¡¢ÐÂÀÏϵͳ²¢ÐУ¬µÈµÈ³ö·¢µã¿¼ÂÇ£¬Æäʵ±¾ÖÊÉÏÖ»ÊÇ×öÁË´úÂëÖØ¹¹)
7¡¢Öظ´Ö´ÐÐ3-6²½......
DDDµÄ·Ö²ã¼Ü¹¹
ËIJã¼Ü¹¹
Eric EvansÔÚ¡¶ÁìÓòÇý¶¯Éè¼Æ£Èí¼þºËÐĸ´ÔÓÐÔÓ¦¶ÔÖ®µÀ¡·Õâ±¾ÊéÖÐÌá³öÁË´«Í³µÄËIJã¼Ü¹¹Ä£Ê½£¬ÔÚºóÀ´Ñݽø¹ý³ÌÖгöÏÖÁËÎå²ã¼Ü¹¹ºÍÁù²ã¼Ü¹¹£¬£¬ÈçÏÂͼËùʾ£º

User Interface£ºÓû§½çÃæ²ã/չʾ²ã£¬¸ºÔðÓëÓû§½»»¥¡£°üº¬ÏÔʾÐÅÏ¢¡¢½âÊÍÓû§ÃüÁîµÈ£»
Application£ºÓ¦Óò㣬ÓÃÀ´Ðµ÷Óû§Óë¸÷Ó¦ÓÃÒÔ¼°¸÷Ó¦ÓÃÖ®¼äµÄ½»»¥¡£²»°üº¬ÒµÎñÂß¼¡¢²»±£´æÒµÎñ¶ÔÏóµÄ״̬£»
Domain£ºÁìÓò²ã/Ä£ÐͲ㣬¸ºÔð±í´ïÒµÎñ¸ÅÄҵÎñ״̬ÐÅÏ¢ÒÔ¼°ÒµÎñ¹æÔò¡£°üº¬ÁìÓòÄ£ÐÍ¡¢ÁìÓòÐÅÏ¢¡¢ÒµÎñ¶ÔÏóµÄ״̬¡£ÁìÓò²ãÊÇÒµÎñÈí¼þµÄºËÐÄ£»
Infrastructure£º»ù´¡ÉèÊ©²ã£¬ÎªÆäËû¸÷²ãÌṩ¼¼ÊõÄÜÁ¦¡£°üÀ¨ÎªÓ¦Óò㴫µÝÏûÏ¢¡¢ÎªÁìÓò²ãÌṩ³Ö¾Ã»¯»úÖÆ¡¢ÎªÓû§½çÃæ²ã»æÖÆÆÁÄ»×é¼þµÈµÈ¡£»ù´¡ÉèÊ©²ã»¹Äܹ»Í¨¹ý¼Ü¹¹¿ò¼ÜÀ´Ö§³ÖËĸö²ã´Î¼äµÄ½»»¥Ä£Ê½¡£
Áù±ßÐμܹ¹
Ëæ×źóÐøµÄÑݽø£¬³öÏÖÁËÒ»ÖָĽø·Ö²ã¼Ü¹¹µÄ·½·¨£¬¼´Robert C. MartinÌá³öµÄÒÀÀµµ¹ÖÃÔÔò(Dependency
Inversion Principle£¬DIP)¡£Ëüͨ¹ý¸Ä±ä²»Í¬²ãÖ®¼äµÄÒÀÀµ¹ØÏµ´ïµ½¸Ä½øÄ¿µÄ¡£
¸ß²ãÄ£¿é²»Ó¦¸ÃÒÀÀµÓڵײãÄ£¿é£¬Á½Õß¶¼Ó¦¸ÃÒÀÀµÓÚ³éÏó
³éÏó²»Ó¦¸ÃÒÀÀµÓÚϸ½Ú£¬Ï¸½ÚÓ¦¸ÃÒÀÀµÓÚ³éÏó
¸ù¾Ý¸ÃÔÔòµÄ¶¨Ò壬DDD·Ö²ã¼Ü¹¹ÖеĵͲã×é¼þÓ¦¸ÃÒÀÀµÓڸ߲ã×é¼þÌṩµÄ½Ó¿Ú£¬¼´ÎÞÂ۸߲㻹ÊǵͲ㶼ÒÀÀµÓÚ³éÏó£¬Õû¸ö·Ö²ã¼Ü¹¹ºÃÏñ±»ÍÆÆ½ÁË£¬ÔÙÏòÆäÖмÓÈëÁËһЩ¶Ô³ÆÐÔ£¬¾Í³öÏÖÁËÒ»ÖÖ¾ßÓжԳÆÐÔÌØÕ÷µÄÁù±ßÐμܹ¹·ç¸ñ¡£Áù±ßÐμܹ¹ÊÇAlistair
CockburnÔÚ2005ÄêÌá³öµÄ£¬Æä±¾ÖÊÊdz«µ¼²»Í¬µÄ¿Í»§Í¨¹ý¡¸Æ½µÈ¡¹µÄ·½Ê½Óëϵͳ½»»¥£¬Í¨¹ý²»¶ÏµÄÀ©Õ¹ÊÊÅäÆ÷ת»¯³ÉϵͳAPIËùÀí½âµÄ²ÎÊýÀ´´ïµ½Ã¿ÖÖÌØ¶¨µÄÊä³ö£¬¶øÃ¿ÖÖÌØ¶¨µÄÊä³ö¶¼ÓÐÊÊÅäÆ÷Íê³ÉÏàÓ¦µÄת»¯¹¦ÄÜ¡£

¾ÛºÏ£º
Ò»×é¾ßÓÐÄÚ¾Û¹ØÏµµÄÏà¹Ø¶ÔÏóµÄ¼¯ºÏ£»
¨C ÊÇÒ»¸öÐÞ¸ÄÊý¾ÝµÄ×îСÔ×Óµ¥Ôª£»
¨C ¾ÛºÏͨ³£Ê¹ÓÃid·ÃÎÊ£»
ʵÌå(Entity)£º±íʾ¾ßÓÐÉúÃüÖÜÆÚ²¢ÇÒ»áÔÚÆäÉúÃüÖÜÆÚÖз¢Éú¸Ä±äµÄ¶«Î÷¡£º¬ÓÐVO¡¢¾ßÓÐidentityµÄÌØÐÔ£¬Í¨³£¾ßÓÐÉúÃüÖÜÆÚµÄ¸ÅÄî
JPA tag @Entity£»
Öµ¶ÔÏó(Value Object)£º±íʾÆðÃèÊöÐÔ×÷ÓõIJ¢ÇÒ¿ÉÒÔÏà»¥Ìæ»»µÄ¸ÅÄî¡£ÀàËÆÓÚpojo£¬²»¿É±äimmutable£¬¿ÉÔÚ²»Í¬Ä£ÐÍÖд«µÝ£¬Spring
tag @value£»
ÁìÓòʼþ(Domain Event)£ºËùÓеÄÁìÓò¶ÔÏóµÄ¿ç¾ÛºÏ±ä¸üÐèÒªÒÔʼþ·½Ê½½øÐÐ֪ͨºÍ¼Ç¼£¬¾ÛºÏÄÚµÄ×ÃÇ鿼ÂÇ£»
¹¤³§(Factory)£º¸ºÔðËùÓжÔÏóµÄÉú³ÉºÍ×é×°£»
ÁìÓò·þÎñ(Domain Service)£º´¿¼¼Êõ²ãÃæµÄ·þÎñ£¬ÀýÈçÈÕÖ¾£¬»òÕßÊÇ¿ç¾ÛºÏµÄ±àÅÅ·þÎñ£¬Í¨³£ÊÇSpring
Component£»
×ÊÔ´²ã(Repository)£ºÀàËÆÓÚDAO²ã£¬Spring JPA, HibernateÖ®Àà @CRUDRepository£»
·À¸¯²ã£º²¢·ÇÊÇϵͳ¼äµÄÏûÏ¢´«µÝ»úÖÆ£¬ËüµÄÖ°Ôð¸ü¾ßÌåµÄÊÇÖ¸½«Ä³¸öÄ£ÐÍ»òÕ߯õÔ¼ÖеĸÅÄî¶ÔÏó¼°ÆäÐÐΪת»»µ½ÁíÒ»¸öÄ£ÐÍ»òÕ߯õÔ¼ÖУ»
ƶѪģÐÍVS³äѪģÐÍ
¶ÁÍêÉÏÃæµÄÁ½ÖÖ·Ö²ã¼Ü¹¹·½Ê½£¬¿ÉÄܺܶàÈË»áÓÐÒÉÎÊ£¬ÕâЩÊÇʲô£¿ÎªÊ²Ã´ÎÒ֮ǰһֱ¶¼Ã»Ìýµ½¹ýÕâÖÖ·Ö·¨£¿È·ÊµÊÇÕâÑù£¬DDDºÍÃæÏò¶ÔÏó¡¢Éè¼ÆÄ£Ê½µÈµÈÀíÂÛÓÐǧ˿ÍòÂÆµÄÁªÏµ£¬Èç¹û²»ÊìϤOOA¡¢OOD£¬ÄÇôDDD¿ÉÄÜÒ²»áÀí½â²»ÁË¡£ÒòΪÎÒÃǴ󲿷ִӿª·¢ÉúÑÄ¿ªÊ¼Ö®³õ½Ó´¥µÄ¶¼ÊÇ¡¸Action²ã¡¢Service²ã¡¢Dao²ã¡¢DB²ã¡¹ÕâÑùµÄMVC·Ö²ãÀíÂÛ¡£²¢ÇÒÔÚ21ÖÐÉè¼ÆÄ£Ê½ÖУ¬¡¸ÐÐΪÐÍ¡¹µÄÉè¼ÆÄ£Ê½£¬ÎÒÃǼ¸ºõûÓÐʲô»ú»áʹÓ㬵¼ÖÂÕâЩÎÊÌâµÄÔÒòÊÇJ2EE¾µä·Ö²ãµÄ¿ª·¢·½Ê½ÊÇ¡¸Æ¶ÑªÄ£ÐÍ¡¹¡£
Martin Fowler(¶Ô£¬¾ÍÊÇÌá³ö΢·þÎñµÄÄÇλ´óÅ£)Ôø¾Ìá³öÁËÁ½ÖÖ¿ª·¢·½Ê½£¬¼´£º
ÒÔ¡¸Æ¶ÑªÄ£ÐÍ¡¹Îª»ù´¡µÄ¡¸ÊÂÎñ½Å±¾¡¹µÄ¿ª·¢·½Ê½
ÒÔ¡¸³äѪģÐÍ¡¹Îª»ù´¡µÄ¡¸ÁìÓòÇý¶¯¡¹µÄ¿ª·¢·½Ê½
ƶѪģÐÍ
ƶѪģÐÍÊÇÖ¸¶ÔÏóÖ»ÓÃÓÚÔÚ¸÷²ãÖ®¼ä´«ÊäÊý¾ÝʹÓã¬Ö»ÓÐÊý¾Ý×ֶκÍGet/Set·½·¨£¬Ã»ÓÐÂß¼ÔÚ¶ÔÏóÖС£¶ø¡¸ÊÂÎñ½Å±¾¡¹¿ÉÒÔÀí½âΪҵÎñÊÇÓÉÒ»ÌõÌõÔöɾ¸Ä²éµÄSQL×éÖ¯¶ø³É£¬ÊÇÃæÏò¹ý³ÌµÄ±à³Ì¡£
³äѪģÐÍÊÇÃæÏò¶ÔÏóÉè¼ÆµÄ±¾ÖÊ£¬Ò»¸ö¶ÔÏóÊÇÓµÓÐ״̬ºÍÐÐΪµÄ¡£½«´ó¶àÊýÒµÎñÂß¼ºÍ³Ö¾Ã»¯·ÅÔÚÁìÓò¶ÔÏóÖУ¬ÒµÎñÂß¼Ö»ÊÇÍê³É¶ÔÒµÎñÂß¼µÄ·â×°¡¢ÊÂÎñ¡¢È¨ÏÞ¡¢Ð£ÑéµÈµÄ´¦Àí¡£
¾ÙÀý£¬Óû§¹ÜÀíÄ£¿é´ó¸ÅÊÇÕâÑùµÄÁ½ÖÖʵÏÖ£º
// ƶѪģÐÍϵÄʵÏÖ
public class User{
private Integer id;
private String name;
...
// Ê¡ÂÔget/set·½·¨
}
public class UserManager{
public void save(User user){
// ³Ö¾Ã»¯²Ù×÷....
}
}
// ±£´æÓû§µÄ²Ù×÷¿ÉÄÜÊÇÕâÑù
userManager.save(user);
// ³äѪģÐÍϵÄʵÏÖ
public class User{
private Integer id;
private String name;
...
// Ê¡ÂÔget/set·½·¨
public void save(){
// ³Ö¾Ã»¯²Ù×÷....
}
}
// ±£´æÓû§µÄ²Ù×÷¿ÉÄÜÊÇÕâÑù
user.save(); |
Martin Fowler¶¨ÒåµÄ¡¸Æ¶ÑªÄ£ÐÍ¡¹ÊÇ·´Ä£Ê½£¬Ãæ¶Ô¼òµ¥µÄСϵͳÓÃÊÂÎñ½Å±¾·½Ê½¿ª·¢Ã»ÎÊÌ⣻ÉÔ΢´óһЩµÄϵͳʹÓÃÊÂÎñ½Å±¾·½Ê½»áÀ©´óά»¤³É±¾£¬ÒµÎñÂß¼¡¢¸÷ÖÖ״̬ɢ²¼ÔÚ´óÁ¿µÄº¯ÊýÖУ¬ÄÄžÍÊÇÒªÓû§¶ÔÏóÖÐÔö¼ÓÒ»¸ö×ֶΣ¬¿ÉÄܶ¼»áÉæ¼°µ½¼¸¸öÀàµÄµ÷Õû......
Ï£ÍûÁìÓò¶ÔÏóÄܹ»×¼È·µØ±í´ï³öÒµÎñÒâͼ£¬µ«ÊǶàÊýʱºò£¬ÎÒÃÇËù¿´µ½µÄÈ´ÊdzäÂúgetterºÍsetterµÄÁìÓò¶ÔÏ󣬴ËʱµÄÁìÓò¶ÔÏóÒѾ²»ÊÇÁìÓò¶ÔÏóÁË£¬·´Ä£Ê½µÄƶѪ¶ÔÏóÁË¡£ÆäʵÔÚÆ¶ÑªÄ£ÐͺͳäѪģÐÍÄ£ÐÍÖ®Í⣬»¹ÓÐʧѪģÐͺÍÕÍѪģÐÍ£¬µ«ºóÕßÁ½¸ö»ù±¾ÊÇʵ¼Ê¿ª·¢Öв»»áȥʹÓã¬ÒòΪ×ßµÄÊÇÁ½¸ö¼«¶Ë¡£
×ܽá
±¾Îĺê¹Û½Ç¶È½éÉÜÁËÁìÓòÇý¶¯Éè¼Æ£¬ÄÇô΢·þÎñºÍDDDÊÇʲô¹ØÏµÄØ£¿ÆäʵÔÚ2015ÄêµÄÒ»´ÎÑݽ²ÖУ¬DDDµÄÌá³öÕßEric
Evans±í´ïÁ˶Ô΢·þÎñ¼¼ÊõµÄÈȰ®ÓëÖ§³Ö£¬ÈÏΪ΢·þÎñÊÇÈÃDDDÂ䵨µÄºÃ¹¤¾ß¡£ÒòΪDDDºÍ΢·þÎñÆä±¾ÖÊÊǽµµÍÈí¼þÏîÄ¿µÄ¸´ÔÓÐÔ£¬¶øDDDÊÇÒ»ÖÖÉè¼ÆÀíÄî/Éè¼Æ·½·¨£¬DDDÐèÒªÓÐÇ¿ÖÆÐÔµÄÔÔò×ö±£ÕÏ£¬·ñÔò²»Í¬µÄÁìÓò¶ÔÏóÖÕ¾¿»á»ìÔÚÒ»Æð¡£¶øÎ¢·þÎñ±¾ÉíµÄһЩÏÞÖÆ£¬ÒÔ¼°´ó¼Ò¶¼ÄÜÀí½â΢·þÎñµÄʵʩǰÌáºÍÊ×ÒªÌõ¼þ£¬»áÔÚʵÏÖÉϸøDDDÔö¼ÓÁËһЩÔÔòÏÞÖÆ¡£DDDºÍ΢·þÎñµÄ²»Ò»¶¨ÒªÍ¬Ê±Ê¹ÓÃÂ䵨£¬µ«ÊÇÈç¹û½«DDDºÍ΢·þÎñ(Á½¸öÏà²îÊ®ËêµÄÈí¼þÉè¼Æ·½·¨)½áºÏÒ»Æð£¬ÄÇôMartin
FowlerºÍEric EvansÁ½Î»²¼µÀʦÊÇ»áºÜÔÞͬµÄ¡£ |