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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
µ¥Ìå±£ÎÀÕ½£¨µÚ¶þ²¿·Ö£©
 
×÷ÕߣºDan Haywood À´Ô´£ºÍøÂç ·¢²¼ÓÚ:2017-5-18
  1804  次浏览      27
 

񻵋

ÔÚÑ¡Ôñϵͳ¼Ü¹¹Ê±£¬ÉìËõÐÔºÍÁìÓò¸´ÔÓÐÔÊÇÁ½¸öÖØÒªµÄ¿¼Âǵ㡣

Ä£¿é»¯µ¥Ìå´æÔÚJAR°üµØÓü£¨JAR hell£©ÎÊÌ⣬²»¹ý½èÖúһЩ¹¤¾ß¿ÉÒÔ»º½âÕâ¸öÎÊÌâ¡£

µ¥ÌåÄÚµÄÄ£¿é£¨Ïñ΢·þÎñÒ»Ñù£©ÐèÒª´¦Àí×Ô¼ºµÄÊý¾Ý£¬²»¹ýÄ£¿éµ½RDBMSÖ®¼äµÄ¼òµ¥Ó³Éä»áµ¼ÖÂÊý¾Ý¿âÄÑÒÔά»¤¡£ÓÐһЩģʽ¿ÉÓÃÓÚ´¦ÀíÕâ·½ÃæµÄÎÊÌâ¡£

¶ÔÓÚÄ£¿é»¯µ¥ÌåÀ´Ëµ£¬µ×²ãµÄ¼¼Êõƽ̨ÐèÒª¾¡Á¿´¦ÀíºÃºá¶ÏÃæ£¨cross-cutting£©ÎÊÌ⣬Èÿª·¢ÈËÔ±¿ÉÒÔרעÔÚ¸´ÔÓµÄÒµÎñÁìÓòÉÏ¡£Apache Isis£¨ÒÔϼò³ÆIsis£©ºÜÊʺÏÓÃÀ´´¦ÀíÕâ·½ÃæµÄÎÊÌ⣬Ëü²ÉÓÃÁËÁù±ßÐμܹ¹£¨hexagonal architecture£©£¬¶øÇÒʵÏÖÁËÂã¶ÔÏóģʽ£¨naked objectes pattern£©¡£

¿ªÔ´Ó¦ÓÃEstatio£¨»ùÓÚIsis£©ÊÇÒ»¸öºÜºÃµÄÄ£¿é»¯µ¥ÌåʾÀý¡£Ëü¿ÉÒÔ°ïÖúÄãÅжÏÄãµÄÁìÓòÊÇ·ñÊʺÏʹÓõ¥Ì壨»òµ¥ÌåÏÈÐУ©¼Ü¹¹¡£

ÔÚÎÄÕµĵÚÒ»²¿·Ö£¬ÎÒÃDZȽÏÁ˵¥Ì壨¸ü׼ȷµØËµÊÇÄ£¿é»¯µ¥Ì壩ºÍ΢·þÎñ¼Ü¹¹Ö®¼äµÄÓÅȱµã¡£Í¬Ê±£¬ÎÒÃÇ»¹ÌÖÂÛÁË¿Éά»¤ÐÔ¡¢ÊÂÎñÐÔ¡¢¸´ÔÓÐÔ¡¢ÉìËõÐÔ¡¢Áé»îÐÔÒÔ¼°¿ª·¢Ð§ÂÊ¡£

ÎÒÃǵóöµÄ½áÂÛÊÇ£¬¼Ü¹¹µÄÑ¡ÔñÈ¡¾öÓÚʵ¼ÊÇé¿ö¡£Í¼1ÁгöÁËÁ½¸öÖØÒª¿¼Âǵ㡣

ͼ1£ºÉìËõÐÔºÍÁìÓò¸´ÔÓÐÔ

Èç¹ûÁìÓòÏà¶Ô¼òµ¥£¬¶øÇÒÒª´ïµ½¡°»¥ÁªÍø¹æÄ£¡±£¬ÄÇô²ÉÓÃ΢·þÎñ¼Ü¹¹»á±È½ÏºÏÊÊ¡£²»¹ýÈç¹û²ÉÓÃ΢·þÎñ¼Ü¹¹£¬ÐèÒªÔÚǰÆÚ¶¨ÒåºÃÿ¸ö΢·þÎñµÄÖ°ÔðºÍ½Ó¿Ú¡£

Èç¹ûÁìÓòÏà¶Ô¸´ÔÓ£¬¶øÇÒ¹æÄ£ÓÐÏÞ£¨±ÈÈçÖ»ÔÚÆóÒµÄÚʹÓã©£¬ÄÇô²ÉÓÃÄ£¿é»¯µ¥Ìå»á±È½ÏºÏÊÊ¡£Ëæ×ÅÄã¶ÔÁìÓòµÄÉîÈëÁ˽⣬¶Ôµ¥ÌåÖ°ÔðµÄÖØ¹¹»áÏà¶Ô¼òµ¥¡£

¶ÔÓÚ¸´ÔӵĴó¹æÄ£ÏµÍ³£¬ÎÒÈÏΪ½øÐÐÉìËõÐÔÓÅ»¯²»ÊÇÒ»¸öÃ÷ÖǵÄ×ö·¨¡£Ïà·´£¬ÎÒÃÇ¿ÉÒÔÏȹ¹½¨Ò»¸öÄ£¿é»¯µÄµ¥ÌåÀ´½â¾ö¸´ÔÓµÄÁìÓòÎÊÌ⣬ȻºóËæ×ŹæÄ£µÄÔö³¤£¬Öð²½Ïò΢·þÎñ¼Ü¹¹Ç¨ÒÆ¡£ÕâÖÖ·½Ê½±ÜÃâÁËÔÚÒ»¿ªÊ¼¾ÍʹÓúܸߵijɱ¾À´ÊµÏÖ΢·þÎñ¼Ü¹¹£¬Ôڵȵ½¹æÄ£Ôö³¤µ½Ò»¶¨³Ì¶È£¨ÓÐÁËÒ»¶¨µÄÀûÈó£©Ö®ºó£¬¸ù¾ÝÒµÎñÇé¿ö×·¼ÓͶÈë¡£ÕâÊÇÒ»ÖÖ»ìºÏµÄ¼Ü¹¹·½Ê½£ºÏÈ´Óµ¥Ì忪ʼ£¬ÔÚ±ØÒªÊ±ÔÙ³éÀë³É΢·þÎñ¡£

ʵÏÖ΢·þÎñ¼Ü¹¹ÊÇÒ»¼þ¼«¾ßÌôÕ½ÐÔµÄÊÂÇ飬²»¹ý¹¹½¨Ò»¸öÄ£¿é»¯µÄµ¥ÌåÒ²²»ÄܵôÒÔÇáÐÄ¡£ÔÚÎÄÕµĵÚÒ»²¿·Ö£¬ÎÒÃÇÖ¸³öÁËһЩDZÔÚµÄÎÊÌâ¡£

Ä£¿é»¯µ¥Ì屨ÐëÓÉÉè¼ÆÁ¼ºÃµÄÄ£¿é×é³É£¬²»¹ýÒÀÈ»¿ÉÄܳöÏÖÑ­»·ÒÀÀµÎÊÌ⡣ͬʱ»¹¿ÉÄܳöÏÖJAR°üµØÓüÎÊÌ⣬ÎÒÃÇÉԺ󽫻á¶Ô´ËÕ¹¿ªËµÃ÷¡£

Ëä˵ÿ¸öÄ£¿éÓ¦¸Ã¸ºÔð´¦Àí×Ô¼ºµÄÊý¾Ý£¬µ«¿ÉÒÔ´Ó¡°Õ½Êõ¡±ÉϽ«¶à¸öÄ£¿éµÄÊý¾Ý±£´æÔÚͬһ¸öÊý¾Ý´æ´¢ÒýÇæÀµ«ÒªÈ·±£²»ÒªÈÃÊý¾Ý¿â³ÉΪһ¸ö¡°´óÄàÇò¡±¡£

Ä£¿é¼äµÄͬ²½½»»¥´øÀ´¸üºÃµÄÓû§ÌåÑé¡£²»¹ý£¬ÕâЩģ¿é±ØÐë¾ß±¸¶ÀÁ¢ÑÝ»¯µÄÄÜÁ¦¡£ÑÝ»¯½ÏÂýµÄÄ£¿é²»Ó¦¸ÃÒÀÀµ¾­³£·¢Éú±ä¸üµÄÄ£¿é¡£

