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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NETÓ¦Óüܹ¹Éè¼Æ¡ªÓû§¶ËµÄ·À¸¯²ã×÷Óü°Éè¼Æ
 
×÷Õß ÍõÇåÅ࣬»ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-10-13
  2753  次浏览      31
 

1.±³¾°½éÉÜ

Ëæ×ÅÏÖÔ򵀮óÒµÓ¦Óüܹ¹¶¼ÔÚÏò×ÅSOA·½Ïòת±ä£¬Ä¿µÄ¾ÍÊǽ«Ò»¸öÅÓ´óµÄÒµÎñϵͳ°´ÕÕÒµÎñ½øÐл®·Ö£¬²»¹Ü´Ó¹«Ë¾µÄ¹ÜÀíÉÏ¡¢²úÆ·µÄ¿ª·¢ÉÏ£¬ÕâһϵÁÐÁ÷³ÌÀ´¿´£¬¶¼ÊÇÕýÈ·µÄ¡£SOAȷʵ´øÀ´Á˽â¾öÏÖÔÚ´óÐÍÆóÒµ¼¶Ó¦ÓÃϵͳ¿ìËÙÅòÕ͵Ľâ¾ö°ì·¨¡£

µ«ÊDZ¾ÎÄҪ˵µÄÊÇ£¬ÎÒÃǶ¼½«Ä¿¹âתÏòµ½Á˺ó¶Ë£¬Ò²¾ÍÊÇ·þÎñ¶Ë£¬¶ø½«¾«Á¦ºÍʱ¼ä¶¼ÖصãͶÔÚÁ˺ó¶Ë·þÎñµÄ¼Ü¹¹Éè¼ÆÉÏ£¬½¥½¥µÄºöÊÓÁËÏÔʾ¶ËµÄ¼Ü¹¹Éè¼Æ¡£È»¶øÏÔʾ¶ËµÄÂß¼­Ò²Ô½À´Ô½¸´ÔÓ£¬ÏÔʾ¶ËÇᱡµÄ¼Ü¹¹ÆäʵÒѾ­¸¡ÏÖ³öÄÑÒÔÓ¦¸¶ºó¶Ë·þÎñ½Ó¿Ú¿ìËÙÅòÕ͵ÄΣÏÕ£¬·þÎñ½Ó¿Ú¶¼Êǰ´ÕÕÖ¸Êý¼¶Ôö¼Ó£¬»ù±¾ÉÏÿһ¸öеÄÒµÎñÐèÇó¶¼ÊÇÌṩеĽӿڣ¬ÕâûÓÐÎÊÌâ¡£°´ÕÕ·þÎñµÄÉè¼ÆÔ­Ôò£¬·þÎñ½Ó¿Ú¾ÍÓ¦¸ÃÓÐ×ÅÃ÷È·µÄ×÷Ó㬶ø²»Êǰ´ÕÕ´úÂëµÄ˼άÀ´¿¼ÂǽӿڵÄÉè¼Æ¡£

µ«ÊÇÓÉ´Ë´øÀ´µÄÎÊÌâ¾ÍÊÇ×éºÏÕâЩ½Ó¿ÚµÄÏÔʾ¶ËµÄ½á¹¹ÊÇ·ñºÍÕâÖֱ仯ÊÇÒ»Öµģ¬ÊÇ·ñ×öºÃÁËÕâÖֱ仯´øÀ´ÏÔʾ¶ËÂß¼­¸´ÔÓµÄ×¼±¸¡£

¸ù¾ÝÎÒ×Ô¼ºµÄÇ×ÉíÌå»á£¬ÎÒ·¢ÏÖÏÔʾ¶ËµÄ¼Ü¹¹Éè¼Æ²»±»ÖØÊÓ£¬ÕâÀïµÄÖØÊÓ²»ÊÇÀϰåÊÇ·ñÖØÊÓ£¬¶øÊÇÎÒÃÇ¿ª·¢ÈËԱûÓÐÖØÊÓ£¬µ±È»ÕâÀïÅųýʱ¼äÎÊÌâ¡£ÎÒ¹Û²ì¹ýºÜ¶àÓû§½Ó¿ÚÏîÄ¿¼Ü¹¹£¬½á¹¹¼°Æä¼òµ¥£¬Ã»Óзâ×°¡¢Ã»ÓÐÖØÓ㬿´²»µ½ÈκεÄÉè¼ÆÔ­Ôò¡£ÕâÑù¾Í»áµ¼ÖÂÕâЩ´úÂëºÜÄÑËæ×ÅÒµÎñµÄ¿ìËÙÍÆ¶¯ÓÉ·þÎñ½Ó¿Ú´øÀ´µÄ³å»÷£¬ÕâÀﻹÓÐÒ»¸ö×î´óµÄÎÊÌâ¾ÍÊÇ£¬×÷Ϊ³ÌÐòÔ±µÄÎÒÃÇÊÇ·ñÓпìËÙÖØ¹¹µÄÒâʶ£¬ÎÒºÜϲ»¶ÕâÌõ³ÌÐòÔ±Ö°ÒµËØÖÊ¡£Ëü¿ÉÒÔÈÃÎÒÃÇÃô½ÝµÄ¡¢¿ìËٵĸúÉÏÓÉÒµÎñµÄ·¢Õ¹´øÀ´µÄÏîÄ¿½á¹¹µÄ±ä»¯¡£

