±à¼ÍƼö: |
±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬±¾ÎÄÕë¶ÔDDDµÄ¼Ü¹¹Éè¼Æ£¬Í¨¹ý¼Ü¹¹ÊµÀý£¬ÊµÏÖÁËÁìÓòÇý¶¯Éè¼Æ¡£
|
|
1. ¸ÅÊö
DDDΪ¸´ÔÓÈí¼þµÄÉè¼ÆÌṩÁËÖ¸µ¼Ë¼Ï룬Æä½«Ò×·¢Éú±ä»¯µÄÒµÎñºËÐÄÓò·ÅÖÃÔÚÏÞ¶¨ÉÏÏÂÎÄÖУ¬ÔÚÈ·±£ºËÐÄÓòÒ»ÖÂÐÔºÍÄÚ¾ÛÐԵĻù´¡ÉÏ£¬DDD¿ÉÒÔ±»¶àÖÖÓïÑԺͶàÖÖ¼¼Êõ¿ò¼ÜʵÏÖ£¬¾ßÌåµÄ¿ò¼ÜʵÏÖÐèÒª¸ù¾Ýʵ¼ÊµÄÒµÎñ³¡¾°ºÍÐèÇóÀ´Öƶ¨¡£
ºËÐĵÄÖ¸µ¼Ë¼Â·¹éÄÉΪ£º
1.¹Ø×¢µã·ÅÔÚdomainÉÏ£¬½«ÒµÎñÁìÓòÏÞ¶¨ÔÚͬһÉÏÏÂÎÄÖУ¬Ê¶±ðcontext
bounded
2.½µµÍÉÏÏÂÎÄÖ®¼äµÄÒÀÀµ£¬Í¨¹ý¡®¿ª·¢Ö÷»ú·þÎñ¡¯£¨REST·þÎñÊÇÆäÖеÄÒ»ÖÖ£©¡¢¡®ÏûϢģʽ¡¯¡¢¡®Ê¼þÇý¶¯¡¯µÈ¼Ü¹¹·ç¸ñʵÏÖ
3.×ñÑ·Ö²ã¼Ü¹¹Ä£Ê½
2. ¼Ü¹¹·ç¸ñ
Õë¶ÔDDDµÄ¼Ü¹¹Éè¼Æ£¬¡¶ÊµÏÖÁìÓòÇý¶¯Éè¼Æ¡·Ìáµ½Á˼¸Öּܹ¹·ç¸ñ£ºÁù±ßÐμܹ¹¡¢REST¼Ü¹¹¡¢CQRS¡¢Ê¼þÇý¶¯µÈ¡£ÔÚʵ¼ÊʹÓÃÖУ¬Â䵨µÄ¼Ü¹¹²¢·ÇÊÇ´¿´âÆäÖеÄÒ»ÖÖ£¬¶øºÜÓпÉÄÜ»§½«ÉÏÊö¼¸Öּܹ¹·ç¸ñ½áºÏÆðÀ´ÊµÏÖ¡£
´Ë²¿·ÖÄÚÈÝÖ÷ÒªÀ´Ô´ÓÚ¡¶ÊµÏÖÁìÓòÇý¶¯Éè¼Æ¡·µÄµÚ4Õ£¬¼ÓÉÏÁË×Ô¼ºµÄһЩÀí½â¡£
Áù±ßÐμܹ¹£¨¶Ë¿ÚºÍÊÊÅäÆ÷£©
ËùνµÄÁù±ßÐμܹ¹£¬ÆäʵÊÇ·Ö²ã¼Ü¹¹µÄÀ©Õ¹£¬ÔÀ´µÄ·Ö²ã¼Ü¹¹Í¨³£ÊÇÉÏÏ·ֲãµÄ£¬±ÈÈç³£¼ûµÄMVCģʽ£¬ÉϲãÊǶÔÍâµÄ·þÎñ½Ó¿Ú£¬Ï²ãÊǶԽӴ洢²ã»òÕßÊǼ¯³ÉµÚÈý·½·þÎñ£¬ÖвãÊÇÒµÎñÂß¼²ã¡£ÎÒÃÇÌø³ö·Ö²ãµÄ¸ÅÄ»á·¢ÏÖÉÏÃæ²ãºÍÏÂÃæ²ãÆäʵ¶¼ÊǶ˿Ú+ÊÊÅäÆ÷µÄʵÏÖ£¬ÉÏÃæ²ã¿ª·Åhttp/tcp¶Ë¿Ú£¬²ÉÓÃrest/soap/mqÐÒéµÈ¶ÔÍâÌṩ·þÎñ£¬Í¬Ê±Ìṩ¶ÔÓ¦ÐÒéµÄÊÊÅäÆ÷£»Ï²ãÒ²ÊǶ˿Ú+ÊÊÅäÆ÷£¬Ö»²»¹ýÓ¦ÓóÌÐòÕâʱºò±ä³ÉÁ˵÷ÓÃÕߣ¬µÚÈý·½·þÎñ»òÕß´æ´¢²ãÌṩ¶Ë¿ÚºÍ·þÎñ£¬Ó¦ÓóÌÐò±¾ÉíʵÏÖÊÊÅ书ÄÜ¡£
»ùÓÚÉÏÊö˼¿¼£¬½«·Ö²ã½Ó¿ÚÖеÄÉϲãºÍϲãͳһÆðÀ´¾Í±ä³ÉÁËÁù±ßÐμܹ¹£¬»ùÓڶ˿ںÍÊÊÅäÆ÷µÄʵÏÖ£¬Ê¾ÒâͼÈçÏ£º

