{"id":11679,"date":"2026-05-21T19:32:14","date_gmt":"2026-05-21T11:32:14","guid":{"rendered":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/"},"modified":"2026-05-30T15:26:15","modified_gmt":"2026-05-30T07:26:15","slug":"beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures","status":"publish","type":"post","link":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/","title":{"rendered":"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng"},"content":{"rendered":"<h2 data-nodeid=\"5800\">\ud83d\udcd6Gi\u1edbi thi\u1ec7u<\/h2>\n<p data-nodeid=\"5801\">Trong ki\u1ebfn tr\u00fac ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, s\u1ef1 c\u0103ng th\u1eb3ng gi\u1eefa\u00a0<strong data-nodeid=\"5904\">s\u1ef1 \u1ed5n \u0111\u1ecbnh c\u1ed1t l\u00f5i<\/strong>\u00a0v\u00e0\u00a0<strong data-nodeid=\"5905\">s\u1ef1 linh ho\u1ea1t theo ng\u1eef c\u1ea3nh<\/strong>\u00a0l\u00e0 li\u00ean t\u1ee5c. C\u00e1c t\u1ed5 ch\u1ee9c th\u01b0\u1eddng xuy\u00ean v\u01b0\u1edbng v\u00e0o vi\u1ec7c m\u1edf r\u1ed9ng c\u00e1c m\u00f4 h\u00ecnh mi\u1ec1n n\u1ec1n t\u1ea3ng cho c\u00e1c y\u00eau c\u1ea7u c\u1ee5 th\u1ec3 v\u1ec1 c\u00f4ng ngh\u1ec7, quy \u0111\u1ecbnh ho\u1eb7c kh\u00e1ch h\u00e0ng m\u00e0 kh\u00f4ng vi ph\u1ea1m nguy\u00ean t\u1eafc t\u00e1ch bi\u1ec7t tr\u00e1ch nhi\u1ec7m, g\u00e2y ra s\u1ef1 tr\u00f9ng l\u1eb7p ho\u1eb7c l\u00e0m v\u1ee1 nguy\u00ean t\u1eafc M\u1edf\/\u0110\u00f3ng. C\u00e1c c\u01a1 ch\u1ebf UML truy\u1ec1n th\u1ed1ng nh\u01b0\u00a0<code data-backticks=\"1\" data-nodeid=\"5900\">\u00abimport\u00bb<\/code>\u00a0ho\u1eb7c\u00a0<code data-backticks=\"1\" data-nodeid=\"5902\">\u00abaccess\u00bb<\/code>\u00a0gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 hi\u1ec3n th\u1ecb kh\u00f4ng gian t\u00ean nh\u01b0ng kh\u00f4ng \u0111\u1ee7 khi c\u1ea7n h\u1ee3p nh\u1ea5t c\u1ea5u tr\u00fac. Ch\u00fang khi\u1ebfn c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n ph\u1ea3i t\u1ef1 tay k\u1ebft h\u1ee3p c\u00e1c m\u00f4 h\u00ecnh b\u1ecb ph\u00e2n m\u1ea3nh, l\u1eb7p l\u1ea1i thu\u1ed9c t\u00ednh ho\u1eb7c li\u00ean k\u1ebft ch\u1eb7t ch\u1ebd h\u1ea1 t\u1ea7ng v\u1edbi logic kinh doanh.<\/p>\n<p data-nodeid=\"5802\">Xu\u1ea5t hi\u1ec7n\u00a0<strong data-nodeid=\"5913\">M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0<\/strong>\u00a0(<code data-backticks=\"1\" data-nodeid=\"5911\">\u00abmerge\u00bb<\/code>). Th\u01b0\u1eddng b\u1ecb hi\u1ec3u nh\u1ea7m ho\u1eb7c ch\u01b0a \u0111\u01b0\u1ee3c t\u1eadn d\u1ee5ng h\u1ebft, m\u1ed1i quan h\u1ec7 c\u1ea5p \u0111\u1ed9 chu\u1ea9n m\u1ef1c n\u00e0y cung c\u1ea5p m\u1ed9t c\u01a1 ch\u1ebf x\u00e1c \u0111\u1ecbnh, d\u1ef1a tr\u00ean m\u00f4 h\u00ecnh \u0111\u1ec3 m\u1edf r\u1ed9ng, chuy\u00ean bi\u1ec7t h\u00f3a v\u00e0 t\u1ea1o l\u1edbp n\u1ed9i dung g\u00f3i m\u1ed9t c\u00e1ch t\u1eebng b\u01b0\u1edbc m\u00e0 kh\u00f4ng thay \u0111\u1ed5i \u0111\u1ecbnh ngh\u0129a ngu\u1ed3n. Nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf n\u00e0y kh\u00e1m ph\u00e1 c\u00e1ch m\u1ed9t \u0111\u1ed9i ki\u1ebfn tr\u00fac doanh nghi\u1ec7p quy m\u00f4 trung b\u00ecnh \u0111\u00e3 t\u1eadn d\u1ee5ng G\u1ed9p G\u00f3i \u0111\u1ec3 thi\u1ebft k\u1ebf n\u1ec1n t\u1ea3ng x\u1eed l\u00fd thanh to\u00e1n c\u00f3 kh\u1ea3 n\u0103ng t\u00edch h\u1ee3p cao, s\u1eb5n s\u00e0ng cho d\u00f2ng s\u1ea3n ph\u1ea9m. B\u1eb1ng c\u00e1ch ph\u00e2n t\u00edch tri\u1ec3n khai c\u1ee7a h\u1ecd, ch\u00fang ta s\u1ebd th\u1ea5y G\u1ed9p G\u00f3i bi\u1ebfn l\u00fd thuy\u1ebft UML tr\u1eebu t\u01b0\u1ee3ng th\u00e0nh b\u1ea3n thi\u1ebft k\u1ebf th\u1ef1c t\u1ebf cho qu\u1ea3n l\u00fd m\u00f4 h\u00ecnh c\u1ea5p doanh nghi\u1ec7p, kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng khung, v\u00e0 c\u00e1c ranh gi\u1edbi ki\u1ebfn tr\u00fac s\u1ea1ch s\u1ebd.<\/p>\n<p id=\"FhkzRXo\"><img alt=\"UML 2.0 Package Merge for Layered &amp; Extensible Architectures\" class=\"alignnone wp-image-24694 size-full\" decoding=\"async\" height=\"508\" loading=\"lazy\" sizes=\"auto, (max-width: 498px) 100vw, 498px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png 498w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f-294x300.png 294w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f-147x150.png 147w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f-400x408.png 400w\" width=\"498\"\/><\/p>\n<hr data-nodeid=\"5803\"\/>\n<h2 data-nodeid=\"5804\">\ud83c\udfe2 Nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf: N\u1ec1n t\u1ea3ng Thanh to\u00e1n \u0110a K\u00eanh c\u1ee7a AuroraPay<\/h2>\n<h3 data-nodeid=\"5805\">1. B\u1ed1i c\u1ea3nh v\u00e0 Th\u00e1ch th\u1ee9c Ki\u1ebfn tr\u00fac<\/h3>\n<p data-nodeid=\"5806\"><strong data-nodeid=\"5924\">AuroraPay<\/strong>, m\u1ed9t nh\u00e0 cung c\u1ea5p gi\u1ea3i ph\u00e1p fintech, \u0111\u00e3 \u0111\u01b0\u1ee3c giao nhi\u1ec7m v\u1ee5 x\u00e2y d\u1ef1ng n\u1ec1n t\u1ea3ng x\u1eed l\u00fd thanh to\u00e1n th\u1ebf h\u1ec7 ti\u1ebfp theo. H\u1ec7 th\u1ed1ng c\u1ea7n h\u1ed7 tr\u1ee3:<\/p>\n<ul data-nodeid=\"5807\">\n<li data-nodeid=\"5808\">\n<p data-nodeid=\"5809\">M\u1ed9t mi\u1ec1n kinh doanh thu\u1ea7n t\u00fay, kh\u00f4ng ph\u1ee5 thu\u1ed9c c\u00f4ng ngh\u1ec7 (<code data-backticks=\"1\" data-nodeid=\"5926\">Ng\u01b0\u1eddi d\u00f9ng<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"5928\">Giao d\u1ecbch<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"5930\">S\u1ed5 c\u00e1i<\/code>)<\/p>\n<\/li>\n<li data-nodeid=\"5810\">\n<p data-nodeid=\"5811\">Ba b\u1ed1i c\u1ea3nh tri\u1ec3n khai kh\u00e1c nhau: Cloud SaaS, T\u00edch h\u1ee3p Ng\u00e2n h\u00e0ng t\u1ea1i ch\u1ed7, v\u00e0 SDK Di \u0111\u1ed9ng<\/p>\n<\/li>\n<li data-nodeid=\"5812\">\n<p data-nodeid=\"5813\">Tu\u00e2n th\u1ee7 nghi\u00eam ng\u1eb7t quy \u0111\u1ecbnh (PCI-DSS, GDPR) y\u00eau c\u1ea7u che gi\u1ea5u d\u1eef li\u1ec7u theo ng\u1eef c\u1ea3nh, nh\u1eadt k\u00fd ki\u1ec3m to\u00e1n v\u00e0 c\u00e1c chi\u1ebfn l\u01b0\u1ee3c l\u01b0u tr\u1eef c\u1ee5 th\u1ec3 theo khu v\u1ef1c<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"5814\"><strong data-nodeid=\"5942\">V\u1ea5n \u0111\u1ec1:<\/strong><br \/>\nBan \u0111\u1ea7u, nh\u00f3m ki\u1ebfn tr\u00fac \u0111\u00e3 s\u1eed d\u1ee5ng\u00a0<code data-backticks=\"1\" data-nodeid=\"5940\">\u00abimport\u00bb<\/code>\u00a0\u0111\u1ec3 k\u00e9o mi\u1ec1n c\u1ed1t l\u00f5i v\u00e0o t\u1eebng g\u00f3i ng\u1eef c\u1ea3nh. \u0110i\u1ec1u n\u00e0y d\u1eabn \u0111\u1ebfn:<\/p>\n<ul data-nodeid=\"5815\">\n<li data-nodeid=\"5816\">\n<p data-nodeid=\"5817\"><strong data-nodeid=\"5947\">S\u1ef1 ph\u00e2n m\u1ea3nh c\u1ea5u tr\u00fac:<\/strong>\u00a0M\u1ed7i g\u00f3i ng\u1eef c\u1ea3nh ph\u1ea3i khai b\u00e1o l\u1ea1i c\u00e1c l\u1edbp mi\u1ec1n ch\u1ec9 \u0111\u1ec3 th\u00eam ID l\u01b0u tr\u1eef, c\u1edd m\u00e3 h\u00f3a ho\u1eb7c th\u1eddi \u0111i\u1ec3m ki\u1ec3m to\u00e1n.<\/p>\n<\/li>\n<li data-nodeid=\"5818\">\n<p data-nodeid=\"5819\"><strong data-nodeid=\"5952\">N\u1ee3 \u0111\u1ed3ng b\u1ed9 h\u00f3a:<\/strong>\u00a0Khi m\u00f4 h\u00ecnh mi\u1ec1n ph\u00e1t tri\u1ec3n, c\u00e1c g\u00f3i ng\u1eef c\u1ea3nh c\u1ea7n c\u1eadp nh\u1eadt th\u1ee7 c\u00f4ng, d\u1ec5 sai s\u00f3t.<\/p>\n<\/li>\n<li data-nodeid=\"5820\">\n<p data-nodeid=\"5821\"><strong data-nodeid=\"5957\">Vi ph\u1ea1m ki\u1ebfn tr\u00fac s\u1ea1ch:<\/strong>\u00a0C\u00e1c v\u1ea5n \u0111\u1ec1 h\u1ea1 t\u1ea7ng l\u1ea5n sang \u0111\u1ecbnh ngh\u0129a mi\u1ec1n, khi\u1ebfn ki\u1ec3m th\u1eed \u0111\u01a1n v\u1ecb v\u00e0 ki\u1ec3m to\u00e1n quy \u0111\u1ecbnh tr\u1edf n\u00ean ph\u1ee9c t\u1ea1p.<\/p>\n<\/li>\n<\/ul>\n<h3 data-nodeid=\"5822\">2. Gi\u1ea3i ph\u00e1p G\u00f3i G\u1ed9p<\/h3>\n<p data-nodeid=\"5823\">Nh\u00f3m ki\u1ebfn tr\u00fac \u0111\u00e3 chuy\u1ec3n h\u01b0\u1edbng sang\u00a0<strong data-nodeid=\"5964\">G\u1ed9p G\u00f3i UML 2.0<\/strong>. H\u1ecd t\u00e1i c\u1ea5u tr\u00fac m\u00f4 h\u00ecnh th\u00e0nh m\u1ed9t topo l\u1edbp c\u00f3 h\u01b0\u1edbng:<\/p>\n<ul data-nodeid=\"5824\">\n<li data-nodeid=\"5825\">\n<p data-nodeid=\"5826\"><strong data-nodeid=\"5971\">G\u00f3i M\u1ee5c ti\u00eau (<code data-backticks=\"1\" data-nodeid=\"5967\">CoreDomain<\/code>)<\/strong>: V\u1eabn gi\u1eef nguy\u00ean tr\u1ea1ng. Ch\u1ec9 \u0111\u1ecbnh ngh\u0129a c\u00e1c kh\u00e1i ni\u1ec7m kinh doanh, ki\u1ec3m tra t\u00ednh h\u1ee3p l\u1ec7 v\u00e0 h\u00e0nh vi mi\u1ec1n.<\/p>\n<\/li>\n<li data-nodeid=\"5827\">\n<p data-nodeid=\"5828\"><strong data-nodeid=\"5986\">C\u00e1c g\u00f3i Ngu\u1ed3n (<code data-backticks=\"1\" data-nodeid=\"5974\">CloudPersistence<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"5976\">BankingCompliance<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"5978\">MobileSDK<\/code>)<\/strong>: M\u1ed7i g\u00f3i \u0111\u00e3 kh\u1edfi t\u1ea1o m\u1ed9t m\u1ed1i quan h\u1ec7\u00a0<code data-backticks=\"1\" data-nodeid=\"5982\">\u00abmerge\u00bb<\/code>\u00a0m\u1ed1i quan h\u1ec7 v\u1edbi\u00a0<code data-backticks=\"1\" data-nodeid=\"5984\">CoreDomain<\/code>. Ch\u00fang khai b\u00e1o t\u00ean l\u1edbp t\u01b0\u01a1ng \u1ee9ng v\u00e0 ch\u00e8n c\u00e1c thu\u1ed9c t\u00ednh, thao t\u00e1c v\u00e0 g\u00f3i con \u0111\u1eb7c th\u00f9 ng\u1eef c\u1ea3nh.<\/p>\n<\/li>\n<\/ul>\n<p data-nodeid=\"5829\">C\u00e1ch ti\u1ebfp c\u1eadn n\u00e0y bi\u1ebfn G\u1ed9p G\u00f3i th\u00e0nh m\u1ed9t ki\u1ebfn tr\u00fac\u00a0<strong data-nodeid=\"5992\">c\u01a1 ch\u1ebf d\u1ec7t<\/strong>, cho ph\u00e9p m\u1ed7i l\u1edbp h\u1ea5p th\u1ee5 v\u00e0 chuy\u00ean bi\u1ec7t h\u00f3a m\u00f4 h\u00ecnh c\u01a1 s\u1edf m\u1ed9t c\u00e1ch ng\u1ea7m \u0111\u1ecbnh.<\/p>\n<h3 data-nodeid=\"5830\">3. M\u00f4 h\u00ecnh h\u00f3a ki\u1ebfn tr\u00fac (Bi\u1ec3u di\u1ec5n b\u1eb1ng PlantUML)<\/h3>\n<p data-nodeid=\"5831\">\u0110\u1ed9i ng\u0169 \u0111\u00e3 ghi ch\u00e9p m\u1ed1i quan h\u1ec7 h\u1ee3p nh\u1ea5t n\u1ec1n t\u1ea3ng nh\u01b0 sau:<\/p>\n<p id=\"GwTARWK\"><img alt=\"\" class=\"alignnone size-full wp-image-24693\" decoding=\"async\" height=\"670\" loading=\"lazy\" sizes=\"auto, (max-width: 813px) 100vw, 813px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eecc0e9ac8.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eecc0e9ac8.png 813w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eecc0e9ac8-300x247.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eecc0e9ac8-768x633.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eecc0e9ac8-150x124.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eecc0e9ac8-400x330.png 400w\" width=\"813\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com#plantuml:dLJRRjf047stv7yOyP025KZj8ufGBXOIQYeXeEdpQ3t0blMkjHSQjyeNzHFwbY_Bh4sfGKf2-xBIxexdd3ddhA-SH-j3eTB4RQKkqM81pbUAUBLID5UALXwy0IlN6m-vj2IyD3fDqiHBpxKp55jS4tmco-kr5HlfkIPO6i5riCRY32l8J85ImmNCo3hfF6b1y9Lm9_Kwzde77uOmCK7d6DkZWYLoFtzetvtgbKKc5khU0rnhuxmKlJGfzoMTMsEf0Ue0EeXRkBoS69MJ7O_XPve028NEGUUB8tieYflc5k1zu8t6WjalM8N8hZxUaPMhwjPIJjfBLAxR6y6DCOfGnvB7kBG0bXQrmrgh0yxoGHzW_D_xQNw29L29eD3JXAZ6oKZ80jKUvx4HxECG5YLVe98_A8U52LPGMo_9F3qvA6fdBa3gRsoC0s6qfmT_f9mo8MzPqr2EXsyB6AlQ2WxS1ct-YQhZgGRiBCx9IHPGL7DQy-GdSxjAYwMPMPxLLjbDdFpUoFmiUIEBbhu3ZZFdSw_kdJbWO0peZfOcOpftkAKJbBsusP-WSnARP6TKagwvfqcZp32Kmt6JiX4y_QfbVleTlzV64p-Q4iogOHQRz_lJebHII0yiGr2U1uU5s521q9q7JbL1S2_fUs_Kxn-FUqP0_r_rjvBzJyQqV3adwY_QzDeJECD5TWgY2T6CAzxmh-mP\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Ch\u1ec9nh s\u1eeda PlantUML trong VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:dPH1QnD15CVlWNo7Hm_QHbBGOoYbDg4gQKkeqViu-x8xP7TcdPaDNQG7yU31atWI4IsbAFLWGK_PWz2LVe_z9hxPNM9Iq4OliypCc_UV-VtVsorZcRP953ORPYnap3IBmDWqH1gruDLMY2CBLe4MVc314ngv5Kes6ys65PPY-wAO_f1WTJxbSB_8JcAGGJ4zjN0l_oOwi2UAxBc4kubMcWrO2ZUWLsGlBUnUdYTqhCY-kcGtuVPwUGBsYkoKWnNvMGBxvLbRJ4-a3wlZ8FzEtpYW2B11KcHlEP3MiOlu9FsrPYDcVCnyX9MkqjXJ4HDo1PW1DuMDZHqLUgWtD-5Pim70GsOCh3mog6T1RbBj0jnAQ29PX1ruI4IaNozFK8jHsjNeeRI2XMPrhGFRIeN8f0ivSiESm50pQLZ9RQOpF9Gp6Vjx_u5tHOkpa2SXixY3MEhqa8k8XRNEKSNkJirktoSeRoHqWoJDpoGy4ILg8bTa7uJ3TAo8s9n9a_mZy23_B47wP0LmnpfO81cgn1kWDi9Ob1oh9xZ5wu6wg7cYRHCmxVKnNNnbssEM7Q0H19Id1-WJYIiSJ2hvK0qqlLsdlMr7uh4ItbAutItcUBUfrAbsQzgxQgR1D0_418UgHzVPPMEyebB37YpKtqB9sm29x-LvaRrpMIjAwqcylbbLO0SklaIeVRp8N2wfB59pnQ16rIsTKAlLfLn9tL5zwYuBJnEoXTobCe_Wv-iYUoK3MDrsNi4XHgMnP2zTxBsWVNBzHKIsqcgwrccr5W4jKUB_xzDrlV5FLiuvkKop_D7OlpNH4hwZzC1PvIpReWdz67y1\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\" data-nodeid=\"5832\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nskinparam style strictuml\r\nleft to right direction\r\n\r\ntitle Ki\u1ebfn tr\u00fac H\u1ee3p nh\u1ea5t G\u00f3i: Mi\u1ec1n AuroraPay &amp; D\u1ec7t L\u01b0u tr\u1eef\r\n\r\n' 1. G\u00f3i M\u1ee5c ti\u00eau N\u1ec1n t\u1ea3ng (kh\u00f4ng ph\u1ee5 thu\u1ed9c h\u1ea1 t\u1ea7ng)\r\npackage \"CoreDomain\" as Core &lt;&lt;Folder&gt;&gt; {\r\n  class \"User\" as CoreUser {\r\n    +username: String\r\n    +verifyCredentials(): Boolean\r\n  }\r\n  \r\n  class \"Transaction\" as CoreTxn {\r\n    +transactionId: String\r\n    +calculateFees(): Decimal\r\n  }\r\n}\r\n\r\n' 2. G\u00f3i Ngu\u1ed3n Chuy\u00ean bi\u1ec7t (kh\u1edfi t\u1ea1o h\u1ee3p nh\u1ea5t v\u00e0 ch\u00e8n ng\u1eef c\u1ea3nh)\r\npackage \"CloudPersistence\" as Cloud &lt;&lt;Folder&gt;&gt; {\r\n  class \"User\" as CloudUser {\r\n    -shardKey: String\r\n    -dataResidencyRegion: String\r\n    +syncToPrimaryDB(): Void\r\n  }\r\n  \r\n  class \"Transaction\" as CloudTxn {\r\n    -partitionId: Long\r\n    +archiveToDataLake(): Void\r\n  }\r\n}\r\n\r\n' Ph\u1ee5 thu\u1ed9c H\u1ee3p nh\u1ea5t theo h\u01b0\u1edbng\r\nCloud .up.&gt; Core : \u00abmerge\u00bb\r\n\r\nnote top of Cloud\r\n  **C\u1ea5u tr\u00fac K\u1ebft qu\u1ea3 Ng\u1ea7m \u0111\u1ecbnh (B\u1ea3n xem t\u1ea1i th\u1eddi \u0111i\u1ec3m ch\u1ea1y):**\r\n  \r\n  class User {\r\n    +username: String\r\n    -shardKey: String\r\n    -dataResidencyRegion: String\r\n    +verifyCredentials(): Boolean\r\n    +syncToPrimaryDB(): Void\r\n  }\r\n  \r\n  class Transaction {\r\n    +transactionId: String\r\n    -partitionId: Long\r\n    +calculateFees(): Decimal\r\n    +archiveToDataLake(): Void\r\n  }\r\nend note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:dPH1QnD15CVlWNo7Hm_QHbBGOoYbDg4gQKkeqViu-x8xP7TcdPaDNQG7yU31atWI4IsbAFLWGK_PWz2LVe_z9hxPNM9Iq4OliypCc_UV-VtVsorZcRP953ORPYnap3IBmDWqH1gruDLMY2CBLe4MVc314ngv5Kes6ys65PPY-wAO_f1WTJxbSB_8JcAGGJ4zjN0l_oOwi2UAxBc4kubMcWrO2ZUWLsGlBUnUdYTqhCY-kcGtuVPwUGBsYkoKWnNvMGBxvLbRJ4-a3wlZ8FzEtpYW2B11KcHlEP3MiOlu9FsrPYDcVCnyX9MkqjXJ4HDo1PW1DuMDZHqLUgWtD-5Pim70GsOCh3mog6T1RbBj0jnAQ29PX1ruI4IaNozFK8jHsjNeeRI2XMPrhGFRIeN8f0ivSiESm50pQLZ9RQOpF9Gp6Vjx_u5tHOkpa2SXixY3MEhqa8k8XRNEKSNkJirktoSeRoHqWoJDpoGy4ILg8bTa7uJ3TAo8s9n9a_mZy23_B47wP0LmnpfO81cgn1kWDi9Ob1oh9xZ5wu6wg7cYRHCmxVKnNNnbssEM7Q0H19Id1-WJYIiSJ2hvK0qqlLsdlMr7uh4ItbAutItcUBUfrAbsQzgxQgR1D0_418UgHzVPPMEyebB37YpKtqB9sm29x-LvaRrpMIjAwqcylbbLO0SklaIeVRp8N2wfB59pnQ16rIsTKAlLfLn9tL5zwYuBJnEoXTobCe_Wv-iYUoK3MDrsNi4XHgMnP2zTxBsWVNBzHKIsqcgwrccr5W4jKUB_xzDrlV5FLiuvkKop_D7OlpNH4hwZzC1PvIpReWdz67y1\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com#plantuml:dLJRRjf047stv7yOyP025KZj8ufGBXOIQYeXeEdpQ3t0blMkjHSQjyeNzHFwbY_Bh4sfGKf2-xBIxexdd3ddhA-SH-j3eTB4RQKkqM81pbUAUBLID5UALXwy0IlN6m-vj2IyD3fDqiHBpxKp55jS4tmco-kr5HlfkIPO6i5riCRY32l8J85ImmNCo3hfF6b1y9Lm9_Kwzde77uOmCK7d6DkZWYLoFtzetvtgbKKc5khU0rnhuxmKlJGfzoMTMsEf0Ue0EeXRkBoS69MJ7O_XPve028NEGUUB8tieYflc5k1zu8t6WjalM8N8hZxUaPMhwjPIJjfBLAxR6y6DCOfGnvB7kBG0bXQrmrgh0yxoGHzW_D_xQNw29L29eD3JXAZ6oKZ80jKUvx4HxECG5YLVe98_A8U52LPGMo_9F3qvA6fdBa3gRsoC0s6qfmT_f9mo8MzPqr2EXsyB6AlQ2WxS1ct-YQhZgGRiBCx9IHPGL7DQy-GdSxjAYwMPMPxLLjbDdFpUoFmiUIEBbhu3ZZFdSw_kdJbWO0peZfOcOpftkAKJbBsusP-WSnARP6TKagwvfqcZp32Kmt6JiX4y_QfbVleTlzV64p-Q4iogOHQRz_lJebHII0yiGr2U1uU5s521q9q7JbL1S2_fUs_Kxn-FUqP0_r_rjvBzJyQqV3adwY_QzDeJECD5TWgY2T6CAzxmh-mP\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Ch\u1ec9nh s\u1eeda PlantUML trong VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"5833\">4. C\u00e1ch th\u1ee9c c\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng trong th\u1ef1c t\u1ebf<\/h3>\n<p data-nodeid=\"5834\">Trong c\u00e1c giai \u0111o\u1ea1n x\u00e1c th\u1ef1c m\u00f4 h\u00ecnh v\u00e0 sinh m\u00e3, b\u1ed9 th\u1ef1c thi UML \u0111\u00e3 \u00e1p d\u1ee5ng c\u00e1c quy t\u1eafc gi\u1ea3i quy\u1ebft x\u00e1c \u0111\u1ecbnh:<\/p>\n<ul data-nodeid=\"5835\">\n<li data-nodeid=\"5836\">\n<p data-nodeid=\"5837\"><strong data-nodeid=\"6017\">Ph\u00f9 h\u1ee3p t\u00ean v\u00e0 ki\u1ec3u metaclass:<\/strong>\u00a0<code data-backticks=\"1\" data-nodeid=\"6003\">User<\/code>\u00a0trong\u00a0<code data-backticks=\"1\" data-nodeid=\"6005\">CloudPersistence<\/code>\u00a0ph\u00f9 h\u1ee3p ho\u00e0n h\u1ea3o\u00a0<code data-backticks=\"1\" data-nodeid=\"6007\">User<\/code>\u00a0trong\u00a0<code data-backticks=\"1\" data-nodeid=\"6009\">CoreDomain<\/code>\u00a0(c\u1ea3 hai\u00a0<code data-backticks=\"1\" data-nodeid=\"6011\">Class<\/code>\u00a0stereotype). B\u1ea5t k\u1ef3 l\u1ed7i ch\u00ednh t\u1ea3 n\u00e0o nh\u01b0\u00a0<code data-backticks=\"1\" data-nodeid=\"6013\">Users<\/code>\u00a0ho\u1eb7c\u00a0<code data-backticks=\"1\" data-nodeid=\"6015\">UserEntity<\/code>\u00a0s\u1ebd g\u00e2y ra xung \u0111\u1ed9t kh\u00f4ng gian t\u00ean thay v\u00ec m\u1ed9t s\u1ef1 h\u1ee3p nh\u1ea5t.<\/p>\n<\/li>\n<li data-nodeid=\"5838\">\n<p data-nodeid=\"5839\"><strong data-nodeid=\"6034\">T\u00edch l\u0169y thu\u1ed9c t\u00ednh v\u00e0 thao t\u00e1c:<\/strong>\u00a0L\u1edbp \u0111\u00e3 h\u1ee3p nh\u1ea5t\u00a0<code data-backticks=\"1\" data-nodeid=\"6024\">User<\/code>\u00a0l\u1edbp \u0111\u00e3 \u0111\u01b0\u1ee3c k\u1ebft h\u1ee3p li\u1ec1n m\u1ea1ch\u00a0<code data-backticks=\"1\" data-nodeid=\"6026\">username<\/code>\u00a0+\u00a0<code data-backticks=\"1\" data-nodeid=\"6028\">x\u00e1c minh\u0110\u0103ngNh\u1eadp()<\/code>\u00a0(t\u1eeb Core) v\u1edbi\u00a0<code data-backticks=\"1\" data-nodeid=\"6030\">shardKey<\/code>\u00a0+\u00a0<code data-backticks=\"1\" data-nodeid=\"6032\">\u0111\u1ed3ngB\u1ed9V\u1edbiC\u01a1S\u1edfD\u1eefLi\u1ec7uCh\u00ednh()<\/code>\u00a0(t\u1eeb Cloud). Kh\u00f4ng c\u1ea7n ph\u1ea3i k\u1ebft h\u1ee3p th\u1ee7 c\u00f4ng.<\/p>\n<\/li>\n<li data-nodeid=\"5840\">\n<p data-nodeid=\"5841\"><strong data-nodeid=\"6043\">\u1ed4n \u0111\u1ecbnh h\u00f3a t\u1ed5ng qu\u00e1t h\u00f3a:<\/strong>\u00a0C\u1ea3 hai g\u00f3i \u0111\u1ec1u \u0111\u1ecbnh ngh\u0129a\u00a0<code data-backticks=\"1\" data-nodeid=\"6039\">PremiumUser<\/code>\u00a0t\u1ed5ng qu\u00e1t h\u00f3a\u00a0<code data-backticks=\"1\" data-nodeid=\"6041\">User<\/code>. B\u1ed9 h\u1ee3p nh\u1ea5t \u0111\u00e3 gom c\u00e1c m\u0169i t\u00ean k\u1ebf th\u1eeba tr\u00f9ng l\u1eb7p th\u00e0nh m\u1ed9t c\u1ea5u tr\u00fac ph\u00e2n c\u1ea5p duy nh\u1ea5t, r\u00f5 r\u00e0ng trong qu\u00e1 tr\u00ecnh bi\u00ean d\u1ecbch m\u00f4 h\u00ecnh.<\/p>\n<\/li>\n<li data-nodeid=\"5842\">\n<p data-nodeid=\"5843\"><strong data-nodeid=\"6056\">Duy\u1ec7t \u0111\u1ec7 quy g\u00f3i con:<\/strong>\u00a0<code data-backticks=\"1\" data-nodeid=\"6048\">CoreDomain<\/code>\u00a0ch\u1ee9a m\u1ed9t\u00a0<code data-backticks=\"1\" data-nodeid=\"6050\">ComplianceRules<\/code>\u00a0g\u00f3i con.\u00a0<code data-backticks=\"1\" data-nodeid=\"6052\">CloudPersistence<\/code>\u00a0kh\u1eb3ng \u0111\u1ecbnh m\u1ed9t\u00a0<code data-backticks=\"1\" data-nodeid=\"6054\">ComplianceRules<\/code>\u00a0g\u00f3i con, t\u1ef1 \u0111\u1ed9ng h\u1ee3p nh\u1ea5t c\u00e1c ch\u00ednh s\u00e1ch ki\u1ec3m to\u00e1n c\u1ee5 th\u1ec3 cho \u0111\u00e1m m\u00e2y m\u00e0 kh\u00f4ng c\u1ea7n \u00e1nh x\u1ea1 b\u1ed5 sung.<\/p>\n<\/li>\n<\/ul>\n<h3 data-nodeid=\"5844\">5. L\u1ee3i \u00edch \u0111\u1ea1t \u0111\u01b0\u1ee3c<\/h3>\n<table data-nodeid=\"5846\">\n<thead data-nodeid=\"5847\">\n<tr data-nodeid=\"5848\">\n<th data-nodeid=\"5850\">M\u1ee5c ti\u00eau ki\u1ebfn tr\u00fac<\/th>\n<th data-nodeid=\"5851\">K\u1ebft qu\u1ea3 \u0111\u1ea1t \u0111\u01b0\u1ee3c th\u00f4ng qua\u00a0<code data-backticks=\"1\" data-nodeid=\"6060\">\u00abmerge\u00bb<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"5854\">\n<tr data-nodeid=\"5855\">\n<td data-nodeid=\"5856\"><strong data-nodeid=\"6064\">T\u00e1ch bi\u1ec7t tr\u00e1ch nhi\u1ec7m<\/strong><\/td>\n<td data-nodeid=\"5857\">C\u00e1c k\u1ef9 s\u01b0 mi\u1ec1n duy tr\u00ec\u00a0<code data-backticks=\"1\" data-nodeid=\"6066\">CoreDomain<\/code>\u00a0\u0111\u1ed9c l\u1eadp. C\u00e1c \u0111\u1ed9i h\u1ea1 t\u1ea7ng l\u00e0m vi\u1ec7c trong c\u00e1c g\u00f3i ngu\u1ed3n t\u00e1ch bi\u1ec7t.<\/td>\n<\/tr>\n<tr data-nodeid=\"5858\">\n<td data-nodeid=\"5859\"><strong data-nodeid=\"6071\">Kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng d\u00f2ng s\u1ea3n ph\u1ea9m<\/strong><\/td>\n<td data-nodeid=\"5860\">\u0110\u01b0\u1ee3c t\u1ea1o ra\u00a0<code data-backticks=\"1\" data-nodeid=\"6073\">BankingCompliance<\/code>\u00a0v\u00e0\u00a0<code data-backticks=\"1\" data-nodeid=\"6075\">MobileSDK<\/code>\u00a0c\u00e1c g\u00f3i b\u1eb1ng c\u00e1ch \u0111\u01a1n gi\u1ea3n h\u1ee3p nh\u1ea5t\u00a0<code data-backticks=\"1\" data-nodeid=\"6077\">CoreDomain<\/code>\u00a0v\u00e0 ch\u00e8n c\u00e1c tr\u01b0\u1eddng c\u1ee5 th\u1ec3 theo kh\u00e1ch h\u00e0ng. Kh\u00f4ng c\u00f3 s\u1ef1 tr\u00f9ng l\u1eb7p n\u00e0o.<\/td>\n<\/tr>\n<tr data-nodeid=\"5861\">\n<td data-nodeid=\"5862\"><strong data-nodeid=\"6082\">S\u1ef1 ti\u1ebfn h\u00f3a s\u1ea1ch s\u1ebd<\/strong><\/td>\n<td data-nodeid=\"5863\">Th\u00eam\u00a0<code data-backticks=\"1\" data-nodeid=\"6084\">twoFactorEnabled<\/code>\u00a0v\u00e0o\u00a0<code data-backticks=\"1\" data-nodeid=\"6086\">CoreDomain.User<\/code>\u00a0t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c lan truy\u1ec1n \u0111\u1ebfn t\u1ea5t c\u1ea3 c\u00e1c ng\u1eef c\u1ea3nh \u0111\u00e3 h\u1ee3p nh\u1ea5t trong l\u1ea7n x\u00e2y d\u1ef1ng ti\u1ebfp theo.<\/td>\n<\/tr>\n<tr data-nodeid=\"5864\">\n<td data-nodeid=\"5865\"><strong data-nodeid=\"6091\">S\u1ef1 r\u00f5 r\u00e0ng v\u1ec1 quy \u0111\u1ecbnh<\/strong><\/td>\n<td data-nodeid=\"5866\">C\u00e1c ki\u1ec3m to\u00e1n vi\u00ean tu\u00e2n th\u1ee7 \u0111\u00e3 xem x\u00e9t\u00a0<code data-backticks=\"1\" data-nodeid=\"6093\">CoreDomain<\/code>\u00a0v\u1ec1 logic kinh doanh v\u00e0\u00a0<code data-backticks=\"1\" data-nodeid=\"6095\">CloudPersistence<\/code>\u00a0v\u1ec1 quy t\u1eafc l\u01b0u tr\u1eef d\u1eef li\u1ec7u. C\u00e1c ranh gi\u1edbi v\u1eabn r\u00f5 r\u00e0ng.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 data-nodeid=\"5867\">6. \u0110\u1eb7t ra gi\u1edbi h\u1ea1n v\u00e0 th\u1ef1c hi\u1ec7n c\u00e1c ph\u01b0\u01a1ng ph\u00e1p t\u1ed1t nh\u1ea5t \u0111\u00e3 \u00e1p d\u1ee5ng<\/h3>\n<p data-nodeid=\"5868\">\u0110\u1ed9i ng\u0169 \u0111\u00e3 g\u1eb7p ph\u1ea3i s\u1ef1 c\u1ea3n tr\u1edf trong th\u1ef1c t\u1ebf v\u00e0 tri\u1ec3n khai c\u00e1c bi\u1ec7n ph\u00e1p gi\u1ea3m thi\u1ec3u ph\u00f9 h\u1ee3p v\u1edbi h\u01b0\u1edbng d\u1eabn UML 2.0:<\/p>\n<ul data-nodeid=\"5869\">\n<li data-nodeid=\"5870\">\n<p data-nodeid=\"5871\"><strong data-nodeid=\"6111\">\ud83d\udd27 S\u1ef1 kh\u00e1c bi\u1ec7t v\u1ec1 h\u1ed7 tr\u1ee3 c\u00f4ng c\u1ee5:<\/strong>\u00a0C\u00f4ng c\u1ee5 CASE ch\u00ednh c\u1ee7a h\u1ecd l\u00e0m ph\u1eb3ng c\u00e1c g\u00f3i \u0111\u00e3 h\u1ee3p nh\u1ea5t trong qu\u00e1 tr\u00ecnh sinh m\u00e3.\u00a0<em data-nodeid=\"6112\">Bi\u1ec7n ph\u00e1p gi\u1ea3m thi\u1ec3u:<\/em>\u00a0H\u1ecd \u0111\u00e3 vi\u1ebft k\u1ecbch b\u1ea3n m\u1ed9t b\u01b0\u1edbc ki\u1ec3m tra tr\u01b0\u1edbc khi x\u00e2y d\u1ef1ng, t\u1ea1o ra m\u1ed9t b\u1ea3n xem t\u00e0i li\u1ec7u \u0111\u00e3 h\u1ee3p nh\u1ea5t b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng\u00a0<code data-backticks=\"1\" data-nodeid=\"6109\">note<\/code>\u00a0quy \u01b0\u1edbc, \u0111\u1ea3m b\u1ea3o c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 ki\u1ec3m tra s\u01a1 \u0111\u1ed3 k\u1ebft h\u1ee3p ng\u1ea7m \u0111\u1ecbnh.<\/p>\n<\/li>\n<li data-nodeid=\"5872\">\n<p data-nodeid=\"5873\"><strong data-nodeid=\"6127\">\ud83e\udde0 G\u00e1nh n\u1eb7ng nh\u1eadn th\u1ee9c:<\/strong>\u00a0C\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n m\u1edbi g\u1eb7p kh\u00f3 kh\u0103n trong vi\u1ec7c truy v\u1ebft ngu\u1ed3n g\u1ed1c c\u1ee7a c\u00e1c thu\u1ed9c t\u00ednh c\u1ee5 th\u1ec3.\u00a0<em data-nodeid=\"6128\">Gi\u1ea3m thi\u1ec3u:<\/em>\u00a0\u00c1p d\u1ee5ng c\u00e1c quy \u01b0\u1edbc \u0111\u1eb7t t\u00ean nghi\u00eam ng\u1eb7t (<code data-backticks=\"1\" data-nodeid=\"6121\">core_<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"6123\">cloud_<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"6125\">bank_<\/code>\u00a0c\u00e1c ti\u1ec1n t\u1ed1 trong ch\u00fa th\u00edch) v\u00e0 th\u1ef1c thi c\u00e1c h\u1ed3 s\u01a1 quy\u1ebft \u0111\u1ecbnh ki\u1ebfn tr\u00fac (ADRs) ghi l\u1ea1i h\u01b0\u1edbng h\u1ee3p nh\u1ea5t.<\/p>\n<\/li>\n<li data-nodeid=\"5874\">\n<p data-nodeid=\"5875\"><strong data-nodeid=\"6147\">\u26a0\ufe0f Xung \u0111\u1ed9t quy\u1ec1n truy c\u1eadp:<\/strong>\u00a0M\u1ed9t thao t\u00e1c \u0111\u01b0\u1ee3c b\u1ea3o v\u1ec7 trong\u00a0<code data-backticks=\"1\" data-nodeid=\"6133\">CoreDomain<\/code>\u00a0xung \u0111\u1ed9t v\u1edbi n\u1ed7 l\u1ef1c ghi \u0111\u00e8 c\u00f4ng khai trong m\u1ed9t g\u00f3i ngu\u1ed3n.\u00a0<em data-nodeid=\"6148\">Gi\u1ea3m thi\u1ec3u:<\/em>\u00a0Thi\u1ebft l\u1eadp ch\u00ednh s\u00e1ch m\u00f4 h\u00ecnh h\u00f3a: c\u00e1c g\u00f3i \u0111\u00edch c\u00f4ng khai c\u00e1c h\u1ee3p \u0111\u1ed3ng mi\u1ec1n d\u01b0\u1edbi d\u1ea1ng\u00a0<code data-backticks=\"1\" data-nodeid=\"6139\">c\u00f4ng khai<\/code>\u00a0ho\u1eb7c\u00a0<code data-backticks=\"1\" data-nodeid=\"6141\">b\u1ea3o v\u1ec7<\/code>, trong khi c\u00e1c g\u00f3i ngu\u1ed3n ch\u1ec9 th\u00eam\u00a0<code data-backticks=\"1\" data-nodeid=\"6143\">ri\u00eang t\u01b0<\/code>\u00a0tr\u01b0\u1eddng l\u01b0u tr\u1eef ho\u1eb7c\u00a0<code data-backticks=\"1\" data-nodeid=\"6145\">c\u00f4ng khai<\/code>\u00a0ph\u01b0\u01a1ng th\u1ee9c h\u1ea1 t\u1ea7ng.<\/p>\n<\/li>\n<li data-nodeid=\"5876\">\n<p data-nodeid=\"5877\"><strong data-nodeid=\"6161\">\ud83d\udd04 R\u1ee7i ro ph\u1ee5 thu\u1ed9c v\u00f2ng l\u1eb7p:<\/strong>\u00a0B\u1ea3n nh\u00e1p ban \u0111\u1ea7u v\u00f4 t\u00ecnh t\u1ea1o ra c\u00e1c h\u1ee3p nh\u1ea5t hai chi\u1ec1u gi\u1eefa\u00a0<code data-backticks=\"1\" data-nodeid=\"6153\">CloudPersistence<\/code>\u00a0v\u00e0\u00a0<code data-backticks=\"1\" data-nodeid=\"6155\">MobileSDK<\/code>.\u00a0<em data-nodeid=\"6162\">Gi\u1ea3m thi\u1ec3u:<\/em>\u00a0T\u00edch h\u1ee3p m\u1ed9t c\u00f4ng c\u1ee5 ki\u1ec3m tra \u0111\u1ed3 th\u1ecb ph\u1ee5 thu\u1ed9c trong CI\/CD, ph\u00e1t hi\u1ec7n b\u1ea5t k\u1ef3 m\u1ed1i quan h\u1ec7 g\u00f3i n\u00e0o kh\u00f4ng ph\u1ea3i l\u00e0 DAG (\u0110\u1ed3 th\u1ecb c\u00f3 h\u01b0\u1edbng kh\u00f4ng chu tr\u00ecnh) tr\u01b0\u1edbc khi bi\u00ean d\u1ecbch m\u00f4 h\u00ecnh.<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"5878\"\/>\n<h2 data-nodeid=\"5879\">\ud83d\udcddK\u1ebft lu\u1eadn<\/h2>\n<p data-nodeid=\"5880\">Nghi\u00ean c\u1ee9u tr\u01b0\u1eddng h\u1ee3p AuroraPay cho th\u1ea5y r\u1eb1ng<strong data-nodeid=\"6173\">K\u1ebft h\u1ee3p g\u00f3i UML 2.0<\/strong>kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t c\u1ea5u tr\u00fac m\u00f4 h\u00ecnh h\u00f3a l\u00fd thuy\u1ebft\u2014m\u00e0 l\u00e0 m\u1ed9t m\u1eabu ki\u1ebfn tr\u00fac th\u1ef1c ti\u1ec5n cho c\u00e1c h\u1ec7 th\u1ed1ng \u0111\u00f2i h\u1ecfi<strong data-nodeid=\"6174\">kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng t\u1eebng b\u01b0\u1edbc, l\u1edbp ph\u00e2n c\u1ea5p nghi\u00eam ng\u1eb7t v\u00e0 t\u00ednh linh ho\u1ea1t v\u1ec1 d\u00f2ng s\u1ea3n ph\u1ea9m<\/strong>. B\u1eb1ng c\u00e1ch coi thao t\u00e1c k\u1ebft h\u1ee3p nh\u01b0 m\u1ed9t thao t\u00e1c d\u1ec7t ng\u1ea7m theo h\u01b0\u1edbng thay v\u00ec m\u1ed9t ph\u00e9p nh\u1eadp t\u0129nh, c\u00e1c \u0111\u1ed9i c\u00f3 th\u1ec3 b\u1ea3o to\u00e0n t\u00ednh to\u00e0n v\u1eb9n c\u1ee7a c\u00e1c m\u00f4 h\u00ecnh mi\u1ec1n n\u1ec1n t\u1ea3ng trong khi an to\u00e0n \u0111\u01b0a v\u00e0o c\u00e1c v\u1ea5n \u0111\u1ec1 mang t\u00ednh ng\u1eef c\u1ea3nh c\u1ee5 th\u1ec3.<\/p>\n<p data-nodeid=\"5881\">Tuy nhi\u00ean, s\u1ee9c m\u1ea1nh c\u1ee7a n\u00f3 \u0111\u00f2i h\u1ecfi s\u1ef1 k\u1ef7 lu\u1eadt. Th\u00e0nh c\u00f4ng ph\u1ee5 thu\u1ed9c v\u00e0o c\u00e1c quy t\u1eafc \u0111\u1eb7t t\u00ean nghi\u00eam ng\u1eb7t, qu\u1ea3n l\u00fd ph\u1ee5 thu\u1ed9c kh\u00f4ng chu tr\u00ecnh, \u0111\u1ed3ng b\u1ed9 h\u00f3a m\u1ee9c \u0111\u1ed9 hi\u1ec3n th\u1ecb v\u00e0 nh\u1eadn th\u1ee9c v\u1ec1 c\u00f4ng c\u1ee5 h\u1ed7 tr\u1ee3. Khi \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng m\u1ed9t c\u00e1ch th\u1eadn tr\u1ecdng, K\u1ebft h\u1ee3p g\u00f3i s\u1ebd l\u1ea5p \u0111\u1ea7y kho\u1ea3ng c\u00e1ch gi\u1eefa thi\u1ebft k\u1ebf kh\u00e1i ni\u1ec7m v\u00e0 th\u1ef1c t\u1ebf tri\u1ec3n khai, gi\u00fap c\u00e1c \u0111\u1ed9i ki\u1ebfn tr\u00fac m\u1edf r\u1ed9ng khung ph\u1ea7n m\u1ec1m m\u00e0 kh\u00f4ng l\u00e0m v\u1ee1 v\u1ea1c c\u00e1c c\u01a1 s\u1edf m\u00e3 ngu\u1ed3n. Trong b\u1ed1i c\u1ea3nh k\u1ef9 thu\u1eadt h\u01b0\u1edbng m\u00f4 h\u00ecnh v\u00e0 ki\u1ebfn tr\u00fac n\u1ec1n t\u1ea3ng \u0111a thu\u00ea bao ti\u1ebfp t\u1ee5c th\u1ed1ng tr\u1ecb ph\u00e1t tri\u1ec3n doanh nghi\u1ec7p, vi\u1ec7c th\u00e0nh th\u1ea1o K\u1ebft h\u1ee3p g\u00f3i s\u1ebd v\u1eabn l\u00e0 m\u1ed9t n\u0103ng l\u1ef1c then ch\u1ed1t \u0111\u1ed1i v\u1edbi c\u00e1c ki\u1ebfn tr\u00fac s\u01b0 t\u00ecm ki\u1ebfm c\u00e1ch thi\u1ebft k\u1ebf c\u00e1c h\u1ec7 th\u1ed1ng v\u1eeba b\u1ec1n b\u1ec9 tr\u01b0\u1edbc s\u1ef1 thay \u0111\u1ed5i v\u1eeba tinh t\u1ebf v\u1ec1 c\u1ea5u tr\u00fac.<\/p>\n<p class=\"\" data-nodeid=\"5882\">N\u00f3i m\u1ed9t c\u00e1ch b\u1ea3n ch\u1ea5t, K\u1ebft h\u1ee3p g\u00f3i kh\u00f4ng ch\u1ec9 k\u1ebft h\u1ee3p c\u00e1c m\u00f4 h\u00ecnh; n\u00f3<strong data-nodeid=\"6183\">\u0111i\u1ec1u ph\u1ed1i \u00fd \u0111\u1ed3 ki\u1ebfn tr\u00fac<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcd6Gi\u1edbi thi\u1ec7u Trong ki\u1ebfn tr\u00fac ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, s\u1ef1 c\u0103ng th\u1eb3ng gi\u1eefa\u00a0s\u1ef1 \u1ed5n \u0111\u1ecbnh c\u1ed1t l\u00f5i\u00a0v\u00e0\u00a0s\u1ef1 linh ho\u1ea1t theo ng\u1eef c\u1ea3nh\u00a0l\u00e0 li\u00ean t\u1ee5c. C\u00e1c t\u1ed5 ch\u1ee9c th\u01b0\u1eddng xuy\u00ean v\u01b0\u1edbng v\u00e0o vi\u1ec7c m\u1edf r\u1ed9ng c\u00e1c m\u00f4 h\u00ecnh mi\u1ec1n n\u1ec1n t\u1ea3ng cho c\u00e1c y\u00eau c\u1ea7u c\u1ee5 th\u1ec3 v\u1ec1 c\u00f4ng ngh\u1ec7, quy \u0111\u1ecbnh ho\u1eb7c kh\u00e1ch h\u00e0ng m\u00e0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11680,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[36],"tags":[],"class_list":["post-11679","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uml","loop-entry","clr"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng - Visual Paradigm Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng - Visual Paradigm Blog\" \/>\n<meta property=\"og:description\" content=\"\ud83d\udcd6Gi\u1edbi thi\u1ec7u Trong ki\u1ebfn tr\u00fac ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, s\u1ef1 c\u0103ng th\u1eb3ng gi\u1eefa\u00a0s\u1ef1 \u1ed5n \u0111\u1ecbnh c\u1ed1t l\u00f5i\u00a0v\u00e0\u00a0s\u1ef1 linh ho\u1ea1t theo ng\u1eef c\u1ea3nh\u00a0l\u00e0 li\u00ean t\u1ee5c. C\u00e1c t\u1ed5 ch\u1ee9c th\u01b0\u1eddng xuy\u00ean v\u01b0\u1edbng v\u00e0o vi\u1ec7c m\u1edf r\u1ed9ng c\u00e1c m\u00f4 h\u00ecnh mi\u1ec1n n\u1ec1n t\u1ea3ng cho c\u00e1c y\u00eau c\u1ea7u c\u1ee5 th\u1ec3 v\u1ec1 c\u00f4ng ngh\u1ec7, quy \u0111\u1ecbnh ho\u1eb7c kh\u00e1ch h\u00e0ng m\u00e0 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/\" \/>\n<meta property=\"og:site_name\" content=\"Visual Paradigm Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-21T11:32:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-30T07:26:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png\" \/><meta property=\"og:image\" content=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png\" \/>\n\t<meta property=\"og:image:width\" content=\"498\" \/>\n\t<meta property=\"og:image:height\" content=\"508\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 ph\u00fat\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/\",\"url\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/\",\"name\":\"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng - Visual Paradigm Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.visual-paradigm.com\/vn\/wp-content\/uploads\/sites\/13\/2026\/05\/img_6a0eed22be51f.png\",\"datePublished\":\"2026-05-21T11:32:14+00:00\",\"dateModified\":\"2026-05-30T07:26:15+00:00\",\"author\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#breadcrumb\"},\"inLanguage\":\"vi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"vi\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#primaryimage\",\"url\":\"https:\/\/blog.visual-paradigm.com\/vn\/wp-content\/uploads\/sites\/13\/2026\/05\/img_6a0eed22be51f.png\",\"contentUrl\":\"https:\/\/blog.visual-paradigm.com\/vn\/wp-content\/uploads\/sites\/13\/2026\/05\/img_6a0eed22be51f.png\",\"width\":498,\"height\":508},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.visual-paradigm.com\/vn\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/#website\",\"url\":\"https:\/\/blog.visual-paradigm.com\/vn\/\",\"name\":\"Visual Paradigm Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.visual-paradigm.com\/vn\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"vi\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\",\"name\":\"Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"vi\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/vn\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g\",\"caption\":\"Admin\"},\"url\":\"https:\/\/blog.visual-paradigm.com\/vn\/author\/vpadminuser\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng - Visual Paradigm Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/","og_locale":"vi_VN","og_type":"article","og_title":"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng - Visual Paradigm Blog","og_description":"\ud83d\udcd6Gi\u1edbi thi\u1ec7u Trong ki\u1ebfn tr\u00fac ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i, s\u1ef1 c\u0103ng th\u1eb3ng gi\u1eefa\u00a0s\u1ef1 \u1ed5n \u0111\u1ecbnh c\u1ed1t l\u00f5i\u00a0v\u00e0\u00a0s\u1ef1 linh ho\u1ea1t theo ng\u1eef c\u1ea3nh\u00a0l\u00e0 li\u00ean t\u1ee5c. C\u00e1c t\u1ed5 ch\u1ee9c th\u01b0\u1eddng xuy\u00ean v\u01b0\u1edbng v\u00e0o vi\u1ec7c m\u1edf r\u1ed9ng c\u00e1c m\u00f4 h\u00ecnh mi\u1ec1n n\u1ec1n t\u1ea3ng cho c\u00e1c y\u00eau c\u1ea7u c\u1ee5 th\u1ec3 v\u1ec1 c\u00f4ng ngh\u1ec7, quy \u0111\u1ecbnh ho\u1eb7c kh\u00e1ch h\u00e0ng m\u00e0 [&hellip;]","og_url":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/","og_site_name":"Visual Paradigm Blog","article_published_time":"2026-05-21T11:32:14+00:00","article_modified_time":"2026-05-30T07:26:15+00:00","og_image":[{"url":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png","type":"","width":"","height":""},{"width":498,"height":508,"url":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png","type":"image\/png"}],"author":"Admin","twitter_card":"summary_large_image","twitter_image":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eed22be51f.png","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Admin","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"5 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/","url":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/","name":"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng - Visual Paradigm Blog","isPartOf":{"@id":"https:\/\/blog.visual-paradigm.com\/vn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#primaryimage"},"image":{"@id":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.visual-paradigm.com\/vn\/wp-content\/uploads\/sites\/13\/2026\/05\/img_6a0eed22be51f.png","datePublished":"2026-05-21T11:32:14+00:00","dateModified":"2026-05-30T07:26:15+00:00","author":{"@id":"https:\/\/blog.visual-paradigm.com\/vn\/#\/schema\/person\/a649c442f11a53040710ddec750926c6"},"breadcrumb":{"@id":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#primaryimage","url":"https:\/\/blog.visual-paradigm.com\/vn\/wp-content\/uploads\/sites\/13\/2026\/05\/img_6a0eed22be51f.png","contentUrl":"https:\/\/blog.visual-paradigm.com\/vn\/wp-content\/uploads\/sites\/13\/2026\/05\/img_6a0eed22be51f.png","width":498,"height":508},{"@type":"BreadcrumbList","@id":"https:\/\/blog.visual-paradigm.com\/vn\/beyond-imports-a-practical-case-study-on-uml-2-0-package-merge-for-layered-extensible-architectures\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.visual-paradigm.com\/vn\/"},{"@type":"ListItem","position":2,"name":"V\u01b0\u1ee3t ngo\u00e0i Nh\u1eadp kh\u1ea9u: M\u1ed9t nghi\u00ean c\u1ee9u th\u1ef1c t\u1ebf v\u1ec1 M\u1ed1i quan h\u1ec7 G\u1ed9p G\u00f3i UML 2.0 cho Ki\u1ebfn tr\u00fac C\u00f3 L\u1edbp v\u00e0 C\u00f3 Th\u1ec3 M\u1edf r\u1ed9ng"}]},{"@type":"WebSite","@id":"https:\/\/blog.visual-paradigm.com\/vn\/#website","url":"https:\/\/blog.visual-paradigm.com\/vn\/","name":"Visual Paradigm Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.visual-paradigm.com\/vn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Person","@id":"https:\/\/blog.visual-paradigm.com\/vn\/#\/schema\/person\/a649c442f11a53040710ddec750926c6","name":"Admin","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/blog.visual-paradigm.com\/vn\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g","caption":"Admin"},"url":"https:\/\/blog.visual-paradigm.com\/vn\/author\/vpadminuser\/"}]}},"modified_by":"Admin","_links":{"self":[{"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/posts\/11679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/comments?post=11679"}],"version-history":[{"count":0,"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/posts\/11679\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/media\/11680"}],"wp:attachment":[{"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/media?parent=11679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/categories?post=11679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/vn\/wp-json\/wp\/v2\/tags?post=11679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}