µü´úÖØ¹¹¶ÔÏîÄ¿ÓÐ×Å΢ÃîµÄ×÷Óã¬Öع¹²»Äܹ»¹ýÔçÒ²²»Äܹ»¹ý³Ù£¬Òª¸ÕºÃÔÚÐèÒªµÄʱºòÖØ¹¹¡£¶ÔÓÚÖØ¹¹Îҵľ­Ñé¾ÍÊÇ£¬µ±ÄãÃæ¶Ôй¦ÄÜдÆðÀ´±È½Ïõ¿½ÅµÄʱºòʱ£¬ÕâÊÇÒ»¸öÖØ¹¹Ðźţ¬´ËʱӦ¸ÃÊÇ×îÓŵÄÖØ¹¹Ê±¼ä¡£Öع¹²»ÊÇרÃŵÄÈ¥×¼±¸Ê±¼ä£¬¶øÊÇ´©²åÔÚÄãд´úÂëµÄ¹ý³ÌÖУ¬ËüÊÇÄã±àÂëµÄÒ»²¿·Ö¡£ËùÒÔÎÒ¾õµÃTDD±»È˽ÓÊܵÄÀíÓÉÒ²ÔÚÓÚ´Ë¡£

2.SOA¼Ü¹¹ÏµÄÏÔʾ¶Ë¼Ü¹¹¸¯»¯

ÏÔʾ¶ËµÄ¼Ü¹¹¸¯»¯ÎÒ¸öÈ˾õµÃÓÐÁ½¸öÎÊÌâµ¼Ö£¬µÚÒ»¸ö£¬Ô­±¾ÏÔʾ¶ËµÄ½á¹¹ÔÚ´«Í³ÏµÍ³¼Ü¹¹ÖпÉÒÔ¹¤×÷µÄºÜºÃ£¬µ«ÊÇÏÖÔÚµÄÕûÌå¼Ü¹¹±äÁË£¬ËùÒÔÐèÒª¼°Ê±×÷³öµ÷Õû¡£µÚ¶þ£¬ÏÔʾ¶ËµÄ¼Ü¹¹Î´Äܼ°Ê±µÄÖØ¹¹£¬Î´Äܽ«ÏÔʾ¶Ë½á¹¹½øÐнøÒ»²½·ÖÀ룬½«ÏÔʾÂß¼­¶ÀÁ¢¿É²âÊÔ¡£

ÕâÑùËæ×ÅSOA½Ó¿ÚµÄ²»¶ÏÔö¼Ó£¬ÏÔʾ¶ËÖ±½Ó½«µ÷Ó÷þÎñµÄ·½·¨Ç¶Èëµ½ÏÔʾÂß¼­ÖУ¬È磬ASP.NET Mvc¡¢ASP.NET WebapiµÄ¿ØÖÆÆ÷ÖУ¬°üÀ¨Á½¸ö²ãÃæÖ®¼äµÄDTOת»»¡£

°´ÕÕDDDµÄÉÏÏÂÎÄÉè¼Æ·½·¨£¬ÔÚÓû§ÏÔʾ¶ËÒ²ÊÇ¿ÉÒÔÓÐÑ¡ÔñµÄ´´½¨ÃæÏòÏÔʾµÄÁìÓòÄ£ÐÍ£¬´ËÄ£ÐÍÖ÷Òª´¦ÀíÁìÓòÔÚ¼´½«µ½´ï·þÎñ¶ËÖ®ºóµÄǰÆÚ´¦Àí¡£±Ï¾¹Ò»¸öÁìÓòʵÌåÓÐ×Ŷà¸ö·½ÃæµÄÖ°Ôð£¬Èç¹ûÄÜÔÚÏÔʾ¶Ë½¨Á¢ÆðÇáÁ¿¼¶µÄÁìÓòÄ£ÐÍ£¬¶ÔÏÔʾÂß¼­µÄÖØ¹¹½«´óÓкô¦£¬µ±È»Ç°ÌáÊÇÄãÓÐן´ÔÓµÄÁìÓòÂß¼­¡££¨ÎÒ֮ǰµÄÉÏÒ»¼Ò¹«Ë¾£¨ÃÀ¹úÖªÃûµÄµç×ÓÉÌÎñƽ̨£©£¬ËûÃǵÄÏÔʾ¶ËÓÐן´ÔÓµÄÁìÓòÂß¼­£¬¾Í¹âÒ»¸öÏÔʾ¶Ë¾Í¸´ÔÓµÄÈÃÈ˳Ծª£¬Èç¹ûÄÜÔÚ´Ë»ù´¡ÉÏÒýÈëÁìÓòÄ£ÐÍÏÔʾ¶ËÉÏÏÂÎÄ£¬½«¶Ô¸´ÔÓµÄÂß¼­´¦ÀíºÜÓкúô¦£¬µ±È»ÕâÖ»ÊÇÎÒδ¾­ÑéÖ¤µÄ²Â²â¶øÒÑ£¬½ö¹©²Î¿¼¡££©

¶ÔÏÔʾ¶ËÁìÓòÄ£ÐÍ´¦ÀíÓÐÐËȤµÄ¿ÉÒԲο¼±¾ÈËдµÄÓйØÕâ·½ÃæµÄÁ½ÆªÎÄÕ£º