ÉÏͼÀ´Ô´ÓÚ¡¶ÊµÏÖÁìÓòÇý¶¯Éè¼Æ¡·µÄP111
ÎÒÈÏΪÁù±ßÐμܹ¹²¢·Ç´´ÔìÒ»ÖÖеļܹ¹·ç¸ñ£¬Ö»Êǽ«ÔÀ´µÄ·Ö²ã¼Ü¹¹·ç¸ñÖØÐ½â¶Á£¬Ê¹µÃ¼Ü¹¹¸ü¼Ó¼ò½àͨÓá£Í¬Ê±£¬ÔÚDDDµÄÉè¼ÆË¼ÏëÏ£¬Áù±ßÐμܹ¹·ç¸ñ£¬ÈÃÁìÓòÄ£ÐÍ´¦Óڼܹ¹µÄºËÐÄÇøÓò£¬Èÿª·¢ÈËÔ±½«½¹µã¾Û¼¯µ½ÁìÓò¡£DDDºÍÁù±ßÐμܹ¹ÊÇÌìÈ»ÆõºÏµÄ£¬ÊÇDDDµÄÊ×Ñ¡¼Ü¹¹¡£
REST
REST¡ª¡ª¼´Representational State TransferµÄËõд£¬·Òë¹ýÀ´ÊÇ"±íÏÖ²ã״̬ת»¯"¡£²Î¿¼ÖÁ£ºÀí½âRESTful¼Ü¹¹¡£
RESTful·ç¸ñµÄ¼Ü¹¹½«¡®×ÊÔ´¡¯·ÅÔÚµÚһλ£¬Ã¿¸ö¡®×ÊÔ´¡¯¶¼ÓÐÒ»¸öURIÓëÖ®¶ÔÓ¦£¬¿ÉÒÔ½«¡®×ÊÔ´¡¯¿´×ÅÊÇdddÖеÄʵÌ壻RESTful²ÉÓþßÓÐ×ÔÃèÊö¹¦ÄܵÄÏûϢʵÏÖÎÞ״̬ͨÐÅ£¬Ìá¸ßϵͳµÄ¿ÉÓÃÐÔ£»ÖÁÓÚ¡®×ÊÔ´¡¯µÄÄÄЩÊôÐÔ¿ÉÒÔ¹«¿ª³öÈ¥£¬Õë¶Ô¡®×ÊÔ´¡¯µÄ²Ù×÷£¬RESTfulʹÓÃHTTPÐÒéµÄÒÑÓз½·¨À´ÊµÏÖ£ºGET¡¢PUT¡¢POSTºÍDELETE¡£
ÔÚDDDµÄʵÏÖÖУ¬ÎÒÃÇ¿ÉÒÔ½«¶ÔÍâµÄ·þÎñÉè¼ÆÎªRESTful·ç¸ñµÄ·þÎñ£¬½«ÊµÌå/Öµ¶ÔÏó/ÁìÓò·þÎñ×÷Ϊ'×ÊÔ´'¶ÔÍâÌṩÔöɾ¸Ä²é·þÎñ¡£µ«ÊDz¢²»½¨ÒéÖ±½Ó½«ÊµÌ屩¶ÔÚÍ⣬һÀ´ÊµÌåµÄijЩÒþ˽ÊôÐÔ²¢²»ÄܶÔÍⱩ¶£¬¶þÀ´Ä³Ð©×ÊÔ´»ñÈ¡³¡¾°²¢²»ÊÇÒ»¸öʵÌå¾ÍÄÜÂú×ãµÄ£¬Òò´ËÎÒÃÇÔÚʵ¼Êʵ¼ù¹ý³ÌÖУ¬ÔÚÁìÓòÄ£ÐÍÉÏÔö¼ÓÁËdtoÕâÑùÒ»¸ö½ÇÉ«£¬dto¿ÉÒÔ×éºÏ¶à¸öʵÌå/Öµ¶ÔÏóµÄ×ÊÔ´¶ÔÍⱩ¶¡£
CQRS
CQRS¡ª¡ªCammand-Query Responsibility SegregationµÄËõд¡£·Òë¹ýÀ´¾ÍÊÇ¡°ÃüÁîÓë²éѯְÔð·ÖÀ롱¡£
¼ò¶øÑÔÖ®£¬CQRS¾ÍÊÇÆ½³£´ó¼ÒÔÚ½²µÄ¶Áд·ÖÀ룬ͨ³£¶Áд·ÖÀëµÄÄ¿µÄÊÇΪÁËÌá¸ß²éѯÐÔÄÜ£¬Í¬Ê±´ïµ½¶Á/дµÄ½âñî¡£ÈÃDDDºÍCQRS½áºÏ£¬ÎÒÃÇ¿ÉÒÔ·Ö±ð¶Ô¶ÁºÍд½¨Ä££¬²éѯģÐÍͨ³£ÊÇÒ»Öַǹ淶»¯Êý¾ÝÄ£ÐÍ£¬Ëü²¢²»·´Ó³ÁìÓòÐÐΪ£¬Ö»ÊÇÓÃÓÚÊý¾ÝÏÔʾ£»ÃüÁîÄ£ÐÍÖ´ÐÐÁìÓòÐÐΪ£¬ÇÒÔÚÁìÓòÐÐΪִÐÐÍê³Éºó£¬Ïë°ì·¨Í¨Öªµ½²éѯģÐÍ¡£
ÄÇôÃüÁîÄ£ÐÍÈçºÎ֪ͨµ½²éѯģÐÍÄØ£¿ Èç¹û²éѯģÐͺÍÁìÓòÄ£Ð͹²ÏíÊý¾ÝÔ´£¬Ôò¿ÉÒÔʡȴÕâÒ»²½£»Èç¹ûûÓй²ÓÃÊý¾ÝÔ´£¬Ôò¿ÉÒÔ½èÖúÓÚ¡®ÏûϢģʽ¡¯£¨Messaging
Patterns£©Í¨Öªµ½²éѯģÐÍ£¬´Ó¶ø´ïµ½×îÖÕÒ»ÖÂÐÔ£¨Eventual Consistency£©¡£
MartinÔÚblogÖÐÖ¸³ö£ºCQRSÊÊÓÃÓÚ¼«ÉÙÊý¸´ÔÓµÄÒµÎñÁìÓò£¬Èç¹û²»ÊǺÜÊʺϷ´¶ø»áÔö¼Ó¸´ÔÓ¶È£»ÁíÒ»¸öÊÊÓ󡾰Ϊ»ñÈ¡¸ßÐÔÄܵķþÎñ¡£