ΪÁËÈÿª·¢ÍŶÓרעÔÚÁìÓòÎÊÌâÉÏ£¬ÐèÒªÈÃÆ½Ì¨»ò¿ò¼Ü¾¡¿ÉÄÜ¶àµØ´¦Àíºá¶ÏÃæÎÊÌâ¡£²»¹ý¾¡¹ÜÈç´Ë£¬ÒµÎñÂß¼­ÈÔÈ»¿ÉÄÜ´ÓÁìÓò²ãÉøÍ¸µ½ÏàÁڵijÊÏÖ²ã»òÕ߳־û¯²ã¡£

ÔÚµÚ¶þ²¿·Ö£¬ÎÒÃǽ«½éÉÜÈçºÎ½â¾öÉÏÊöµÄ¼¸¸öÎÊÌ⣬ÎÒÃÇ»¹»á½«Ò»¸öÕæÊµµÄ»ùÓÚJVMµÄÄ£¿é»¯µ¥Ìå×÷ΪÀý×Ó£¬ËüʹÓÃÁËÒ»¸ö¿ªÔ´¿ò¼ÜÀ´¹ÜÀíºá¶ÏÃæÎÊÌâ¡£

ÎÞÑ­»·ÒÀÀµºÍJAR°üµØÓüÎÊÌâ

ÔÚÄ£¿é»¯µ¥ÌåÀÎÒÃÇÐèÒª»®ÇåÄ£¿éµÄ±ß½ç¡£

µÚÒ»ÖÖ·½Ê½ÊÇÀûÓñà³ÌÓïÑÔµÄÌØÐÔ¶ÔÄ£¿éµÄ¹¦ÄܽøÐзÖ×飬±ÈÈç°ü£¨Java£©»òÕßÃüÃû¿Õ¼ä£¨.NET£©¡£²»¹ýÕâÖÖ·½Ê½²¢²»Äܽ«Ä£¿éÍêÈ«ÓëÓ¦ÓÃµÄÆäËû²¿·ÖÍêÈ«Çø±ð¿ª£¬¶øÇÒ²¢²»Äܱ£Ö¤°ü»òÃüÃû¿Õ¼ä²»»á³öÏÖÑ­»·ÒÀÀµ¡£Èç¹ûֻʹÓÃÕâÖÖ·½Ê½½øÐÐÄ£¿é»¯£¬×îÖյõ½µÄºÜ¿ÉÄܲ»ÊÇÒ»¸öÄ£¿é»¯µ¥Ì壬¶øÊÇÒ»¸ö´óÄàÇò¡£

Ïà·´£¬ÎÒÃÇÐèÒª¸üÑϸñµÄ½á¹¹»¯£¬²¢ÇÒ¿ÉÒÔʹÓù¤¾ßÀ´Ç¿»¯Ä£¿é¼äµÄÎÞÑ­»·ÒÀÀµ¹ØÏµ¡£ÔÚJavaƽ̨ÉÏ£¬¿ÉÒÔʹÓÃMavenÀ´¹ÜÀí¶àÄ£¿éÏîÄ¿£¬¶øÔÚ.NETƽ̨ÉÏ£¬¿ÉÒÔʹÓðüº¬Á˶à¸öC#ÏîÄ¿»òF#ÏîÄ¿µÄµ¥¸öVistual Studio½â¾ö·½°¸¡£ÕâЩ´úÂë±»±àÒëµ½Ò»Æð£¬¹¹½¨¹¤¾ß£¨Maven»òVisual Studio£©¿ÉÒÔÈ·±£Ä£¿é¼ä²»´æÔÚÑ­»·ÒÀÀµ¡£

µÚ¶þÖÖ·½Ê½ÓÐÒ»¸öȱµã£¬ÒòΪËùÓеĴúÂë¶¼´æÔÚͬһ¸ö´úÂë¿âÀ²¢±»±àÒëµ½Ò»Æð£¬ËùÒÔËüÃÇÓµÓÐÏàͬµÄ°æ±¾ºÅ£¬²¢ÇÒÐèÒª½øÐÐÕûÌåµÄ²âÊÔ¡£µ«ÔÚʵ¼Êµ±ÖУ¬²»Í¬Ä£¿éµÄÑÝ»¯ËÙ¶ÈÊDz»Ò»ÑùµÄ¡£¶ÔÓÚ±ä¸ü»ºÂýµÄ´úÂëÀ´Ëµ£¬Ã»ÓбØÒª½øÐгÖÐøµÄ¹¹½¨ºÍ²âÊÔ¡£

µÚÈýÖÖ·½Ê½Êǽ«Ä£¿éÒÆ¶¯µ½×Ô¼ºµÄ´úÂë¿â£¬²¢ÓµÓжÀÁ¢µÄ°æ±¾ºÅ¡£ÔÚ.NETƽ̨£¬ÎÒÃÇ¿ÉÒÔ½«Ã¿¸öÄ£¿é´ò°ü³ÉNuGet°ü£¬¶øÔÚJavaƽ̨£¬ÎÒÃÇ¿ÉÒÔ°ÑÄ£¿é´ò°ü³ÉMavenÄ£¿é¡£¶ÔÓÚʹÓÃÕâЩģ¿éµÄÖ÷Ó¦ÓÃÀ´Ëµ£¬ÕâЩģ¿éÓëµÚÈý·½µÄÒÀÀµ°üÊDz»Ò»ÑùµÄ¡£

²»¹ý£¬µÚÈýÖÖ·½Ê½Ò²¿ÉÄܳöÏÖÑ­»·ÒÀÀµ¡£ÀýÈ磬¼ÙÉècustomers 1.0Ä£¿éÒÀÀµÁËaddresses 1.0Ä£¿é£¬Èç¹û¿ª·¢ÈËÔ±´´½¨ÁËaddresses 1.1£¬²¢ÇÒÒÀÀµÁËcustomers 1.0£¬ÄÇôcustomersºÍaddressesÖ®¼ä¾ÍÐγÉÁËÑ­»·ÒÀÀµ£¬Õ⵱Ȼ²»ÊÇÒ»¼þºÃÊ¡£

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇҪȷ¶¨ÒÀÀµµÄ·½ÏòÐÔ£ºÊÇÒªÈÃcustomersÒÀÀµaddresses£¬»¹ÊÇ·´¹ýÀ´£¿ÎÒÃÇ¿ÉÒÔ×ñÑ­Îȶ¨ÐÔÒÀÀµÔ­Ôò£ºÓ¦¸ÃÈò»Îȶ¨£¨¾­³£·¢Éú±ä¸ü£©µÄÄ£¿éÒÀÀµÎȶ¨£¨ºÜÉÙ·¢Éú±ä¸ü£©µÄÄ£¿é¡£ÔÚÎÒÃÇËù¸ø³öµÄÀý×ÓÀÎÊÌâ±ä³É£ºÄĸö±È½Ï²»Îȶ¨£¬ÊÇcustomers»¹ÊÇaddresses£¿Èç¹û¸ã´íÁËÒÀÀµµÄ·½Ïò£¬¿ÉÒÔʹÓÃÒÀÀµ·´×ªÔ­Ôò½øÐÐÖØ¹¹¡£

ÒÀÀµµÄ·½ÏòÐÔºÜÈÝÒ×ʶ±ð¡£ÓÐЩģ¿éÖ»°üº¬ÁËÒýÓÃÊý¾Ý£¬±ÈÈçtax rate±í»òÕßcurrency¡£ÆäËûÄ£¿é¼¸ºõ²»°üº¬»òÕßÖ»°üº¬ÉÙÁ¿µÄÒýÓÃÊý¾Ý£¬±ÈÈçcounterpartiesºÍfixedassets£¬»òÕßinstruments¡£ÁíÒ»¸öÀý×ÓÊÇ¡°Îļþ¹ñ¡±£¬ËüÖ»ÓÃÓÚ´æ´¢Îĵµ»òÕßͨÐÅ×ÊÁÏ¡£Ó¦¸ÃÈÃÆäËûÄ£¿éÒÀÀµÉÏÊöµÄ¼¸¸öÄ£¿é£¬¶ø²»ÊÇ·´¹ýÀ´¡£