.NETÓ¦Óüܹ¹Éè¼Æ¡ªÃæÏò²éѯµÄÁìÓòÇý¶¯Éè¼ÆÊµ¼ù£¨µ÷Õû´«Í³Èý²ã¼Ü¹¹£¬Íâ¼Óά»¤Ð͵ÄÒµÎñ¿ª¹Ø£©

.NETÓ¦Óüܹ¹Éè¼Æ¡ªÃæÏò²éѯ·þÎñµÄ²ÎÊý»¯²éѯÉè¼Æ£¨·Ö½âÒµÎñµã£¬µ¥¶ÀÅäÖø÷×ÔµÄÊý¾Ý²éѯÆõÔ¼£©

Ô­±¾¸É¾»µÄÏÔʾÂß¼­¶àÁ˺ܶàÎ޹صķþÎñµ÷ÓÃϸ½Ú£¬»¹Óкܶàת»»Âß¼­£¬ÅжÏÂß¼­£¬¶øÕâЩ¶«Î÷Ô­±¾²»ÊôÓÚÕâ¸öµØ·½£¬ÈÃËûÃÇ·ÅÔÚºÏÊʵĵط½¶ÔÏÔʾÂß¼­µÄÖØ¹¹¡¢ÖØÓúÜÓаïÖú¡£

Èç¹û²»½«ÆäÒÆ³öÏÔʾÂß¼­ÖУ¬ÄÇÃ´Ëæ×Å·þÎñ½Ó¿ÚµÄ²»¶ÏÔö¼ÓºÍÀ©Õ¹£¬½«Ö±½Óµ¼ÖÂÄãÐÞ¸ÄÏÔʾÂß¼­´úÂ룬Èç¹ûÄãµÄÏÔʾÂß¼­´úÂëÊÇMVC¡¢Webapi¹²ÓõÄÂß¼­£¬ÄÇôÇé¿ö¾Í¸ü¼Ó¸´ÔÓÁË£¬×îºóÏÔʾÂß¼­ÀïÃæ½«±»ViewModelÓëService DtoÖ®¼äµÄת»»Õ¼Á죬ÄãºÜÄÑÕÒµ½ÓмÛÖµµÄÂß¼­ÁË¡£

3.ÓÐЧʹÓ÷À¸¯²ãÀ´¸ôÀëË鯬·þÎñµ¼ÖÂÏÔʾ¶ËÂß¼­¸¯ÀÃ

½â¾öÕâЩÎÊÌâµÄ·½·¨¾ÍÊÇÒýÈë·À¸¯²ã£¬¾¡¹Ü·À¸¯²ãµÄ³õÖÔÊÇΪÁ˽â¾öϵͳ¼¯³ÉʱµÄÁìÓòÄ£ÐÍÖ®¼äµÄת»»£¬µ«ÊÇÎÒ¾õµÃÏÖÔÚµÄϵͳ¼Ü¹¹ºÍ¼¯³ÉÓÐןܶàÏàËÆÖ®´¦£¬ÎÒÃÇ¿ÉÒÔÊʵ±µÄ½è¼øÕâЩºÃµÄÉè¼Æ·½·¨À´½â¾öÏàËÆµÄÎÊÌâ¡£

ÒýÈë·À¸¯²ãÖ®ºó£¬½«Ô­±¾²»¸Ã³öÏÖÔÚÏÔʾÂß¼­ÖеĴúÂëÈ«²¿°áµ½·À¸¯²ãÖÐÀ´£¬ÔÚ·À¸¯²ãÖн¨Á¢ÆðOO»úÖÆ£¬ÈÃÕâЩOO¶ÔÏóÄܹ»ºÍÏÔʾÂß¼­Ò»Æð´îÅäʹÓá£

ͼ1

½«Óû§²ã·Ö²ãÈý¸ö×Ӳ㣬UiLayer£¬Show Logic Layer£¬Anticorrosive Layer£¬×îºóÒ»¸öÊÇ·þÎñµÄ½Ó¿Ú×飬ËùÓеķþÎñ½Ó¿Úµ÷ÓþùÐèÒª´Ó·À¸¯²ã×ß¡£

ÎÒÃÇÐèÒª½«Show Logic LayerÖеķþÎñµ÷Óã¬ÀàÐÍת»»´úÂëÇ¨ÒÆµ½Anticorrsoive LayerÖУ¬ÔÚÕâÀï¿ÉÒÔ¶ÔÏó»¯×ª»»Âß¼­Ò²¿ÉÒÔ²»¶ÔÏ󻯣¬¾ßÌå¿ÉÒÔ¿´ÏÂÏîÄ¿ÊÇ·ñÐèÒª¡£Èç¹ûÒµÎñȷʵ±È½Ï¸´ÔÓµÄʱºò£¬ÄÇôÎÒÃÇΪÁË·â×°¡¢ÖØÓþÍÐèÒª½øÐжÔÏ󻯡£

4.°þÀë·þÎñµ÷Óõļ¼Êõ×é¼þÈÃÆäÒÀÀµ½Ó¿Ú