ͼƬÀ´Ô´ÓÚMartin FowlerµÄblog£¬Í¼ÖбíÊöµÄ²éѯģÐͺÍÃüÁîÄ£Ð͹²ÓÃÊý¾ÝÔ´¡£
¹ØÓÚCQRSµÄÌÖÂÛ¿ÉÒԲο¼Martin´óÊåµÄblog£ºCQRS£¬ÒÔ¼°£ºCQRS, Task Based
UIs, Event Sourcing agh!
ʼþÇý¶¯
ÕâÒ»¼Ü¹¹·ç¸ñÔÚʵ¼ÊÏîÄ¿Öв¢Î´Ê¹Ó㬲»×ö¹ý¶à²ûÊö£¬¸ÐÐËȤµÄͬѧ×ÔÐÐÑо¿¡£
»Øµ½¶¥²¿
3. ¼Ü¹¹ÊµÀý
½áºÏ×î½üÔÚÖØ¹¹µÄÉçÇø·þÎñϵͳ£¨COMMUNITY£©£¬³¢ÊÔʹÓÃÉÏÊöµÄÖ¸µ¼Ë¼ÏëºÍ¼Ü¹¹·ç¸ñ£¬Íê³ÉÒ»´Î¼Ü¹¹Éè¼Æ³¢ÊÔ£¬²¢ÏêÊöÈçÏ£º
¼Ü¹¹Í¼

¼Ü¹¹ÏêÊö
COMMUNITYϵͳ¼Ü¹¹ÕûºÏÁËÁù±ßÐμܹ¹¡¢RESTful¼Ü¹¹·ç¸ñ¡¢CQRS¼Ü¹¹·ç¸ñÈýÖּܹ¹·ç¸ñ£¬²¢×ñѾµäµÄ·Ö²ã¼Ü¹¹Ë¼Ïë¡£
1¡¢ÔÚ×ñÑ·Ö²ã¼Ü¹¹Ë¼ÏëµÄ»ù´¡ÉÏ£¬ÒýÈëÁËÁù±ßÐμܹ¹·ç¸ñ£¬¶ÔÄÚ¶ÔÍâ¾ùͨ¹ýÊÊÅäÆ÷+¶Ë¿ÚµÄ·½Ê½³ÊÏÖ£º
ÃæÏòÓû§²à£¬Ìṩhttp¶Ë¿Ú£¬²¢Ê¹ÓÃSpringMVC¿ò¼ÜµÄRequestMapping¡¢ControllerµÈ×é¼þʵÏÖ¶Ôhttp
ÇëÇóµÄ½âÎö£¬×ª»¯ÎªApplication²ã¿Éʶ±ðµÄÒµÎñdto¶ÔÏó£¬ÕâÀïµÄController+RequestMapping±ãÆð×ÅÊÊÅäÆ÷µÄ×÷Óã»
ÃæÏòµÚÈý·½·þÎñ£¬Í¨¹ýhttpclientºÍtcpclientµÄÊÊÅ䣬¿ÉÒÔ¶Ô½Ó¶àÖÖÐÒéµÄµÚÈý·½·þÎñ¶Ë¿Ú£»
ÃæÏò´æ´¢²ã£¬Í¨¹ýmongoclientµÄÊÊÅ䣬·ÃÎÊmongodb£»Í¨¹ýmybatisµÄÊÊÅ䣬·ÃÎÊoracle£»Í¨¹ýredisclientµÄÊÊÅ䣬·ÃÎÊredis£»
ÃæÏòÏûÏ¢Öмä¼þ£¬Í¨¹ýmqclientµÄÊÊÅ䣬·½ÎªrabbitMQ£»
2¡¢ÊµÏÖÁËRESTful¼Ü¹¹·ç¸ñ£¬Í¨¹ýRESTful·ç¸ñµÄ½Ó¿ÚÆõÔ¼¶ÔÍâÌṩÖ÷»ú¿ª·Å·þÎñ¡£½èÖúSpringMVCʵÏÖ¡£
3¡¢ÊµÏÖÁËCQRS¼Ü¹¹·ç¸ñ£º
orcale×÷ΪÃüÁîÄ£ÐÍ´æ´¢´æÔÚ£¬²¢ÅäÒÔTransactionÊÂÎñ¹ÜÀí¡£Ö÷Òª´æ´¢Ìû×Ó¡¢ÆÀÂÛ¡¢»°Ì⡢Ȧ×Ó¡¢¹Ø×¢µÈʵÌåÐÅÏ¢£»
Mongodb×÷Ϊ²éѯģÐÍ´æ´¢´æÔÚ£¬´æ´¢¸öÈ˶¯Ì¬¡¢ÉçÇø¶¯Ì¬µÈ·Ç½á¹¹»¯Êý¾Ý£»
redisͬÑù×÷Ϊ²éѯģÐÍ´æ´¢´æÔÚ£¬´æ´¢Óû§¸öÈËÐÅÏ¢¡¢ÈÈÃÅÆÀÂÛ¡¢ÈÈÃÅÌû×Ó¡¢ÈÈÃÅ»°Ìâ¡¢Óû§µãÔÞÐÅÏ¢µÈ£»
Application²ã·ÖΪQueryServiceºÍCommandServiceÁ½´óÀàÓ¦Ó÷þÎñ£¬·Ö±ð×éºÏ²éѯģÐͺÍÃüÁîÄ£ÐÍ£»
ʹÓÃrabbitMQ×÷ΪÏûÏ¢Öмä¼þ£¬CommandServiceÔÚÍê³ÉÃüÁîÄ£Ð͵Äά»¤ºó£¬Éú²úʼþÏûϢдÈërabbitMQ£¬QueryService×÷ΪÏû·ÑÕß´ÓrabbitMQ¶ÁȡʼþÏûÏ¢£¬¸üвéѯģÐÍ£»
²éѯģÐͺÍÃüÁîÄ£Ðͼ«Æä¶ÔÓ¦µÄapplication service¿ÉÒÔ¶ÀÁ¢²¿Ê𣬶ÀÁ¢À©Õ¹¡£
4¡¢×ñÑ»ù±¾µÄ·Ö²ã¼Ü¹¹·ç¸ñ¡£
User Interface ¡ª¡ª Óû§½Ó¿Ú²ã¡£¶ÔÍâÌṩ¸÷ÖÖÐÒéÐÎʽµÄ·þÎñ£¬²¢ÌṩValidation²ÎÊýУÑ飬authenticateȨÏÞÈÏÖ¤£¬ÒµÎñʵÌå×é×°Æ÷AssemblerµÈ¡£Í¼ÖбêÂÌ×é¼þ¡£
Application ¡ª¡ª Ó¦Ó÷þÎñ²ã¡£×éºÏ¶à¸öÒµÎñʵÌå¡¢»ù´¡ÉèÊ©²ãµÄ¸÷ÖÖ×é¼þÍê³ÉÒµÎñ·þÎñ¡£Í¼ÖÐ±ê»Æ²¿·Ö¡£
Domain ¡ª¡ª ÒµÎñÁìÓò²ã¡£DDD¸ÅÄîÖеĺËÐÄÒµÎñ²ã£¬·â×°ËùÓÐÒµÎñÂß¼£¬°üº¬entity¡¢value
object¡¢domain service¡¢domain eventµÈ¡£Í¼ÖбêÀ¶²¿·Ö¡£
Infrastructure ¡ª¡ª »ù´¡ÉèÊ©²ã¡£Ìṩ¹«¹²×é¼þ£¬È磺Logging¡¢Trascation¡¢HttpClientµÈ¡£Í¼Öбê»Ò²¿·Ö¡£ |