±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËDDDµÄÊӽǡ¢¸ÅÄî¡¢ÏÖ×´¼°Î¢·þÎñÖеIJãµÈ£¬Ï£Íû¶ÔÄãµÄѧϰÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚ°Ù¶È£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
Domian-driven Design
ÁìÓò-Çý¶¯-Éè¼Æ£¨DDD£©Ìᳫ»ùÓÚ(ÓÃÀýÏà¹ØµÄÏÖʵҵÎñ)½øÐн¨Ä£¡£

1. DDDµÄÊÓ½Ç
DDD½«ÏÖʵÎÊÌâÊÓΪÁìÓò;
DDD½«¶ÀÁ¢µÄÎÊÌâÃèÊöΪÓнçÏÞµÄÉÏÏÂÎÄ(Ò»¸öÓнçÉÏÏÂÎĶÔÓ¦Ò»¸ö΢·þÎñ)£¬²¢Ç¿µ÷ͨÓÃÓïÑÔÌÖÂÛÕâЩÎÊÌâ
2. DDDÌá³öµÄ¸ÅÄî
Ðí¶à¼¼Êõ¸ÅÄîºÍģʽ£¬ÀýÈç³äѪģÐÍ(¶ÔÓ¦ÎÒÃdz£Ð´Æ¶ÑªÄ£ÐÍ)¡¢Öµ¶ÔÏ󡢾ۺϺ;ۺϸù¹æÔò¡£
3. ĿǰʵʩDDDµÄÏÖ×´
ÓÐʱDDD¼¼Êõ¹æÔòºÍģʽ±»ÊÓΪÕϰ/†ªà£¬¶ÔÓÚʵʩDDD·½·¨¶øÑÔ£¬Ñ§Ï°ÇúÏ߱Ƚ϶¸ÇÍ¡£²»ÒªÎªÁËʵʩ¶øÊµÊ©£¬×îÖØÒªµÄÊÇʹÓÃͨÓÃÓïÑÔ±àдÓëÒµÎñÎÊÌâÒ»ÖµÄÁìÓò´úÂë¡£
´ËÍâ½öµ±ÄúҪʵÏÖ¾ßÓи´ÔÓÒµÎñ¹æÔòµÄ΢·þÎñʱ£¬²ÅӦʹÓÃDDD·½·¨£¬ÖîÈçCRUD·þÎñÖ®ÀàµÄ¼òµ¥Ö°Ôð¿ÉÒÔͨ¹ý¸ü¼òµ¥µÄ·½·¨½øÐйÜÀí¡£
DDDģʽ¿ÉÒÔÐÖú»®·Ö΢·þÎñ±ß½ç¡£
ÔÚÒѾȷ¶¨µÄ½çÏÞÉÏÏÂÎÄ£¬Äú¿ÉÒÔΪÁìÓò½¨Ä££ºÊµÌåÄ£ÐÍ¡¢Öµ¶ÔÏóºÍ¾ÛºÏ£¬DDDÓë±ß½çÓйأ¬Î¢·þÎñÒ²Óë±ß½çÓйء£
¾¡Á¿±£³ÖСÐÍ΢·þÎñ
»®·Ö½çÏÞÉÏÏÂÎÄ£¬ÒªÆ½ºâÁ½¸öÄ¿±ê£º
´´½¨¾¡¿ÉÄÜСµÄ΢·þÎñ£¨ÕâÒ»µã²»Ó¦¸Ã³ÉΪÖ÷Òª¶¯Á¦)
Òª±ÜÃâ΢·þÎñÖ®¼ä¹ýÃܵÄͨÐÅ
ÕâÁ½¸öÄ¿±ê¿ÉÄܱ˴Ëì¶Ü£¬Á½Õßͨ¹ýÑݽøµÄ·½Ê½´ïµ½Æ½ºâ£º¾¡¿ÉÄÜ·Ö½âϵͳ£¬Ö±µ½ÔÚÏ´ηֽâʱ¸Ðµ½·þÎñͨÐÅѸËÙÔö¼Ó¡£