Ê×ÏÈÒª×öµÄ¾ÍÊǽ«Âß¼­´úÂëÖеķþÎñ¶ÔÏóÖØ¹¹³ÉÃæÏò½Ó¿ÚµÄ£¬È»ºóÈÃÆä¶¯Ì¬µÄÒÀÀµ×¢Èëµ½Âß¼­ÀàÐÍÖС£ÔÚASP.NETWEBAPIÖУ¬ÎÒÃÇ»ù±¾ÉϽ«ÏÔʾÂß¼­¶¼Ð´ÔÚÕâÀïÃæ£¬ÎÒÒ²½«Ê¹Óô˷½Ê½À´ÑÝʾ±¾ÕÂÀý×Ó£¬µ«ÊÇÈç¹ûÄãµÄMVCÏîÄ¿ºÍWEBAPIÏîÄ¿¹²ÓÃÏÔʾÂß¼­¾ÍÐèÒª½«ÆäÌá³öÀ´ÐγɶÀÁ¢µÄÏîÄ¿£¨Show Logic Layer£©¡£

using OrderManager.Port.Models;
2 using System.Collections.Generic;
3 using System.Web.Http;
4
5 namespace OrderManager.Port.Controllers
6 {
7 public class OrderController : ApiController
8 {
9 [HttpGet]
10 public OrderViewModel GetOrderById(long oId)
11 {
12 OrderService.Contract.OrderServiceClient client = new OrderService.Contract.OrderServiceClient();
13 var order = client.GetOrderByOid(oId);
14
15 if (order == null) return null;
16
17 return AutoMapper.Mapper.DynamicMap<OrderViewModel>(order);
18 }
19 }
20 }

ÕâÊÇÒ»¶ÎºÜ¼òµ¥µÄµ÷ÓÃOrder·þÎñµÄ´úÂ룬Ê×ÏÈÐèҪʵÀý»¯Ò»¸ö·þÎñÆõÔ¼Öаüº¬µÄ¿Í»§¶Ë´úÀí£¬È»ºóͨ¹ý´úÀíµ÷ÓÃÔ¶³Ì·þÎñ·½·¨GetOrderByOid(long oId)¡£Ö´ÐÐÒ»¸ö¼òµ¥µÄÅжϣ¬×îºóÊä³öOrderViewModel¡£

Èç¹ûËùÓеÄÂß¼­¶¼Õâô¼òµ¥ÎÒÏë¾Í²»ÐèҪʲô·À¸¯²ãÁË£¬ÏñÕâÖÖÀàÐ͵ÄÏÔʾ´úÂëÊǼ«Æä¼òµ¥µÄ£¬ÎÒÕâÀïµÄÄ¿µÄ²»ÊÇΪÁËÏÔʾ¶àôµÄ¸´ÔӵĴúÂëÈçºÎд£¬¶øÊǽ«·þÎñµ÷Óõ÷ÓõĴúÂëÖØ¹¹²ã½Ó¿Ú£¬È»ºó×¢Èë½øOrderControllerʵÀýÖС£Ä¿µÄ¾ÍÊÇΪÁËÄܹ»ÔÚºóÐøµÄµü´úÖØ¹¹ÖжԸÿØÖÆÆ÷½øÐе¥Ôª²âÊÔ£¬Õâ¿ÉÄÜÓеãÂé·³£¬µ«ÊÇΪÁ˳¤¾ÃµÄÀûÒæ»¹ÊÇÐèÒªµÄ¡£

using OrderManager.Port.Component;
2 using OrderManager.Port.Models;
3 using System.Collections.Generic;
4 using System.Web.Http;
5
6 namespace OrderManager.Port.Controllers
7 {
8 public class OrderController : ApiController
9 {
10 private readonly IOrderServiceClient orderServiceClient;
11 public OrderController(IOrderServiceClient orderServiceClient)
12 {
13 this.orderServiceClient = orderServiceClient;
14 }
15
16 [HttpGet]
17 public OrderViewModel GetOrderById(long oId)
18 {
19 var order = orderServiceClient.GetOrderByOid(oId);
20
21 if (order == null) return null;
22
23 return AutoMapper.Mapper.DynamicMap<OrderViewModel>(order);
24 }
25 }
26 }

ΪÁËÄÜÔÚÔËÐÐʱ¶¯Ì¬µÄ×¢Èëµ½¿ØÖÆÆ÷ÖУ¬ÄãÐèÒª×öһЩ»ù´¡¹¤×÷£¬À©Õ¹MVC¿ØÖÆÆ÷µÄ³õʼ»¯´úÂë¡£ÕâÑùÎÒÃǾͿÉÒÔ¶ÔOrderController½øÐÐÍêÕûµÄµ¥Ôª²âÊÔ¡£

¸Õ²Å˵ÁË£¬Èç¹ûÏÔʾÂß¼­¶¼ÊÇÕâÑùµÄ¼°Æä¼òµ¥£¬ÄÇôһÇж¼Ã»ÓÐÎÊÌâÁË£¬ÕæÊµµÄÏÔʾÂß¼­·Ç³£µÄ¸´ÔÓ¶øÇÒ¶à±ä£¬²¢²»ÊÇËùÓеÄÀàÐÍת»»¶¼ÄÜʹÓÃAutomapperÕâÒ»Àද̬ӳÉ乤¾ß½â¾ö£¬ÓÐЩÀàÐÍÖ®¼äµÄת»»»¹ÓÐÂß¼­ÔÚÀïÃæ¡£GetOrderById(long oId)·½·¨ÊÇΪÁËÑÝʾ´Ë´¦µÄÖØ¹¹·þÎñµ÷ÓÃ×é¼þÓõġ£

´ó²¿·ÖÇé¿öÏÂÎÒÃÇÊÇÐèÒª×éºÏ¶à¸ö·þÎñµ÷Óõ쬽«Æä¶à¸ö½á¹û×éºÏÆðÀ´·µ»Ø¸øÇ°¶ËµÄ£¬ÕâÀïµÄOrderViewModel¶ÔÏóÀïÃæµÄItemsÊôÐÔÀàÐÍOrderItemÀàÐÍÖаüº¬ÁËÒ»¸öProductÀàÐÍÊôÐÔ£¬ÔÚÕý³£Çé¿öÏÂÎÒÃÇÖ»ÐèÒª»ñÈ¡¶©µ¥µÄÌõÄ¿¾ÍÐÐÁË£¬µ«ÊÇÓÐЩʱºòȷʵÐèÒª½«ÌõÄ¿ÖоßÌåµÄ²úÆ·ÐÅÏ¢Ò²Òª·µ»Ø¸øÇ°Ì¨½øÐв¿·ÖÐÅÏ¢µÄÕ¹ÏÖ¡£

using System.Collections.Generic; 
2
3 namespace OrderManager.Port.Models
4 {
5 public class OrderViewModel
6 {
7 public long OId { get; set; }
8
9 public string OName { get; set; }
10
11 public string Address { get; set; }
12
13 public List<OrderItem> Items { get; set; }
14 }
15 }

ÔÚOrderViewModelÖеÄItemsÊôÐÔÊÇÒ»¸öList<OrderItem>¼¯ºÏ£¬ÎÒÃÇÔÙ¿´OrderItemÊôÐÔ¡£

using System.Collections.Generic; 
2
3 namespace OrderManager.Port.Models
4 {
5 public class OrderItem
6 {
7 public long OitemId { get; set; }
8
9 public long Pid { get; set; }
10
11 public float Price { get; set; }
12
13 public int Number { get; set; }
14
15 public Product Product { get; set; }
16 }
17 }

ËüÀïÃæ°üº¬ÁËÒ»¸öProductʵÀý£¬ÓÐЩʱºòÐèÒª½«¸ÃÊôÐÔ¸³ÉÏÖµ¡£

namespace OrderManager.Port.Models
2 {
3 public class Product
4 {
5 public long Pid { get; set; }
6
7 public string PName { get; set; }
8
9 public long PGroup { get; set; }
10
11 public string Production { get; set; }
12 }
13 }

²úÆ·ÀàÐÍÖеÄһЩÐÅÏ¢Ö÷ÒªÊÇÓÃÀ´×÷Ϊ¶©µ¥ÌõĿչÏÖʱÄܹ»¸ü¼ÓµÄÈËÐÔ»¯Ò»µã£¬ÄãÖ»¸øÒ»¸ö²úÆ·ID£¬²»Äܹ»ÈÃÓû§ÖªµÀÊÇÄĸö¾ßÌåµÄÉÌÆ·¡£

ÎÒÃǽÓ×Å¿´Ò»¸öËæ×ÅÒµÎñ±ä»¯´øÀ´µÄ´úÂë¼±ËÙÅòÕ͵ÄÀý×Ó£¬¸ÃÀý×ÓÖÐÎÒÃÇÐèÒª¸ù¾ÝOrderItemÖеÄPid»ñÈ¡ProductÍêÕûÐÅÏ¢¡£

using OrderManager.Port.Component;
2 using OrderManager.Port.Models;
3 using System.Collections.Generic;
4 using System.Web.Http;
5 using System.Linq;
6
7 namespace OrderManager.Port.Controllers
8 {
9 public class OrderController : ApiController
10 {
11 private readonly IOrderServiceClient orderServiceClient;
12
13 private readonly IProductServiceClient productServiceClient;
14 public OrderController(IOrderServiceClient orderServiceClient, IProductServiceClient productServiceClient)
15 {
16 this.orderServiceClient = orderServiceClient;
17 this.productServiceClient = productServiceClient;
18 }
19
20 [HttpGet]
21 public OrderViewModel GetOrderById(long oId)
22 {
23 var order = orderServiceClient.GetOrderByOid(oId);
24
25 if (order == null && order.Items != null && order.Items.Count > 0) return null;
26
27 var result = new OrderViewModel()
28 {
29 OId = order.OId,
30 Address = order.Address,
31 OName = order.OName,
32 Items = new System.Collections.Generic.List<OrderItem>()
33 };
34
35 if (order.Items.Count == 1)
36 {
37 var product = productServiceClient.GetProductByPid(order.Items[0].Pid);//µ÷Óõ¥¸ö»ñÈ¡ÉÌÆ·½Ó¿Ú
38 if (product != null)
39 {
40 result.Items.Add(ConvertOrderItem(order.Items[0], product));
41 }
42 }
43 else
44 {
45 List<long> pids = (from item in order.Items select item.Pid).ToList();
46
47 var products = productServiceClient.GetProductsByIds(pids);//µ÷ÓÃÅúÁ¿»ñÈ¡ÉÌÆ·½Ó¿Ú
48 if (products != null)
49 {
50 result.Items = ConvertOrderItems(products, order.Items);//ÅúÁ¿×ª»»OrderItemÀàÐÍ
51 }
52
53 }
54
55 return result;
56 }
57
58 private static OrderItem ConvertOrderItem(OrderService.OrderItem orderItem, ProductService.Contract.Product product)
59 {
60 if (product == null) return null;
61
62 return new OrderItem()
63 {
64 Number = orderItem.Number,
65 OitemId = orderItem.OitemId,
66 Pid = orderItem.Pid,
67 Price = orderItem.Price,
68
69 Product = new Product()
70 {
71 Pid = product.Pid,
72 PName = product.PName,
73 PGroup = product.PGroup,
74 Production = product.Production
75 }
76 };
77 }
78
79 private static List<OrderItem> ConvertOrderItems(List<ProductService.Contract.Product> products, List<OrderService.OrderItem> orderItems)
80 {
81 var result = new List<OrderItem>();
82
83 orderItems.ForEach(item =>
84 {
85 var orderItem = ConvertOrderItem(item, products.Where(p => p.Pid == item.Pid).FirstOrDefault());
86 if (orderItem != null)
87 result.Add(orderItem);
88 });
89
90 return result;
91 }
92 }
93 }