ÎÒÃÇ»¹¿ÉÒÔʹÓÃһЩ¸ü¼Ó¿ÆÑ§µÄ·½Ê½£¬Í¨¹ý°æ±¾¿ØÖƵÄÀúÊ·Êý¾Ý¼ÆËãÿ¸öÄ£¿éµÄÏà¶Ô²¨¶¯ÊýÁ¿¡£

ÎÒÃÇ¿ÉÒÔ½«Îȶ¨µÄÄ£¿éÒÆ¶¯µ½ËüÃÇ×Ô¼ºµÄ´úÂë¿âÀһµ©ËüÃDZ»ÒƵ½×Ô¼ºµÄ´úÂë¿âÀÆäËûÓ¦ÓþͿÉÒÔÖØÓÃËüÃÇ¡£

ʵ¼ÊÉÏ£¬ÎÒÃÇÖ»ÒªÇóÄ£¿é¼ä¾ßÓÐÎȶ¨µÄ½Ó¿Ú£¬ÖÁÓÚ½Ó¿Ú±³ºóµÄʵÏÖÊÇ·ñÎȶ¨²¢²»ÖØÒª¡£½«²»Îȶ¨µÄʵÏÖ´úÂëÒÆ³öÖ÷´úÂë¿âÊÇÓкô¦µÄ£¬ÒòΪÕâÑù¿ÉÒÔ±ÜÃâ³öÏÖÖ÷´úÂë¿âµÄ´úÂ벨¶¯¡£²»¹ýÕâÒªÇóÄ£¿é¼ä¾ßÓÐÕýʽ¶¨ÒåµÄ½Ó¿Ú¡£

ΪÁ˽õÉÏÌí»¨£¬ÔÚ³öÏÖÑ­»·ÒÀÀµÊ±£¬ÎÒÃÇÐèÒªÌáǰµÃµ½¸æ¾¯£¬×îºÃÊÇÔÚ¹¹½¨½×¶Î»òÕß³ÖÐø¼¯³É¹ÜµÀÀï¡£ÕâÊÇÒ»¸ö¿ÉʵÏÖµÄÄ¿±ê¡£

ÈÃÎÒÃǻص½Ö®Ç°µÄÀý×Ó£¬customers 1.0ÒÀÀµÁËaddresses 1.0£¬Í¬Ê±addresses 1.1ÒÀÀµÁËcustomers 1.0¡£ÒòΪӦÓûáÖ¸Ïòÿ¸öÄ£¿éµÄ×îа汾£¬ÎÒÃǾͻáÖªµÀcustomers 1.0ºÍaddresses 1.1Ö®¼ä´æÔÚÑ­»·ÒÀÀµ¡£

Õâ¸öÒÀÀµ¾ÛºÏÎÊÌâͨ³£±»³ÆÎª¡°JAR°ü£¨»òDLL¿â£©µØÓü¡±¡£Í¼2չʾÁËÒ»¸öºÜ³£¼ûµÄÀý×Ó£¬Ò»¸öÓ¦ÓÃʹÓÃÁËÁ½¸ö¿â£¬ÕâÁ½¸ö¿â·´¹ýÀ´Ê¹ÓÃÁ˾ßÓа汾³åÍ»µÄ»ù´¡¿â¡£

ͼ2£ºÒÀÀµ¾ÛºÏ³åÍ»

Õâ¸öÓ¦ÓÃÔÚJVMÉÏÔËÐÐʱ£¬»áÅ׳öÔËÐÐʱÁ´½Ó´íÎó¡£ÔÚÒ»°ãÇé¿öÏ£¬JVMÖ»»á¼ÓÔØÄ³¸ö°æ±¾µÄÀàÒ»´Î¡£

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬¿ÉÒÔʹÓÃMavenµÄEnforcer Plugin±ê¼ÇÒÀÀµ¾ÛºÏÎÊÌ⣬ÔÚ±ØÒªÇé¿öÏ¿ÉÒÔÈù¹½¨Ê§Ð§¡£¿ª·¢ÈËÔ±¿ÉÒÔÔÚpom.xmlÎļþµÄ<dependencyManagement>ÀïÖ¸¶¨ÒÀÀµ°üµÄ°æ±¾£¨Ò²¿ÉÒÔʹÓÃ<exclusions>£©¡£¿ªÔ´¿âµÄÓïÒå°æ±¾Ô½À´Ô½Á÷ÐУ¬ËùÒÔ£¬Èç¹ûͬһ¸ö¿âµÄ²»Í¬°æ±¾ºÅÖ»ÊÇÔÚ´ÎÒª°æ±¾ºÅ£¨ÀýÈçv2.3Óëv2.4µÄ²î±ð£©ÉÏ´æÔÚ²î±ð£¬ÄÇôһ°ã¾ÍÑ¡Ôñ¸ü¸ßµÄ°æ±¾¡£

Èç¹ûʹÓÃÁËNuGet 3.x£¬ÄÇô¡°¾Í½ü¡±ÒÀÀµÔ­Ôò¿ÉÒÔ´ïµ½ÀàËÆµÄЧ¹û¡£

ÓÐЩÏîÄ¿¾­³£ÐԵط¢²¼Ö÷°æ±¾²¢É¾³ýÆúÓÃAPI£¬±ÈÈçGuava£¬Í¼2ÖÐËùʾµÄµ¥ÌåÒò´ËÎÞ·¨Õý³£ÔËÐС£¶ÔÓÚÕâÖÖÇé¿ö£¬ÎÒÃDZØÐëͨ¹ý¸üе½×îа汾À´½â¾öÒÀÀµ³åÍ»ÎÊÌâ¡£ÈçºÎ²»ÔÊÐíÕâô×ö£¬»òÐí¿ÉÒÔ³¢ÊÔÓ°×Ó»¯£¨ÖØÐ´ò°ü£©ÒÀÀµ¡£Èç¹û»¹ÊDz»ÔÊÐí£¬ÄÇôֻÄÜÖØ¹¹´úÂëÀ´½â¾ö³åÍ»ÎÊÌ⣬ÉõÖÁ¿¼ÂÇÒÆ³ýÒÀÀµ¡£

OSGiÓ¦Ó㨻ùÓÚJVM£©Í¨¹ýʹÓò»Í¬µÄÀà¼ÓÔØÆ÷À´¼ÓÔØÃ¿¸öÄ£¿éÁ´£¬´Ó¶ø±ÜÃâÁËÕâ¸öÎÊÌâ¡£²»¹ý£¬ËäÈ»OSGiÓÐÒ»¶¨µÄÊг¡£¬µ«ËüÖ»ÊÇÒ»ÖÖÀýÍ⣬ÎÒÃDz»Äܽ«ÆäÊÓ×÷¹æÔò¡£¶øÇÒÔÚJava 9·¢²¼JigsawÄ£¿éϵͳ֮ºó£¬»òÐíOSGi»áʧȥËüÏÖÓеĵØÎ»¡£²»¹ýJigsawÒ²²¢·ÇÒøµ¯£ºËü²¢Ã»Óг¢ÊÔ½â¾öÒÀÀµ¾ÛºÏÎÊÌ⣬¶øÊǰÑÕâ¸öÎÊÌâÁô¸øÁ˹¹½¨¹¤¾ßÈ¥½â¾ö£¨±ÈÈçMaven£©¡£

×ܽáһϣ¬Ê¹ÓÃMavenµÄEnforcer Plugin½â¾öÒÀÀµ¾ÛºÏÎÊÌ⣬Èç¹û³öÏÖÁ˳åÍ»£¬¿ÉÒÔÔÚ<dependencyManagement>ÀïÉùÃ÷½â¾ö£¬±ØÒªÊ±Ê¹ÓÃ<exclusions>¡£ÎÒ°ÑÕâЩ¼ì²é·Å½øÒ»¸ö½Ð×÷¡°resolving-conflicts¡±µÄ<profile>ÀÕâÑù¿ÉÒÔ¾­³£ÐԵؼì²éµ½ÒÀÀµÎÊÌ⣬²¢¼õÉÙÒÀÀµÎÊÌâµÄ³öÏÖ¡£

Êý¾Ý

Óë΢·þÎñ¼Ü¹¹Ò»Ñù£¬Ä£¿é»¯µ¥ÌåÀïµÄÿ¸öÄ£¿é¸ºÔð³Ö¾Ã»¯×Ô¼ºµÄÊý¾Ý¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬ÕâЩģ¿é»áʹÓÃÒ»¸ö¹ØÏµÐÍÊý¾Ý¿â´æ´¢ËüÃǵÄʵÌ壺¹ØÏµÐÍÊý¾Ý¿âÔÚÆóÒµWebÓ¦ÓÃÁìÓòÈÔȻռ¾Ý×ÅÖØÒªµØÎ»¡£ÕâЩ±í±»¾Û¼¯µ½µ¥¸öRDBMSÀ´Ó¶ø¿ÉÒÔʹÓÃÊÂÎñ¡£

ÔÚÄ£¿éʵÌåµ½Êý¾Ý¿âµÄÓ³Éä·½Ãæ£¬ÒòΪÿ¸öÄ£¿é¶¼ÓÐ×Ô¼ºµÄ°ü»òÃüÃû¿Õ¼ä£¬ËùÒÔÿ¸öÄ£¿éÐèÒª±»Ó³Éäµ½Êý¾Ý¿âµÄschemaÉÏ£¨Ä£¿éµÄʵÌåÓ³Éä³ÉschemaµÄ±í£©¡£Ä£¿é»òschemaµÄÃû×ÖÓ¦¸Ã³ÉΪ¸¸±í±êʶ×ֶεÄÖµ£¨ÀýÈçÔÚÓ³Éä¼Ì³Ð¹ØÏµÊ±£©¡£

ÁìÓò¶ÔÏóÄ£Ðͺ͹ØÏµÐÍÊý¾Ý¿âÖ®¼äµÄÒ»¸ö¹Ø¼üÇø±ðÔÚÓÚʵÌå¼ä¹ØÏµµÄ±íʾ·½Ê½¡£ÔÚÄÚ´æÀͨ¹ý¶ÔÏóÖ¸Õë±íʾ¶ÔÏó¼äµÄ¹ØÏµ£¬¶øÔÚÊý¾Ý¿âÀïÔòʹÓÃÍâ¼ü¡£Èçͼ3Ëùʾ£¬Àࣨ×ó±ß£©µ½±í£¨Óұߣ©Ö®¼äµÄÖ±½ÓÓ³Éä»áµ¼ÖÂʵ¼ÊµÄÒÀÀµ¹ØÏµ·½ÏòÔÚÊý¾Ý¿âÀï³öÏÖ·´×ª¡£

ͼ3£ºÀà¼ä¹ØÏµÓë±í¼ä¹ØÏµ

³ÖÓÐCustomerʵÌåµÄÊÇCustomers±íºÍAddresses.customer_id×ֶΣ¨ÒòΪÕâ¸öÍâ¼üÓëCustomer.addressesÏà¹Ø£©¡£¼´Ê¹ÔÚ´úÂëÀïûÓÐÑ­»·ÒÀÀµ£¬µ«Êǵ½ÁËÊý¾Ý¿âÀËüÃÇÈ´±ä³ÉÁËÒ»¸ö´óÄàÇò¡£

²»¹ýÎÒÃÇ¿ÉÒÔ½â¾öÕâ¸öÎÊÌ⡣ΪÁ˽«CustomerÐÅÏ¢±£´æÔÚÏàͬµÄschemaÀÎÒÃÇÒª°ÑÍâ¼üÒÆµ½Ò»¸öÁ¬½Ó±íÀÈçͼ4Ëùʾ¡£ÐÔÄܵÄËðʧÆäʵÊÇ΢²»×ãµÀµÄ¡£

ͼ4£ºÁ¬½Ó±í

ËäÈ»ÎÒÈÏΪÎÒÃDz»Ó¦¸ÃÕâÑù´¦Àíͬһ¸öÄ£¿éʵÌåµÄ±í¹ØÏµ£¬µ«Èç¹û´ó¼Ò¼á³ÖҪʹÓÃÁ¬½Ó±í£¬ÄÇÎÒҲûÓÐʲô¿É˵µÄ¡£

¶ÔÏó¼äµÄ¶à̬¹ØÁª¸ü¼Ó¸´ÔÓ¡£ÀýÈ磬ÎÒÃÇ¿ÉÄÜÏ£Íû½«DocumentsÌí¼Óµ½ËùÓеÄÁìÓò¶ÔÏóÀï¡£Èçͼ5Ëùʾ£¬ÎÒÃÇ¿ÉÒÔÒýÈëPaperclip£¨Ò»¸ö½Ó¿Ú£©µÄ¸ÅÄȻºóʹÓþßÌåµÄʵÏÖ×÷ΪÁ¬½Ó±í¡£

ͼ5£º¶à̬¹ØÁª

ÿ¸öPaperclip±»Ó³Éäµ½Á½ÕÅ±í£¬Ò»ÕÅÔÚdocuments schemaÀһÕÅÔÚËüµÄʵÏÖschemaÀ±ÈÈçPaperclipsForCustomer¡£Paperclips.discriminator×Ö¶ÎÖ¸¶¨Á˾ßÌåµÄʵÏÖÀàÐÍ¡£

ÕâÖÖÓ³ÉäµÄºÃ´¦ÔÚÓÚ£¬ÔÚÊý¾Ý¿âÀïÎÒÃÇÈÔÈ»¿ÉÒÔά»¤ËùÓбí¼äµÄÒýÓÃÍêÕûÐÔ£¬Í¬Ê±£¬ÔÚ´úÂëÀïÎÒÃÇ¿ÉÒÔÕý³£µØÊ¹ÓÃPaperclip½Ó¿Ú¡£

ÕâÖÖģʽ½â¾öÁËÊý¾Ý¿âµÄ½á¹¹ñîºÏÎÊÌ⣬µ«²¢²»Ò»¶¨Äܽâ¾öÐÐΪñîºÏÎÊÌâ¡£ÔÚÎÄÕµĵÚÒ»²¿·Ö£¬ÎÒÃÇÖ¸³ö£¬¿ª·¢ÈËÔ±¿ÉÒÔÖ±½ÓʹÓÃSELECTÓï¾ä´ÓÄ£¿éAÀï²éѯģ¿éBµÄÊý¾Ý¡£ÄÇôÕâ¸öÎÊÌâ¸ÃÈçºÎ½â¾ö£¿

ÔÚÎÒËù²ÎÓëµÄµ¥ÌåϵͳÀÎÒÃǼÈÒª±£Ö¤Êý¾Ý¿âµÄ±í¼ä½»»¥£¬ÓÖÒª½ûÖ¹ÁÙʱµÄSELECT²éѯ¡£ÔÚÎÒ²ÎÓëµÄÁíÒ»¸ö.NETµ¥ÌåÏîÄ¿ÀÎÒÃÇʹÓÃÁËEntity Framework£¬Ã¿¸öÄ£¿é¶ÔÓ¦Ò»¸ö¶ÀÁ¢µÄDBÉÏÏÂÎÄ£¬ÕâÑùÒ²¿ÉÒÔ½â¾ö½á¹¹»¯ÎÊÌâ¡£EFÖ»¹ÜÀíÄ£¿é»òDBÉÏÏÂÎÄÄÚµÄÍâ¼ü£¬ËùÒÔÎÒÃÇʹÓÃÁË֮ǰÌáµ½µÄ¶à̬Á¬½ÓģʽÀ´´¦ÀíÄ£¿é¼äµÄ¹ØÏµ¡£ÔÚJavaƽ̨£¬ÎÒÃÇʹÓÃÁËDataNucleus£¨ÊµÏÖÁËJDOºÍJPA API£©£¬Ã¿¸öÄ£¿éÓÐ×Ô¼ºµÄ³Ö¾Ã»¯ÉÏÏÂÎÄ¡£