DDD΢·þÎñÖеIJã
DDD¶¨ÒåµÄ¶à²ãÊÇΪÁ˹ܿشúÂëµÄ¸´ÔÓÐÔ£¬ ÕâЩ²ãÊÇÂß¼×é¼þ(ÀàËÆ»·»·Ïà¿ÛµÄ³ÝÂÖ)¡£
²»Í¬µÄ²ã£¨ÀýÈçÁìÓòÄ£ÐͲãÓë±íʾ²ãµÈ£©¿ÉÄܾßÓв»Í¬µÄÀàÐÍ£¬´Ëʱ²ã¼ÓÀàÐÍÐèҪת»»¡£
ÀýÈç´ÓÊý¾Ý¿âÖмÓÔØµÄʵÌ壬ÓÐʱºòÐèÒª×öÒ»ÏÂÐÞÕý(½ØÈ¡²¿·ÖÐÅÏ¢¡¢Ôö¼ÓÐÅÏ¢)²ÅÄÜÊÊÅä¿Í»§¶ËUI¡£
ÁìÓòÄ£ÐͲãÖеÄÁìÓòʵÌå²»Ó¦´«²¥µ½Ëü²»ÊôÓ򵀮äËûÇøÓò(Èç±íʾ²ã)
ÖØÒªµÄÊÇÓÐÒ»¸öÓɾۺϸù¿ØÖƵÄÓòÄ£ÐÍ£¬ÒÔÈ·±£Óë¸ÃʵÌå×飨¾ÛºÏ£©Ïà¹ØµÄËùÓв»±äʽºÍ¹æÔò¶¼ÊÇͨ¹ýµ¥¸öÈë¿Úµã»ò£¨¾ÛºÏ¸ù£©Ö´ÐС£

¶©µ¥DDD΢·þÎñÓÐÈý²ã£º
Ó¦ÓóÌÐò²ã Ordering.API
ÁìÓò²ã Ordering.Domain
»ù´¡ÉèÊ©²ã Ordering.Infrastructure
Èý²ãÐγɵÄÀà¿âÓÐÇåÎúÇÒÃ÷È·µÄÒÀÀµ¹ØÏµ
1. The domain model layer
¸ºÔð±í´ïÒµÎñ¸ÅÄî¡¢ÒµÎñ³¡¾°ºÍÒµÎñ¹æÔò¡£ÕâÒ»²ã»á½«¼¼Êõϸ½Ú´«µÝµ½»ù´¡ÉèÊ©²ã£¬ÕâÒ»²ã¿ØÖÆ¡¢·´Ó³ÒµÎñ³¡¾°£¬ÊÇÒµÎñÈí¼þµÄºËÐÄ¡£
ÁìÓòÄ£ÐͲãÊDZí´ïÒµÎñµÄµØ·½£¬ÔÚ±à³ÌÉÏÌåÏÖΪ²¶»ñÊý¾ÝºÍÐÐΪ£¨¾ßÓÐÂß¼·½·¨£©µÄÁìÓòʵÌåµÄÀà¿â
×ñѳ־ÃÐÔÎÞ¸ÐÖªºÍ»ù´¡ÉèÊ©ÎÞ¸ÐÖªÔÔò
ÁìÓòÄ£ÐÍ²ã±ØÐëÍêÈ«ºöÂÔÊý¾Ý³Ö¾ÃÐÔϸ½Ú£¬ÕâЩ³Ö¾ÃÐÔÈÎÎñÓ¦ÓÉ»ù´¡ÉèÊ©²ãÖ´ÐУ¬Òò´Ë£¬´Ë²ã²»Ó¦Ö±½ÓÒÀÀµ»ù´¡ÉèÊ©£¬ÕâÒâζ×ÅÒ»¸öÖØÒª¹æÔòÊÇÁìÓòÄ£ÐÍʵÌåÀàӦΪPOCO¡£ÁìÓòʵÌå²»Ó¦Ö±½ÓÒÀÀµÓÚÈκÎÊý¾Ý·ÃÎÊ»ù´¡¿ò¼Ü£¨EF¡¢NHibernate£©£¬ÀíÏëÇé¿öÏ£¬ÄúµÄÓòʵÌå²»Ó¦¼Ì³Ð×Ô»òʵÏÖÈκλù´¡ÉèÊ©Öж¨ÒåµÄÈκÎÀàÐÍ¡£
´ó¶àÊýÏÖ´úµÄORM¿ò¼Ü£¨ÀýÈçEntity Framework Core£©¶¼Ö§³ÖÕâÖÖ·½·¨£¬Òò´ËÄúµÄÁìÓòÄ£ÐͲ»»áÓë»ù´¡ÉèÊ©ñîºÏ¡£
ÁìÓòÄ£ÐÍÖÐ×ñѳ־ÃÐÔÎÞ¸ÐÖªÔÔòºÜÖØÒª£¬µ«Ò²²»Ó¦ºöÂÔ³Ö¾ÃÐÔÎÊÌâ
Àí½âÎïÀíÊý¾ÝÄ£ÐÍÒÔ¼°ËüÈçºÎÓ³Éäµ½ÄúµÄʵÌå¶ÔÏóÄ£ÐÍÈÔÈ»·Ç³£ÖØÒª£¬·ñÔòÄãµÄÉè¼Æ½«»áÊÇ¿ÕÖÐÂ¥¸ó¡£¶øÇÒ£¬´ó¶àÊýʱºòÄ㽫±¾Ó¦¸Ã²ÉÓùØÏµÊý¾Ý¿âµÄÉè¼ÆÖ±½ÓÇ¨ÒÆµ½
NoSQL»òÃæÏòÎĵµµÄÊý¾Ý¿â£¬ÁìÓòÄ£ÐͲãºÜ¿ÉÄܲ»ÊÊÓ㨻ùÓÚ´æ´¢¼¼ÊõºÍORM¼¼Êõ£¬ÄúµÄʵÌåÄ£ÐÍÈÔÈ»±ØÐë×ñÊØÒ»Ð©Ô¼ÊøÌõ¼þ£©¡£
2.Application Layer
¶¨ÒåÈí¼þÒªÖ´ÐеŤ×÷£¬²¢Òýµ¼£¨¿É±í´ïµÄÁìÓò¶ÔÏ󣩽â¾öÎÊÌâ¡£¸Ã²ã¶Ô¶ÔÒµÎñ¸ºÔð£¬ÓÐʱ»áÓëÆäËûϵͳµÄÓ¦ÓóÌÐò²ã½»»¥¡£¸Ã²ã±£³Ö±¡£º
Ëü²»°üº¬ÒµÎñ¹æÔò»ò֪ʶ£¬¶ø½öе÷ÈÎÎñ²¢½«¹¤×÷ίÍиøÏÂÒ»²ãµÄÓò¶ÔÏóÐ×÷;
ËüûÓз´Ó³ÒµÎñÇé¿öµÄ״̬£¬µ«ÊÇ¿ÉÒÔ¾ßÓз´Ó³Óû§»ò³ÌÐòµÄÈÎÎñ½ø¶ÈµÄ״̬¡£
΢·þÎñµÄÓ¦ÓòãÔÚ.NETÖÐÒ»°ã±íÏÖΪWebAPI£¬webapiʵÏÖ½»»¥¡¢Ô¶³ÌÍøÂçÁ¬½Ó¡¢ÎªUI/Client
appÌṩµÄÍⲿÇëÇóÖÐת¡£ÔÙ´ÎÇ¿µ÷webapi²»Ó¦¸Ã°üº¬ÒµÎñ¹æÔò»òÁìÓò֪ʶ£¨ÓÈÆäÊÇÓÃÓÚÊÂÎñ»ò¸üеÄÁìÓò¹æÔò£©£¬ÕâЩӦ¹éÁìÓòÄ£ÐÍÀà¿âËùÓС£Ó¦ÓòãÖ»ÄÜе÷ÈÎÎñ£¬²»Äܱ£´æ»ò¶¨ÒåÈκÎÓò״̬£¨ÓòÄ£ÐÍ£©£¬Ëü½«ÒµÎñ¹æÔòµÄÖ´ÐÐίÍиøÁìÓòÄ£ÐÍÀà±¾Éí£¨¾ÛºÏ¸ùºÍÓòʵÌ壩£¬Õ⽫×îÖÕ¸üÐÂÕâЩÓòʵÌåÖеÄÊý¾Ý¡£
×ÜÌåÀ´¿´£¬Ó¦ÓòãÊÇΪʵÏÖǰ¶ËÓÃÀýµÄµØ·½¡£
3. The infrastructure layer
»ù´¡ÉèÊ©²ã: ¶¨ÒåÈçºÎ½«×î³õ±£´æÔÚÁìÓòʵÌåÖеÄÊý¾Ý³Ö¾Ã»¯µ½Êý¾Ý¿â»òÕ߯äËû´æ´¢½á¹¹µÄ¹ý³Ì¡£
Ò»¸öʾÀýÊÇʹÓÃEntity Framework Core´úÂëʵÏÖ´æ´¢¿âģʽÀà: ¸Ã´æ´¢¿âģʽÀàʹÓÃDBContext½«Êý¾Ý³Ö¾Ã´æ´¢ÔÚ¹ØÏµÊý¾Ý¿âÖС£
¸ù¾ÝÇ°ÃæÌáµ½µÄ³Ö¾Ã»¯ÎÞ¸ÐÖªºÍ»ù´¡ÉèÊ©ÎÞ¸ÐÖªÔÔò£¬»ù´¡ÉèÊ©²ã²»µÃ¡°ÎÛȾ¡±ÁìÓòÄ£ÐͲ㡣
ÔÙ´ÎÇ¿µ÷£º±ØÐë±£³ÖÁìÓò²ãʵÌå¶Ô»ù´¡ÉèÊ©²ã¿ò¼ÜµÄÎÞ¸Ð֪״̬£¬ ÁìÓòÄ£ÐͲãÀà¿âÓ¦¸ÃÖ»°üº¬ÁìÓò´úÂ룬¶øÖ»ÓÐPOCOʵÌåÀà¿ÉÒÔʵÏÖÈí¼þµÄºËÐÄ£¬²¢ÇÒÓë»ù´¡ÉèÊ©¼¼ÊõÍêÈ«Íѹ³¡£

×ܽá
ÔÚDDDÖУ¬Ó¦ÓòãÒÀÀµÓÚÁìÓòºÍ»ù´¡ÉèÊ©²ã£¬¶ø»ù´¡ÉèÊ©ÒÀÀµÓÚÁìÓò²ã£¬µ«ÊÇÁìÓò²ã²»ÒÀÀµÓÚÈκβ㡣
Ö»ÔÚÁìÓò²ã±àдҵÎñ¹æÔòºÍͨÓõÄÁìÓò֪ʶ£¬¶øÓ¦Óò㸺ÔðÕë¶ÔÈí¼þµÄÄ¿±êÀ´×éºÏ¡¢Ðµ÷ÁìÓò²ãµÄÒµÎñ¹æÔò¡£
ÁìÓò²ãµÄÁìÓòʵÌå¡¢ÖµÀàÐÍ¡¢¾ÛºÏ¸ù·´Ó³ÁËÕæÊµÒµÎñµÄºËÐÄ£¬ÐèÒªÓÃÒ»ÖÖͨÓõÄÓïÑÔÀ´¶¨Ò壬ÕâÑù²»¹ÜÓ¦Óòã¶àô¸´ÔÓ£¬ºËÐÄÁìÓò²ã×Ô¿ùÈ»²»¶¯¡£
ÁìÓò²ã²»ÄÜÖ±½ÓÒÀÀµÓë»ù´¡ÉèÊ©²ã£¬ÏÖ´úORM¿ò¼ÜÒ»°ã¶¼Ìá³ö²Ö´¢Ä£ÐÍÀ´°ïÖúÁìÓò²ãºÍ¼¼ÊõÉèÊ©²ã½âñî¡£

|