µÄµÚÒ»¸Ð¾õ¾ÍÊÇ£¬ÏÔʾÂß¼­ÒѾ­»ù±¾É϶¼ÊÇÀàÐÍת»»´úÂ룬¶øÇÒÕâÀïÎÒûÓÐÌí¼ÓÈκÎÒ»¸öÓйØÏÔʾµÄÂß¼­£¬ÔÚÕâÑùµÄÇé¿ö϶¼ÈôúÂë¼±ËÙÅòÕÍÁË£¬¿ÉÏë¶øÖª£¬Èç¹ûÔÙÔÚÕâЩ´úÂëÖмÓÈëÏÔʾÂß¼­£¬ÎÒÃÇ»ù±¾ÉϺÜÄÑÔÚºóÆÚά»¤ÕâЩÏÔʾÂß¼­£¬¶øÕâЩÏÔʾÂß¼­²ÅÊÇÕâ¸öÀàµÄÕæÕýÖ°Ôð¡£

ÓÉ´Ë´øÀ´µÄÎÊÌâ¾ÍÊÇÖØÒªµÄÂß¼­ÑÍûÔÚÕâЩת»»´úÂëÖУ¬ËùÒÔÎÒÃǼ±ÐèÒ»¸öÄܹ»ÈÝÄÉÕâЩת»»´úÂëµÄλÖã¬Ò²¾ÍÊÇ·À¸¯²ã£¬ÔÚ·À¸¯²ãÖÐÎÒÃÇרÃÅÀ´´¦ÀíÕâЩת»»Âß¼­£¬µ±È»ÎÒÕâÀïµÄÀý×ÓÊDZȽϼòµ¥µÄ£¬Ö»°üº¬Á˲éѯ£¬ÕæÕýµÄ·À¸¯²ãÊǺܸ´Ôӵģ¬ËüÀïÃæÒª´¦ÀíµÄ¶«Î÷²»ÑÇÓÚÆäËû²ãÃæµÄÂß¼­´¦Àí¡£ÎÒÃÇÕâÀï½ö½öÊÇÔÚת»»Ò»Ð©DTO¶ÔÏó¶ø²»ÊǸ´ÔÓµÄDomainModel¶ÔÏó¡£

5.½«·þÎñµÄDTOÓëÏÔʾ¶ËµÄViewModelÖ®¼äµÄת»»·ÅÈë·À¸¯²ã

ÎÒÃÇÐèÒªÒ»¸ö·À¸¯²ãÀ´´¦ÀíÕâЩת»»´úÂ룬°üÀ¨¶Ôºó¶Ë·þÎñµÄµ÷ÓÃÂß¼­£¬½«Õⲿ·Ö´úÂëÒÆÈë·À¸¯¶ÔÏóÖÐÖ®ºó»á¶ÔÎÒÃǺóÃæÖØ¹¹ºÜÓаïÖú¡£

namespace OrderManager.Anticorrsive
2 {
3 using OrderManager.Port.Component;
4 using OrderManager.Port.Models;
5 using System.Collections.Generic;
6 using System.Linq;
7
8 /// <summary>
9 /// OrderViewModel ·À¸¯¶ÔÏó
10 /// </summary>
11 public class OrderAnticorrsive : AnticorrsiveBase<OrderViewModel>, IOrderAnticorrsive
12 {
13 private readonly IOrderServiceClient orderServiceClient;
14
15 private readonly IProductServiceClient productServiceClient;
16
17 public OrderAnticorrsive(IOrderServiceClient orderServiceClient, IProductServiceClient productServiceClient)
18 {
19 this.orderServiceClient = orderServiceClient;
20 this.productServiceClient = productServiceClient;
21 }
22
23 public OrderViewModel GetOrderViewModel(long oId)
24 {
25 var order = orderServiceClient.GetOrderByOid(oId);
26
27 if (order == null && order.Items != null && order.Items.Count > 0) return null;
28
29 var result = new OrderViewModel()
30 {
31 OId = order.OId,
32 Address = order.Address,
33 OName = order.OName,
34 Items = new System.Collections.Generic.List<OrderItem>()
35 };
36
37 if (order.Items.Count == 1)
38 {
39 var product = productServiceClient.GetProductByPid(order.Items[0].Pid);//µ÷Óõ¥¸ö»ñÈ¡ÉÌÆ·½Ó¿Ú
40 if (product != null)
41 {
42 result.Items.Add(ConvertOrderItem(order.Items[0], product));
43 }
44 }
45 else
46 {
47 List<long> pids = (from item in order.Items select item.Pid).ToList();
48
49 var products = productServiceClient.GetProductsByIds(pids);//µ÷ÓÃÅúÁ¿»ñÈ¡ÉÌÆ·½Ó¿Ú
50 if (products != null)
51 {
52 result.Items = ConvertOrderItems(products, order.Items);//ÅúÁ¿×ª»»OrderItemÀàÐÍ
53 }
54
55 }
56
57 return result;
58 }
59
60 private static OrderItem ConvertOrderItem(OrderService.OrderItem orderItem, ProductService.Contract.Product product)
61 {
62 if (product == null) return null;
63
64 return new OrderItem()
65 {
66 Number = orderItem.Number,
67 OitemId = orderItem.OitemId,
68 Pid = orderItem.Pid,
69 Price = orderItem.Price,
70
71 Product = new Product()
72 {
73 Pid = product.Pid,
74 PName = product.PName,
75 PGroup = product.PGroup,
76 Production = product.Production
77 }
78 };
79 }
80
81 private static List<OrderItem> ConvertOrderItems(List<ProductService.Contract.Product> products, List<OrderService.OrderItem> orderItems)
82 {
83 var result = new List<OrderItem>();
84
85 orderItems.ForEach(item =>
86 {
87 var orderItem = ConvertOrderItem(item, products.Where(p => p.Pid == item.Pid).FirstOrDefault());
88 if (orderItem != null)
89 result.Add(orderItem);
90 });
91
92 return result;
93 }
94 }
95 }

Èç¹ûÄã¾õµÃÓбØÒª¿ÉÒÔ½«IOrderServiceClient¡¢IProductServiceClient Á½¸ö½Ó¿Ú·ÅÈëAnticorrsiveBase<OrderViewModel>»ùÀàÖС£

5.1.ת»»Âß¼­¹ý³Ì»¯£¬Ö±½ÓдÔÚ·À¸¯²ãµÄ·½·¨ÖÐ

¶ÔÓÚ·À¸¯²ãµÄÉè¼Æ£¬ÆäʵÈç¹ûÄãµÄת»»´úÂë²»¶à£¬ÒµÎñÒ²±È½Ï¼òµ¥Ê±£¬ÎÒ½¨ÒéÖ±½Óд³É¹ý³ÌʽµÄ´úÂë±È½Ï¼òµ¥µã¡£½«Ò»Ð©¿ÉÒÔÖØÓõĴúÂëÖ±½ÓʹÓþ²Ì¬µÄÀ©Õ¹·½·¨À´Ê¹ÓÃÒ²ÊDZȽϼòµ¥·½±ãµÄ,×î´óÎÊÌâ¾ÍÊDz»ÀûÓÚºóÆÚµÄ³ÖÐøÖØ¹¹£¬ÎÒÃÇÎÞ·¨Ô¤ÖªÎ´À´µÄÒµÎñ±ä»¯£¬µ«ÊÇÎÒÃÇ¿ÉÒÔʹÓÃÖØ¹¹À´½â¾ö¡£

5.2.ת»»Âß¼­¶ÔÏ󻯣¬½¨Á¢Æð·â×°¡¢ÖØÓýṹ£¬·ÀÖ¹½øÒ»²½¸¯»¯

Ïà¶ÔÓ¦µÄ£¬¿ÉÒÔ½«×ª»»´úÂë½øÐжÔÏ󻯣¬ÐγɷÀ¸¯¶ÔÏó£¬Ã¿Ò»¸ö¶ÔÏóרÃÅÓÃÀ´´¦Àíijһ¸öÒµÎñµãµÄÊý¾Ý»ñÈ¡ºÍת»»Âß¼­£¬Èç¹ûÄãÓÐÊý¾Ý·¢ËÍÂß¼­ÄÇô½«ÔÚ·À¸¯¶ÔÏóÖдó´ó»ñÒæ£¬¶ÔÏ󻯺ó¾Í¿ÉÒÔÖ±½Ó¶©ÔÄÏà¹Ø¿ØÖÆÆ÷µÄÒÀÀµ×¢Èëʼþ£¬Èç¹ûÄãÊǹý³ÌʽµÄ´úÂëÏëÍê³É¶¯Ì¬µÄת»»¡¢·¢ËÍ¡¢»ñÈ¡»á±È½Ï²»·½±ã¡£

6.·À¸¯²ãµÄÁ½ÖÖÒÀÀµµ¹ÖÃÉè¼Æ·½·¨

ÎÒÃǽÓ×Å¿´Ò»ÏÂÈçºÎÈ÷À¸¯¶ÔÏóÎÞ¸ÉÈŵĽøÐÐ×Ô¶¯»¯µÄ·þÎñµ÷Óúͷ¢ËÍ£¬ÎÒÃÇÏ£Íû·À¸¯¶ÔÏóÍêȫ͸Ã÷µÄÔÚÖ´ÐÐ×Å·À¸¯µÄÖ°Ô𣬲¢²»Ï£ÍûËü»á¸øÎÒÃÇʵÏÖÉÏ´øÀ´¶à´óµÄ¿ªÏú¡£

6.1.ʼþÇý¶¯£¨·À¸¯²ã¼àÌýÏÔʾÂß¼­Ê¼þ£©

ÎÒÃÇ¿ÉÒÔʹÓÃʼþÀ´ÊµÏÖ¹Û²ìÕßģʽ£¬È÷À¸¯²ã¶ÔÏó¼àÌýij¸öʼþ£¬µ±Ê¼þ´¥·¢Ê±£¬×Ô¶¯µÄ´¦Àíij¸ö¶¯×÷£¬¶ø²»ÊÇÒªÏÔʾµÄÊÖ¶¯µ÷Óá£

namespace OrderManager.Anticorrsive
2 {
3 public interface IOrderAnticorrsive
4 {
5 void SetController(OrderController orderController);
6
7 OrderViewModel GetOrderViewModel(long oId);
8 }
9 }

Order·À¸¯¶ÔÏó½Ó¿Ú£¬ÀïÃæ°üº¬ÁËÒ»¸övoid SetController(OrderController orderController); ÖØÒª·½·¨£¬¸Ã·½·¨ÊÇÓÃÀ´È÷À¸¯¶ÔÏó×Ô¶¯×¢²áʼþÓõġ£

public class OrderController : ApiController
2 {
3 private IOrderAnticorrsive orderAnticorrsive;
4
5 public OrderController(IOrderAnticorrsive orderAnticorrsive)
6 {
7 this.orderAnticorrsive = orderAnticorrsive;
8
9 this.orderAnticorrsive.SetController(this);//ÉèÖÿØÖÆÆ÷µ½·À¸¯¶ÔÏóÖÐ
10 }
11
12 public event EventHandler<OrderViewModel> SubmitOrderEvent;
13
14 [HttpGet]
15 public void SubmitOrder(OrderViewModel order)
16 {
17 this.SubmitOrderEvent(this, order);
18 }
19 }

ÔÚ¿ØÖÆÆ÷ÖУ¬Ã¿µ±ÎÒÃÇ·¢Éúij¸öÒµÎñ¶¯×÷ʱֻ¹Ü´¥·¢Ê¼þ¼´¿É£¬µ±È»Ö÷ÒªÊÇÒÔ·¢ËÍÊý¾ÝΪÖ÷£¬²éѯ¿ÉÒÔÖ±½Óµ÷ÓöÔÏóµÄ·½·¨¡£ÒòΪ·À¸¯¶ÔÏóÆðµ½Ò»¸öÓëºǫ́·þÎñ¼¯³ÉµÄÇÅÁº£¬µ±Ìá½»¶©µ¥Ê±¿ÉÄÜÐèҪͬʱµ÷Óúܶà¸öºǫ́·þÎñ·½·¨£¬ÓÃʼþ´¦Àí»á±È½Ï·½±ã¡£

/// <summary>
2 /// OrderViewModel ·À¸¯¶ÔÏó
3 /// </summary>
4 public class OrderAnticorrsive : AnticorrsiveBase<OrderViewModel>, IOrderAnticorrsive
5 {
6 public void SetController(OrderController orderController)
7 {
8 orderController.SubmitOrderEvent += orderController_SubmitOrderEvent;
9 }
10
11 private void orderController_SubmitOrderEvent(object sender, OrderViewModel e)
12 {
13 //Ìá½»¶©µ¥µÄÂß¼­
14 }
15 }
16 }

6.2.ÒÀÀµ×¢Èë½Ó¿Ú

ÒÀÀµ×¢Èë½Ó¿ÚÊÇÍêȫΪÁ˽«¿ØÖÆÆ÷Óë·À¸¯¶ÔÏóÖ®¼ä¸ôÀëÓõģ¬ÉÏÊö´úÂëÖÐÎÒÊǽ«½Ó¿Ú¶¨ÒåÔÚÁË·À¸¯¶ÔÏó²ãÖУ¬ÄÇôҲ¾ÍÊÇ˵¿ØÖÆÆ÷¶ÔÏóËùÔÚµÄÏîÄ¿ÐèÒªÒýÓ÷À¸¯²ã£¬ÔÚ´¦ÀíʼþºÍ·½·¨Í¬Ê±Ê¹ÓÃʱ»áÏÔµÃÓе㲻Âײ»ÀàµÄ£¬¼ÈÓнӿÚÓÖÓз½·¨£¬ÆäʵÕâ¾ÍÊÇÒ»ÖÖÆ½ºâ°É£¬Ô½´¿´âµÄ¶«Î÷Ô½Òª¸¶³öһЩ´ú¼Û¡£

Èç¹ûÎÒÃǶ¨Òå´¿´âµÄÒÀÀµ×¢Èë½Ó¿ÚÈ÷À¸¯¶ÔÏóȥʵÏÖ£¬ÄÇôÔÚ´¥·¢Ê¼þʱ¾ÍÐèҪרÃŵķ½·¨À´Ö´ÐÐʼþµÄ´¥·¢£¬ÒòΪ²»ÔÚ±¾ÀàÖеÄʼþÊÇû°ì·¨´¥·¢µÄ¡£

7.×ܽá

±¾ÆªÎÄÕÂÊÇÎÒ¶ÔÔÚUI²ãʹÓ÷À¸¯²ã¼Ü¹¹Éè¼ÆË¼ÏëµÄÒ»¸ö¼òµ¥×ܽᣬĿµÄÖ»ÓÐÒ»¸ö£¬Ìṩһ¸ö²Î¿¼£¬Ð»Ð»´ó¼Ò¡£

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

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù