񻵋
ÔÚÑ¡Ôñϵͳ¼Ü¹¹Ê±£¬ÉìËõÐÔºÍÁìÓò¸´ÔÓÐÔÊÇÁ½¸öÖØÒªµÄ¿¼Âǵ㡣
Ä£¿é»¯µ¥Ìå´æÔÚ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×÷Ϊµ×²ãƽ̨£¬Õ¹Ê¾ÁËÒ»¸öÕæÊµµÄÄ£¿é»¯µ¥Ìå¡£
²»¹ÜÊǵ¥Ì廹ÊÇ΢·þÎñ£¬ËüÃǶ¼²»ÊÇÒøµ¯¡£¹ØÓÚ¡°ÎÒÓ¦¸ÃÑ¡ÔñÄÄÒ»¸ö¡±ÕâÀàÎÊÌâµÄ´ð°¸Í¨³£¶¼ÊÇ¡°ÕâÈ¡¾öÓÚ¡¡¡±¡£Èç¹ûÓÐÈ˸ÒÅÄÐØ¸¬£¬ÄÇôËûÒ»¶¨ÊÇÔÚÆÛÆÄã¡£´ÓϵͳµÄÉìËõÐԺ͸´ÔÓÐÔ³ö·¢£¬È»ºó×ö³ö¾ö¶¨¡£
|