ÄãÒ²Ðí»áÎÊ£º¶ÔÓÚ²»ÄÜʹÓÃORM¿ò¼ÜµÄ³¡¾°¸ÃÈçºÎ´¦Àí£¿¿ÉÒÔÕâô˵£¬»¨µãʱ¼äѧϰÈçºÎʹÓÃROMÊÇÖµµÃµÄ£¬ËäÈ»¿ÉÄÜÅɲ»ÉÏÓó¡¡£ÔÚÎÒËù²ÎÓëÁ½¸öµ¥ÌåÏîÄ¿ÀÎÒÃÇÃæ¶ÔµÄÊÇÒ»Ð©ÌØÊâµÄÇé¿ö£¬±ÈÈç´Ó¶à¸öÄ£¿é»ñÈ¡´óÁ¿µÄÊý¾Ý£¬ÎÒÃÇʹÓÃÊÓͼ½«¶à¸öÏà¹ØÄ£¿éµÄ±íJOINÆðÀ´¡£ORM¿ò¼Ü²¢²»ÖªµÀÒ²²»¹ØÐÄʵÌåÊDZ»Ó³Éäµ½±í»¹ÊÇÊÓͼÉÏ¡£ÕâÊǶÔÐÔÄܵÄÓÅ»¯£ºÊÓͼ¿ÉÒÔͳһ¸ßЧµØ´¦ÀíÒµÎñÊý¾Ý¡£ÔÚ´úÂë·¢Éú±ä¸üʱ£¬ÊÓͼµÄ¶¨ÒåÒ²Äܹ»±»×·×Ùµ½£ºµ±ÎÒÃÇΪÁËÂú×ãеÄÐèÇó¶ø´òÆÆÄ£¿é±ß½çʱ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÎÒÃÇËù×öµÄ±ä¸ü¡£

ÊÂÎñÐÔ£¨Í¬²½ÐÔ£©

ÒµÎñÐèÇóµ¼Ö¶à¸öÄ£¿é·¢Éú±ä¸ü£¬ÕâÊǺܳ£¼ûµÄÊÂÇé¡£ÀýÈ磬¼ÙÉèÎÒÃÇÒªÔÚÆ±¾ÝϵͳÀïÖ´ÐÐÆ±¾Ý²Ù×÷£¬Ò»°ãÇé¿öÏÂÖ»»áÐÞ¸ÄÆ±¾ÝÄ£¿éµÄ״̬£¬±ÈÈç´´½¨InvoiceºÍInvoiceItem¶ÔÏó¡£²»¹ý£¬Èç¹ûÓÐЩ¿Í»§ÒªÇóʹÓÃÓʼþ·¢ËÍËûÃÇµÄÆ±¾Ý£¬ÄÇô¾Í»áÉæ¼°µ½´´½¨Document¶ÔÏó£¨ÎĵµÄ£¿é£©ºÍCommunication¶ÔÏó£¨Í¨ÐÅÄ£¿é£©¡£

ÔÚ΢·þÎñ¼Ü¹¹À·þÎñÖ®¼äûÓÐÊÂÎñ£¬Ò²¾ÍÊÇ˵£¬ÎÒÃDZØÐëʹÓÃÏûÏ¢À´Ð­µ÷ÕâЩ±ä¸ü¡£Òò´Ë£¬ÏµÍ³Ö»ÓÐ×îÖÕÒ»ÖÂÐÔ£¬Èç¹û³öÏÖÁËÎÊÌ⣬ÐèҪʹÓò¹³¥²Ù×÷À´¡°»ØÍË¡±±ä¸ü¡£ÔÚijЩϵͳÀÕâÖÖ×îÖÕÒ»ÖÂÐÔµÄÐÐΪÈÝÒ×ÈÃÓû§ºÍ¿ª·¢ÈËÔ±¸Ðµ½À§»ó¡£ÀýÈ磬CQRSģʽ¶Ô¶Áд½øÐÐÁË·ÖÀ룬һ¸ö·þÎñдÈëµÄÊý¾Ý²»»áÁ¢¼´±»ÁíÒ»¸ö·þÎñ¶ÁÈ¡µ½¡£

¶ø¶ÔÓÚµ¥ÌåÀ´Ëµ£¬Èç¹ûƱ¾ÝÄ£¿é¡¢ÎĵµÄ£¿éºÍͨÐÅÄ£¿é´æÔÚÓÚͬһ¸öRDBMSÀÄÇôÎÒÃǾͿÉÒÔÒÀÀµRDBMSµÄÊÂÎñ»úÖÆÀ´È·±£±ä¸ü״̬µÄÔ­×ÓÐÔ¡£´ÓÓû§½Ç¶ÈÀ´¿´£¬Ò»Çж¼±£³ÖÒ»Ö£¬²»´æÔÚÁîÈËÀ§»óµÄÖмä״̬£¬ÎÞÐè×ö³öÈκβ¹³¥²Ù×÷¡£¶ÔÓÚ¿ª·¢ÈËÔ±À´Ëµ£¬ËûÃÇ¿ÉÒÔÁ¢¼´¶ÁÈ¡µ½Ð´ÈëÊý¾Ý¿âµÄÊý¾Ý¡£

ͬ²½ÐÐΪ¿ÉÒÔÔÚÆäËû·½ÃæÎªÓû§ÌåÑé´øÀ´¸Ä½ø¡£¼ÙÉèÿһ¸öCustomer¶¼ÓÐÒ»¸ö¹ØÁªµÄEmailAddresses¼¯ºÏ£¬²¢ÇÒÆäÖеÄÒ»¸öÓʼþµØÖ·ÓÃÓÚ·¢ËÍÆ±¾Ý¡£Èç¹ûÓû§ÏëҪɾ³ýÕâ¸öµØÖ·£¬Æ±¾ÝÄ£¿éÒª·ñ¾öÕâ¸öɾ³ý²Ù×÷£¬ÒòΪÕâ¸öÓʼþµØÖ·¡°ÕýÔÚʹÓÃÖС±¡£Ò²¾ÍÊÇ˵£¬ÎÒÃÇÏëÒªÔÚÄ£¿é¼äʹÓÃÇ¿ÖÆµÄÒýÓüì²éÔ¼Êø¡£

ÒªÔÚ΢·þÎñÀïÖ§³ÖÕâÖÖÔ¼ÊøÊǺܸ´Ôӵ쬶øÔÚµ¥ÌåÀïÎÒÃǾͿÉÒÔºÜÇáËɵØ×öµ½¡£ÎÒÃÇ¿ÉÒÔʹÓÃÒ»¸öÄÚ²¿Ê¼þ×ÜÏߣ¬¿Í»§Ä£¿éͨ¹ýËü¹ã²¥É¾³ýÓʼþµØÖ·µÄÒâÏò£¬ÆäËûÄ£¿éÀïµÄ¶©ÔÄÕß¿ÉÒÔ·ñ¾öÕâ¸ö±ä¸ü¡£

public class Customer {
...
@Action(domainEvent = EmailAddressDeletedEvent.class)
public void delete(EmailAddress ea) {
...
}
}

Çåµ¥1£ºCustomerҪɾ³ýÓʼþµØÖ·£¬´¥·¢Ò»¸öʼþ

¶©ÔÄÕß´úÂëÈçÏ¡£

public class InvoicingSubscriptions {
@Subscribe
public void on(Customer.EmailAddressDeletedEvent ev) {
EmailAddress ea = (EmailAddress)ev.getArg(0);
if(inUse(ea)) {
ev.veto(¡°Email address in use by invoicing¡±);
}
}
...
}

Çåµ¥2£ºÉ¾³ýʼþµÄ¶©ÔÄÕß

µ×²ãµÄƽ̨ÔÚÖ´ÐÐɾ³ý֮ǰ£¬»á½«EmailAddressDeletedEvent·¢Ë͵½ÄÚ²¿µÄʼþ×ÜÏßÉÏ¡£Èç¹ûÕâ¸öÓʼþµØÖ·ÔÚʹÓõ±ÖУ¬¶©ÔÄÕß¿ÉÒÔ·ñ¾öÕâ¸öɾ³ý²Ù×÷¡£

ÁíÒ»ÖÖ·½°¸ÊÇΪ¿Í»§Ä£¿éÉùÃ÷Ò»¸ö·þÎñÌṩÕß½Ó¿Ú£¨SPI£©£¬ÆäËûÄ£¿é¿ÉÒÔʵÏÖÕâ¸ö½Ó¿Ú¡£

public class Customer {
...
public void delete(EmailAddress ea) {
...
}
public String validateDelete(EmailAddress ea) {
return advisors.stream()
.map(advisor -> advisor.cannotDelete(ea))
.filter(reason -> reason != null)
.findFirst().orElse(null);
}

public interface DeleteEmailAddressAdvisor {
String cannotDelete(EmailAddress ea);
}

@Inject
List<DeleteEmailAddressAdvisor> deleteAdvisors;
}

Çåµ¥3£ºCustomerɾ³ýÓʼþµØÖ·µÄ¶¯×÷£¬°üº¬ÁËÒ»¸öÑéÖ¤²½ÖèºÍÒ»¸öSPI

Ò»¸öʵÏÖÁËSPIµÄÀà¡£

public class Invoicing implements DeleteEmailAddressAdvisor {
public void cannotDelete(EmailAddress ea) {
if(inUse(ea)) {
return ¡°Email address in use by invoicing¡±;
}
return null;
}
...
}

Çåµ¥4£ºÊµÏÖÁËSPIµÄƱ¾ÝÄ£¿é

validateDeleteÊÇÒ»¸öÊØ»¤·½·¨£¬ÔÚdelete·½·¨Ö®¼äµ÷Óá£ËüÓÃÓÚÅжÏÓʼþµØÖ·µÄɾ³ý²Ù×÷ÊÇ·ñÔÊÐí±»Ö´ÐС£Õâ¸ö·½·¨±éÀúËùÓÐ×¢ÈëµÄSPIʵÏÖ£¬Èç¹ûSPI·µ»ØÒ»¸ö·Ç¿ÕÖµ£¬ËµÃ÷Á˲»ÄÜɾ³ýÓʼþµØÖ·µÄÔ­Òò£¬ÄÇô¾Í²»ÄÜÖ´ÐÐɾ³ý²Ù×÷¡£

»¹ÓÐÁíÍâÒ»ÖÖʹÓó¡¾°¡£´Óͼ5ÎÒÃÇ¿ÉÒÔ¿´µ½£¬²»Í¬µÄÄ£¿éͨ¹ý±ðÕ뽫Îĵµ¸½¼Óµ½ËüÃǵÄʵÌåÀï¡£»òÐíÓÐÈËÈÏΪÎĵµÄ£¿é¿ÉÄÜ»áÌṩ¡°¸½¼Ó¡±²Ù×÷£¬µ«Êµ¼ÊÉÏ£¬Ö»ÓÐÄÇЩ´æÔÚ±ðÕëµÄʵÌå²ÅÄÜÖ´ÐÐÕâ¸ö²Ù×÷¡£ÎĵµÄ£¿éͨ¹ýÏòÄÚ²¿Ê¼þ×ÜÏß·¢²¼Ê¼þ»òÕßͨ¹ýSPIÀ´·¢ÏÖÄÄЩʵÌ屩¶ÁË¡°¸½¼Ó¡±²Ù×÷¡£

@Mixin
public class Object_attach {
private final Object context;
public Object_uploadDocument(Object ctx) { this.context = ctx; }

public Object attach(Blob blob) {
Document doc = asDocument(blob)
paperclipFactory().attach(context, doc);
}
public boolean hideAttach() {
return paperclipFactory() == null;
}

public interface PaperclipFactory {
boolean canAttachTo(Object o)
void attach(Object o, Document d);
}
PaperclipFactory paperclipFactory() {
return paperclipFactories.stream()
.filter(pf -> pf.canAttach(context))
.findFirst().orElse(null);
}

@Inject
List<PaperclipFactory> paperclipFactories;
}

Çåµ¥5£ºÍ¨¹ýMixin½«Îĵµ¸½¼Óµ½ÈÎÒâµÄ¶ÔÏóÉÏ

Object_attachÀà³äµ±ÁËmixin»òtraitµÄ½ÇÉ«£¬ÎªËùÓжÔÏóÌṩÁ˸½¼Ó¶¯×÷¡£²»¹ý£¬£¨Í¨¹ý·½·¨Òþ²Ø£©Õâ¸ö¶¯×÷²»»áÔÚUIÉÏÏÔʾ£¬³ý·ÇÓÐÄܹ»½«Îĵµ¸½¼Óµ½Ìض¨ÁìÓòÄ£ÐͶÔÏóµÄPaperclipFactoryÀ´³äµ±mixinµÄÉÏÏÂÎÄ¡£

ƽ̨µÄÑ¡Ôñ

²»¹ÜÄãÑ¡ÔñÁ˵¥Ì廹ÊÇ΢·þÎñ£¬Äã¶¼ÐèҪijÖÖÆ½Ì¨»òÕß¿ò¼ÜÀ´ÔËÐÐËüÃÇ¡£

¶ÔÓÚ΢·þÎñ¼Ü¹¹À´Ëµ£¬ÔÚÑ¡Ôñƽ̨ʱÖ÷Òª¹Ø×¢ÍøÂç·½ÃæµÄÎÊÌ⣺ËüÒª±£Ö¤·þÎñ¼äµÄ½»»¥³©Í¨ÎÞ×裨ЭÒé¡¢ÏûÏ¢±àÂ롢ͬ²½/Òì²½¡¢·þÎñ·¢ÏÖ¡¢»ØÂ·¶Ï·Æ÷¡¢Â·ÓÉÆ÷£¬µÈµÈ£©£¬¶øÇÒÄܹ»ÈÃÕû¸öϵͳÔËÐÐÆðÀ´£¨Docker Compose£¬µÈµÈ£©¡£ÓÃÓÚʵÏÖÿ¸ö΢·þÎñµÄÓïÑÔ¾ÍûÓÐÄÇÃ´ÖØÒªÁË£¬Ö»Òª¿ª·¢³öÀ´µÄÓ¦ÓÃÄܹ»´ò³É¿É²¿ÊðµÄ°ü£¬±ÈÈ粿ÊðÔÚDockerÈÝÆ÷Àµ±È»£¬Èç¹ûÑ¡ÔñÁËijÖÖ¿ª·¢ÓïÑÔ£¬ÏîÄ¿ÍŶӱØÐë¾ß±¸ÏàÓ¦µÄ¼¼ÄܽøÐгõÆÚµÄ¿ª·¢ÒÔ¼°ºóÆÚµÄά»¤ºÍÖ§³Ö£©¡£

¶ÔÓÚµ¥Ìå¼Ü¹¹À´Ëµ£¬Ò²ÐèÒªÒ»¸ö¹²ÏíµÄƽ̨£¬²»¹ý´Ëʱ»á¸ü¶àµØ¹Ø×¢¿ª·¢ÓïÑÔºÍÉú̬ϵͳ¡£ÖÁÉÙ£¬ÐèÒª¾ö¶¨ÊÇʹÓÃJavaƽ̨»¹ÊÇ.NETƽ̨¡£ÔÚÑ¡¶¨Æ½Ì¨Ö®ºó£¬»òÐí»¹ÐèҪѡÔñһЩ¿ò¼Ü£¬±ÈÈçJava EE»òÕßSpring¡£

µ¥ÌåµÄÓÅÊÆÔÚÓÚËüÄÜ´¦Àí¸´ÔÓµÄÁìÓòÂß¼­£¬¶øµ×²ãƽ̨Ҫ¾¡¿ÉÄܵش¦ÀíºÃ¼¼ÊõºÍºá¶ÏÃæÎÊÌ⣬±ÈÈ簲ȫ¡¢ÊÂÎñºÍ³Ö¾Ã»¯£¨µ±È»»¹ÓÐÆäËû·½ÃæµÄ¶«Î÷£©¡£ÁíÍ⣬ҵÎñÄ£¿é²»Ó¦¸ÃÒÀÀµ¼¼ÊõÄ£¿é£¬ÎÒÃÇÒª¾¡¿ÉÄܵؽӽüÁù±ßÐμܹ¹¡£

µ¥ÌåÆ½Ì¨Ò²ÐèÒªÌṩ¹¤¾ß£¬ÓÃÓÚÒµÎñÄ£¿éÖ®¼äµÄ½âñî¡£¶ÔÓÚµ¥ÌåÀ´Ëµ£¬ËüµÄ½â¾ö·½°¸Óë΢·þÎñÀàËÆ£ºÊ¹ÓÃʼþ×ÜÏß¡£²»Í¬Ö®´¦ÔÚÓÚ£¬µ¥ÌåµÄʼþ×ÜÏßÊÇÔÚ½ø³ÌÄÚ²¿£¬¶øÇÒ¾ßÓÐÊÂÎñÐÔ¡£

Ò»¸ö£¨Ä£¿é»¯£©µ¥ÌåʾÀý

ÎÒÃÇʹÓÃÒ»¸öÕæÊµµÄ°¸ÀýÀ´ËµÃ÷Ä£¿é»¯µ¥Ì壬×÷ΪÎÄÕµĽáβ¡£

Õâ¸öÓ¦ÓóÌÐò½Ð×÷Estatio£¬ÊÇEurocommercial PropertiesµÄÒ»¸öƱ¾Ýϵͳ¡£Eurocommercial PropertiesÊÇÒ»¼Òʵҵ¹«Ë¾£¬Ä¿Ç°ÔÚÅ·ÖÞµÄ3¸ö¹ú¼ÒÔËÓª×Å34¼Ò¹ºÎïÖÐÐÄ¡£EstatioµÄÔ´´úÂë¿ÉÒÔÔÚGithubÉÏÕÒµ½¡£

ͼ6£ºEstatioµÄ½çÃæ½ØÍ¼

EstatioµÄµ×²ãʹÓÃÁËIsis¿ò¼Ü£¬ËüÊÇÒ»¸ö»ùÓÚJVMµÄȫջ¿ò¼Ü£¬ÓÃÓÚ´¦ÀíËùÓг£¼ûµÄºá¶ÏÃæÎÊÌ⣬±ÈÈ簲ȫ¡¢ÊÂÎñºÍ³Ö¾Ã»¯¡£³ý´ËÖ®Í⣬Ëü»¹×ñÑ­Âã¶ÔÏóģʽ£¬Í¨¹ýWeb UI»òREST API×Ô¶¯äÖȾÁìÓò¶ÔÏó¡£Ò»¸öORM¿ò¼Ü±»ÓÃÓÚ½«ÁìÓò¶ÔÏóÓ³Éäµ½Ò»¸ö³Ö¾Ã»¯²ã£¬¶øIsis½«ÁìÓò¶ÔÏóÓ³Éäµ½³ÊÏֲ㡣

ÒòΪUIÊÇͨÓõģ¬ËùÒÔÔÚ²»¸Ä±äÁìÓò¶ÔÏóÄ£Ð͵ÄÇé¿öÏ¿ÉÒÔ³ÖÐøµØ¶ÔUI½øÐиĽøºÍÔöÇ¿¡£ÀýÈ磬ÉÏÒ»¸ö°æ±¾Ê¹ÓÃBootstrap¶ÔIsisµÄÊÓͼ½øÐÐÁ˸Ľø¡£ÔÚÕâ¸ö°æ±¾Àï½øÐиüеÄÿһ¸öÓ¦Óö¼Ê¹ÓÃÁËÕâ¸ö¸Ä½ø¹ýµÄÊÓͼ¡£Ð°汾Ìí¼ÓÁ˵ØÍ¼¡¢ÈÕÀúºÍExcelµ¼³ö¹¦ÄÜ£¬¶øÇÒ¿ò¼Ü»áÔÚÐèÒªËüÃǵĵط½×Ô¶¯½«ËüÃÇäÖȾ³öÀ´¡£

ÓëÒµÎñÁìÓò¶ÔÏóµÄ½»»¥¹á´©ÁËUIºÍÕû¸öºá¶ÏÃæ£¬Isis½â¾öÁËËùÓÐÏà¹ØµÄÎÊÌâ¡£ÀýÈ磬IsisΪÿһ¸öµ÷ÓòÙ×÷»òÊôÐÔ±ä¸ü´´½¨±¸ÍüÃüÁÐòÁл¯µ½XML£©£¬ÔÚÊÂÎñÍê³Éºó½«ÃüÁî·¢²¼µ½Ê¼þ×ÜÏßÉÏ£¬±ÈÈçApache Camel¡£ÃüÁîÀï°üº¬ÁËÉó¼ÆÐÅÏ¢£¬ÎªÃ¿¸öÁìÓò¶ÔÏóµÄÿһ¸ö±ä¸üÌṩÁËÍêÕûµÄ¿É×·×ÙÐÔ¡£

¿ò¼ÜÔÚÄÚ²¿¹¹½¨ÔªÄ£ÐÍ£¨metamodel£¬ÀàËÆORM¿ò¼Ü£©£¬ÔªÄ£ÐͲ»½ö¿ÉÒÔÓÃÓÚUIºÍREST API£¬Ëü»¹ÓÐÆäËûÓÃ;¡£ÀýÈ磬ͨ¹ýµ¼³öÒ»¸öSwagger½Ó¿ÚÎļþ¿ÉÒÔʵÏÖ»ùÓÚREST APIµÄ×Ô¶¨ÒåUI£¬¶øÒ»¸öÇ¿´óµÄ°²È«Ä£¿é¶¨ÒåÁËÓëÁìÓò¶ÔÏóÀàÐÍÓйصļÓÉ«ºÍȨÏÞ¡£ÔªÄ£ÐÍ¿ÉÒÔÉú³É¡°.po¡±Îļþ£¬È»ºóÓÃÓÚ¹ú¼Ê»¯¡£ÎªÁËÇ¿»¯¼Ü¹¹±ê×¼£¬ÎÒÃÇ»¹¿ÉÒÔΪԪģÐͶ¨ÒåÑéÖ¤Æ÷£¬ÀýÈ磬ģ¿éÀïµÄÿһ¸öʵÌå¶¼Ó¦¸Ã±»ÕýÈ·µØÓ³Éäµ½ÕýÈ·µÄÊý¾Ý¿âschemaÉÏ¡£

¿ò¼ÜÒѾ­´¦ÀíÁËÕâô¶àÎÊÌ⣬¿ª·¢ÈËÔ±¾Í¿ÉÒÔרעÔÚÁìÓòÉÏ£¬È·±£¶ÔËüÃǽøÐÐÁËÊʵ±µÄÄ£¿é»¯£¬±ãÓÚ³¤ÆÚµÄά»¤¡£ÎªÁ˱ÜÃâÄ£¿é¼äµÄñîºÏ£¬¿ò¼ÜÌṩÁ˶ÔmixinµÄÖ§³Ö£¬Ò»¸öÁìÓò¶ÔÏóµÄäÖȾ¿ÉÒÔ°üº¬À´×ÔÆäËû¶à¸öÄ£¿éµÄ״̬ºÍÐÐΪ£¬¶øÎÞÐèÓëÕâЩģ¿é·¢ÉúñîºÏ¡£½«Îĵµ¸½¼Óµ½ÈÎÒâÒ»¸ö¶ÔÏó¾ÍÊǺܺõÄÀý×Ó£¬Çåµ¥5µÄ´úÂëÓëIsisµÄ±à³ÌÄ£ÐͺÜÏàËÆ¡£

ÄÚ²¿µÄʼþ×ÜÏßÒ²ºÜÖØÒª¡£Ò»¸öÄ£¿é·¢ËÍʼþ£¬ÁíÒ»¸öÄ£¿é¶©ÔÄʼþ£¬¶ø²»ÐèÒªËüÃÇÖ®¼ä·¢ÉúÖ±½ÓµÄµ÷Óá£Çåµ¥1ºÍÇåµ¥2µÄ´úÂë½âÊÍÁËIsisÊÇÈçºÎÖ§³Öʼþ×ÜÏߵġ£

Ö§³Ö¶à̬¹ØÁª£¨Í¼5£©µÄ³Ö¾Ã»¯Ä£Ê½Ò²ºÜÖØÒª¡£ÕâЩģʽͨ¹ý¶àÖÖ¿ªÔ´Ä£¿é£¨ÔÚIncode CatalogÀïÒÑÁгö£©ÊµÏÖ£¬Ö§³Ö documents¡¢notes¡¢aliases¡¢classificationsºÍcommunicationsÕâЩ×ÓÁìÓò¡£

IsisµÄ²å¼þ¼¯ºÏÀﻹÓкܶàÆäËûÄ£¿é£¬ËüÃǽâ¾öÁ˰²È«¡¢Éó¼ÆºÍʼþ·¢²¼·½ÃæµÄÎÊÌâ¡£¶ÔIsisÊÓͼµÄÀ©Õ¹£¨µØÍ¼¡¢ÈÕÀú¡¢PDF£¬µÈ£©Ò²ÊôÓÚÕâЩ²å¼þ¼¯ºÏ¡£

ΪÁËÈÃÒµÎñ×ÓÁìÓòºÍ²å¼þ¸üÈÝÒ×±»Àí½âºÍʹÓã¬ËüÃÇ»¹ÌṩÁËʾÀýºÍ¼¯³É²âÊÔ¡£ÕâЩ²å¼þµÄDZÔÚʹÓÃÕß¿ÉÒԲο¼ÕâЩÀý×Ó£¬¿´¿´ÊÇ·ñÄÜÂú×ãËûÃǵÄÐèÇó¡£

IsisÓµÓдóÐ͵ÄÉú̬ϵͳ£¬ÊÂʵʤÓÚÐ۱硣¼¼Êõƽ̨Ӧ¸ÃÈÿª·¢ÍŶÓרעÔÚºËÐÄÁìÓòÉÏ£¬²¢½«ÁìÓò²ð·Ö³ÉÄ£¿é¡£ËùÒÔ£¬Èç¹ûÄãÈ¥¼ì²éÒ»ÏÂEstatioµÄ´úÂ룬Äã¾Í»á·¢ÏÖËüÊÇÓɺܶà¶ÀÁ¢µÄÄ£¿é×é³ÉµÄ¡£Í¼7չʾÁËÕâЩģ¿é¼äµÄÒÀÀµ¹ØÏµ£¨¹ØÏµÍ¼Ê¹ÓÃStructure 101Éú³É£©¡£

ͼ7£ºEstatioµÄÄ£¿é

ÔÚͼ7µÄ×ó±ß²¿·Ö£¬Ã¿¸ö·½¿é´ú±íÁËÒ»¸ö¶ÀÁ¢µÄMavenÄ£¿é£¬Á¬Ïß´ú±íÁËÄ£¿é¼äµÄÒÀÀµ¹ØÏµ¡£

µ×²¿Êǹ¤¾ßÄ£¿é£¨DOMÉèÖᢼÆËãÆ÷£©£¬»ò°üº¬ÁËÒýÓÃÊý¾ÝµÄÄ£¿é£¨¹ú¼Ò¡¢»õ±Ò¡¢Ë÷Òý¡¢Ë°¡¢¼Æ·Ñ£©¡£

ÔÚÖмäÎÒÃÇ¿ÉÒÔ¿´µ½party¡¢financial¡¢asset¡¢assetfinancialºÍbankmandateÄ£¿é£ºÕâЩģ¿éµÄ½á¹¹ºÍËüÃǵÄÊý¾Ý¶¼²»»á¾­³£·¢Éú±ä¸ü¡£budgeting¡¢invoiceºÍleaseÊÇϵͳµÄºËÐÄ£¬ËüÃÇÒÀÀµÆäËûµÄ´ó²¿·Ö×ÓÄ£¿é¡£

ͼ7µÄÓÒ±ßÒ²²î²»¶à£¬²»¹ýleaseÄ£¿é°üº¬ÁËÒ»¸ö×Ó°ü¡£ÔÚÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½Ò»Ð©Ë«ÏòÒÀÀµ£¬ËµÃ÷ÕâÀïµÄ´úÂëÐèÒª×öһЩ¸Ä½ø¡£µ±È»£¬ÕâÀïÒ²ÓÐһЩÏòÍâµÄÒÀÀµ£¬ËµÃ÷Õâ¸öÄ£¿é×öÁËÌ«¶àµÄÊÂÇé¡£ÒªÖªµÀ£¬Ã»ÓÐÒ»¸öÈí¼þϵͳÊÇÍêÃÀµÄ¡£²»¹ý£¬¾¡¹ÜleaseÊÇϵͳÀï×î´óµÄÒ»¸öÄ£¿é£¬µ«ÊÇ´Ó¸ÅÄîÉÏÀ´¿´£¬Ëü¶ÔÎÒÃÇÀ´ËµÒѾ­×㹻СÁË£¨¡°lease¾ÍÊÇ×â»§ºÍ·¿¶«Ö®¼äµÄЭÒ飬ÓÃÓÚ¼ÆËãÆ±¾Ý¡±£©¡£

EstatioÒѾ­ÓÐ5ÄêµÄÀúÊ·ÁË£¬ËüÈÔÈ»ÔÚ·¢Õ¹£¬ÒÔ±ãÖ§³Ö¸ü¶àµÄʹÓó¡¾°¡£¾¡¹ÜËüµÄʹÓó¡¾°ÔÚÀ©Õ¹£¬µ«ËüµÄ´úÂë¿âÈ´ÔÚÊÕËõ£¬Isis²å¼þ¼¯ºÏÀïºÍIncode CatalogÀïµÄÖ÷Ҫģ¿é±»Ç¿ÖÆ·ÖÀë³öEstatio£¬¶øÇÒÎÒÃÇÏ£ÍûÔÚδÀ´·ÖÀë³ö¸ü¶àµÄÄ£¿é¡£Èç¹ûÄãÏÖÔÚÒªÀ­È¡´úÂ룬Äã¿ÉÄÜ·¢ÏÖËüÓë֮ǰͼƬÀï¸ø³öÀ´µÄ½á¹¹ÓÖÓÐËù²»Ò»ÑùÁË¡£ÕâÒ²ÕýÊÇÎÒÃÇËùÆÚÍûµÄ£¬Õâ¸öÓ¦Óý«»á³¤ÆÚ´æ»îÏÂÈ¥£¬²¢±£³ÖÑÝ»¯¡£

½áÂÛ

ÔÚÎÄÕµĵÚÒ»²¿·Ö£¬ÎÒÃDZȽÏÁËÄ£¿é»¯µ¥ÌåºÍ΢·þÎñ¼Ü¹¹£¬Ì½ÌÖÁËÁ½ÕßµÄÓÅÊÆºÍ²»×ã¡£

ÎÒÃÇÎÊÁËÕâÑùµÄÒ»¸öÎÊÌ⣺¡°Ä㽫»áÑ¡ÔñÄÄÒ»¸ö¼Ü¹¹£¬Î¢·þÎñ»¹Êǵ¥Ì壿¡±×÷Ϊ»Ø´ð£¬ÎÒÃÇÎÊÁËÁíÍâÒ»¸öÎÊÌ⣺¡°ÄãÏëÒªµÄÊÇʲô£¿¡±Èç¹ûÁìÓò¸´ÔÓÐԵķçÏո߹ýÎÞ·¨ÉìËõµÄ·çÏÕ£¬ÄÇô¾ÍÓ¦¸ÃʹÓÃÄ£¿é»¯µ¥Ìå¡£µ«Ô¸ÎÒÃÇÔÚÕâÀïÃèÊöµÄ¸÷ÖÖ¼¼ÊõºÍģʽÄܹ»ÓÐËù°ïÖú¡£

²»¹Ü²ÉÓúÎÖּܹ¹£¬¼¼Êõƽ̨¶¼ÊǺÜÖØÒªµÄ¡£Öظ´·¢Ã÷ÂÖ×ÓºÁÎÞÒâÒ壬Isis¿ÉÒÔÈÃÄãרעÓÚ½â¾öÁìÓòµÄ¸´ÔÓÐÔÎÊÌ⣬°ïÖúÄãÀíÇåÄ£¿é±ß½ç£¬²¢½â¾ö¼¸ºõËùÓеĺá¶ÏÃæÎÊÌ⣨°üÀ¨³ÊÏֲ㣩¡£

ÎÒÃÇ»¹½éÉÜÁË¿ªÔ´Ó¦ÓÃEstatio£¬ËüʹÓÃÁËIsis×÷Ϊµ×²ãƽ̨£¬Õ¹Ê¾ÁËÒ»¸öÕæÊµµÄÄ£¿é»¯µ¥Ìå¡£

²»¹ÜÊǵ¥Ì廹ÊÇ΢·þÎñ£¬ËüÃǶ¼²»ÊÇÒøµ¯¡£¹ØÓÚ¡°ÎÒÓ¦¸ÃÑ¡ÔñÄÄÒ»¸ö¡±ÕâÀàÎÊÌâµÄ´ð°¸Í¨³£¶¼ÊÇ¡°ÕâÈ¡¾öÓÚ¡­¡­¡±¡£Èç¹ûÓÐÈ˸ÒÅÄÐØ¸¬£¬ÄÇôËûÒ»¶¨ÊÇÔÚÆÛÆ­Äã¡£´ÓϵͳµÄÉìËõÐԺ͸´ÔÓÐÔ³ö·¢£¬È»ºó×ö³ö¾ö¶¨¡£

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

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

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

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù