{"id":3398,"date":"2025-11-12T17:13:22","date_gmt":"2025-11-12T10:13:22","guid":{"rendered":"https:\/\/portal-atlasx.cdg.co.th\/home\/?post_type=docs&#038;p=3398"},"modified":"2025-11-13T09:55:49","modified_gmt":"2025-11-13T02:55:49","slug":"scaffolding","status":"publish","type":"docs","link":"https:\/\/portal-atlasx.cdg.co.th\/home\/docs\/atlasx-web-template\/developing\/scaffolding\/","title":{"rendered":"Scaffolding"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"scaffolding\">Scaffolding<\/h1>\n\n\n\n<p>\u0e2b\u0e25\u0e31\u0e07\u0e08\u0e32\u0e01\u0e17\u0e35\u0e48\u0e2a\u0e23\u0e49\u0e32\u0e07 template \u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e41\u0e25\u0e49\u0e27 \u0e43\u0e19\u0e01\u0e32\u0e23\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 Web Application (Angular) \u0e19\u0e31\u0e49\u0e19\u0e08\u0e30\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19&nbsp;<code>ClientApp<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"project-structure\">Project Structure<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>ClientApp\/\n\u2514\u2500\u2500src\/\n    \u251c\u2500\u2500 app\/\n    \u251c\u2500\u2500 assets\/\n    \u251c\u2500\u2500 environments\/\n    \u251c\u2500\u2500 favicon.ico\n    \u251c\u2500\u2500 index.html\n    \u251c\u2500\u2500 main.ts\n    \u251c\u2500\u2500 polyfills.ts\n    \u251c\u2500\u2500 styles.css\n    \u251c\u2500\u2500 test.ts\n    \u2514\u2500\u2500 web.config<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">ClientApp<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u2514\u2500\u2500<\/span><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">assets<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">environments<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">favicon<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ico<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">index<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">html<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">main<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">polyfills<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">styles<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">css<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">test<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    \u2514\u2500\u2500 <\/span><span style=\"color: #001080\">web<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">config<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e43\u0e19\u0e44\u0e14\u0e40\u0e23\u0e01\u0e17\u0e2d\u0e23\u0e35\u0e48&nbsp;<code>src\/<\/code>&nbsp;\u0e08\u0e30\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22\u0e44\u0e1f\u0e25\u0e4c\u0e2b\u0e25\u0e32\u0e22 \u0e46 \u0e44\u0e1f\u0e25\u0e4c \u0e40\u0e0a\u0e48\u0e19&nbsp;<code>index.html<\/code>&nbsp;\u0e44\u0e1f\u0e25\u0e4c\u0e04\u0e2d\u0e19\u0e1f\u0e34\u0e01\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e02\u0e2d\u0e07 Angular \u0e44\u0e1f\u0e25\u0e4c\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e\u0e41\u0e25\u0e30\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e2d\u0e37\u0e48\u0e19 \u0e46 \u0e08\u0e30\u0e40\u0e01\u0e47\u0e1a\u0e43\u0e19\u0e42\u0e1f\u0e25\u0e40\u0e14\u0e2d\u0e23\u0e4c&nbsp;<code>assets\/<\/code>&nbsp;\u0e41\u0e25\u0e30\u0e42\u0e04\u0e49\u0e14\u0e02\u0e2d\u0e07\u0e41\u0e2d\u0e1e\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e08\u0e30\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e1f\u0e25\u0e40\u0e14\u0e2d\u0e23\u0e4c&nbsp;<code>app\/<\/code><\/p>\n\n\n\n<p>\u0e0b\u0e36\u0e48\u0e07\u0e17\u0e32\u0e07\u0e17\u0e35\u0e21\u0e44\u0e14\u0e49\u0e19\u0e33&nbsp;<a href=\"https:\/\/portal-atlasx.cdg.co.th\/docs\/-\/atlasx-web-template\/latest\/core-concepts\/clean-architecture\">Clean Architecture<\/a>&nbsp;\u0e21\u0e32\u0e1b\u0e23\u0e30\u0e22\u0e38\u0e01\u0e15\u0e4c\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e01\u0e31\u0e1a template \u0e15\u0e31\u0e27\u0e19\u0e35\u0e49\u0e14\u0e49\u0e27\u0e22 \u0e08\u0e30\u0e2a\u0e31\u0e07\u0e40\u0e01\u0e15\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e02\u0e2d\u0e07\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e01\u0e15\u0e4c\u0e08\u0e30\u0e21\u0e35\u0e01\u0e32\u0e23\u0e41\u0e1a\u0e48\u0e07\u0e42\u0e1f\u0e25\u0e40\u0e14\u0e2d\u0e23\u0e4c\u0e14\u0e31\u0e07\u0e19\u0e35\u0e49<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>src\/\n  \u2514\u2500\u2500 app\/\n      \u251c\u2500\u2500 components\/\n      \u251c\u2500\u2500 core\/\n      \u251c\u2500\u2500 data\/\n      \u251c\u2500\u2500 presentation\/\n      \u251c\u2500\u2500 service\/\n      \u251c\u2500\u2500 app-routing.module.ts\n      \u251c\u2500\u2500 app.component.html\n      \u251c\u2500\u2500 app.component.spec.ts\n      \u251c\u2500\u2500 app.component.ts\n      \u2514\u2500\u2500 app.module.ts<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">src<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  \u2514\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">components<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">core<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">data<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">presentation<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">service<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">routing<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">module<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">component<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">html<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">component<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">spec<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u251c\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">component<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      \u2514\u2500\u2500 <\/span><span style=\"color: #001080\">app<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">module<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">ts<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-components\">1. Components<\/h3>\n\n\n\n<p><code>components<\/code>&nbsp;\u0e08\u0e30\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22 component \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e02\u0e2d\u0e07 angular<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>components\/\n\u251c\u2500\u2500 auth\/\n\u251c\u2500\u2500 consent\/\n\u251c\u2500\u2500 gis\/\n\u251c\u2500\u2500 home\/\n\u251c\u2500\u2500 mis\/\n\u2514\u2500\u2500 shared\/<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">components<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">auth<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">consent<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">gis<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">home<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">mis<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u2514\u2500\u2500 <\/span><span style=\"color: #001080\">shared<\/span><span style=\"color: #000000\">\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e0b\u0e36\u0e48\u0e07\u0e40\u0e23\u0e32\u0e44\u0e14\u0e49\u0e17\u0e33\u0e01\u0e32\u0e23\u0e41\u0e22\u0e01\u0e40\u0e1b\u0e47\u0e19 module \u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e41\u0e25\u0e30\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e41\u0e1a\u0e1a Lazy-loading modules \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e2b\u0e25\u0e32\u0e22 \u0e46 module \u0e43\u0e19\u0e41\u0e2d\u0e1e\u0e40\u0e14\u0e35\u0e22\u0e27\u0e0b\u0e36\u0e48\u0e07 module \u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e21\u0e32\u0e01\u0e31\u0e1a template \u0e08\u0e30\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22&nbsp;<code>auth<\/code>,&nbsp;<code>consent<\/code>,&nbsp;<code>gis<\/code>,&nbsp;<code>home<\/code>&nbsp;\u0e41\u0e25\u0e30&nbsp;<code>mis<\/code>&nbsp;\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e14\u0e39\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e17\u0e35\u0e48&nbsp;<a href=\"https:\/\/angular.io\/guide\/lazy-loading-ngmodules\" target=\"_blank\" rel=\"noreferrer noopener\">Angular Lazy-loading feature modules<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-core\">2. Core<\/h3>\n\n\n\n<p><code>core<\/code>&nbsp;\u0e08\u0e30\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e17\u0e35\u0e48\u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e43\u0e19\u0e41\u0e2d\u0e1e\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e48\u0e19\u0e0b\u0e36\u0e48\u0e07\u0e16\u0e39\u0e01\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e43\u0e2b\u0e49\u0e2a\u0e2d\u0e14\u0e04\u0e25\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e1a&nbsp;<a href=\"https:\/\/portal-atlasx.cdg.co.th\/docs\/-\/atlasx-web-template\/latest\/core-concepts\/dependency-inversion-principle\">Dependency Inversion Principle<\/a>&nbsp;\u0e02\u0e2d\u0e07 Clean Architecture \u0e0b\u0e36\u0e48\u0e07\u0e08\u0e30\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22\u0e42\u0e1f\u0e25\u0e40\u0e14\u0e2d\u0e23\u0e4c\u0e15\u0e48\u0e2d\u0e44\u0e1b\u0e19\u0e35\u0e49<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>core\/\n\u251c\u2500\u2500 base\/\n\u251c\u2500\u2500 config\/\n\u251c\u2500\u2500 domain\/\n\u251c\u2500\u2500 repositories\/\n\u2514\u2500\u2500 service\/<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">core<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">base<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">config<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">domain<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 <\/span><span style=\"color: #001080\">repositories<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u2514\u2500\u2500 <\/span><span style=\"color: #001080\">service<\/span><span style=\"color: #000000\">\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>base<\/code>\u00a0\u0e08\u0e30\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e40\u0e01\u0e47\u0e1a abstract class \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e20\u0e32\u0e22\u0e43\u0e19 Core \u0e40\u0e0a\u0e48\u0e19\u00a0<code>Mapper&lt;I, O><\/code><\/li>\n\n\n\n<li><code>config<\/code>\u00a0\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e40\u0e01\u0e47\u0e1a\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e02\u0e2d\u0e07\u0e41\u0e2d\u0e1e\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e48\u0e19\u0e17\u0e35\u0e48\u0e08\u0e30\u0e2a\u0e48\u0e07\u0e1c\u0e25\u0e43\u0e19 build time<\/li>\n\n\n\n<li><code>domain<\/code>\u00a0\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e40\u0e01\u0e47\u0e1a model \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e01\u0e33\u0e2b\u0e19\u0e14 data type \u0e02\u0e2d\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e21\u0e32\u0e08\u0e32\u0e01 API<\/li>\n\n\n\n<li><code>repositories<\/code>\u00a0\u0e40\u0e1b\u0e47\u0e19 interface \u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e40\u0e01\u0e47\u0e1a method \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 API<\/li>\n\n\n\n<li><code>service<\/code>\u00a0\u0e40\u0e1b\u0e47\u0e19 service \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 repositories \u0e41\u0e25\u0e30\u0e08\u0e31\u0e14\u0e01\u0e32\u0e23 logic \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e17\u0e35\u0e48\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e02\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e1a domain<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h5 class=\"wp-block-heading\">Note<\/h5>\n\n\n\n<p>\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19&nbsp;<code>repositories<\/code>&nbsp;\u0e41\u0e25\u0e30&nbsp;<code>service<\/code>&nbsp;\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e43\u0e19&nbsp;<code>data<\/code>&nbsp;\u0e41\u0e25\u0e30&nbsp;<code>presentation<\/code>&nbsp;\u0e0b\u0e36\u0e48\u0e07\u0e08\u0e30\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e48\u0e2d\u0e44\u0e1b<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h5 class=\"wp-block-heading\">Note<\/h5>\n\n\n\n<p>Disclaimer: \u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07\u0e14\u0e49\u0e27\u0e22\u0e02\u0e49\u0e2d\u0e08\u0e33\u0e01\u0e31\u0e14\u0e02\u0e2d\u0e07\u0e20\u0e32\u0e29\u0e32 TypeScript \u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e23\u0e49\u0e32\u0e07 interface \u0e17\u0e35\u0e48\u0e21\u0e35 abstract method \u0e44\u0e14\u0e49 \u0e40\u0e23\u0e32\u0e08\u0e36\u0e07\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e0a\u0e49 abstract class \u0e21\u0e32\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e41\u0e17\u0e19<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-data\">3. Data<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-presentation\">4. Presentation<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-service\">5. Service<\/h3>\n","protected":false},"featured_media":0,"parent":3394,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nav_title":"","positive":"","negative":"","footnotes":""},"docs_category":[],"class_list":["post-3398","docs","type-docs","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/comments?post=3398"}],"version-history":[{"count":1,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3398\/revisions"}],"predecessor-version":[{"id":3399,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3398\/revisions\/3399"}],"up":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3394"}],"wp:attachment":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/media?parent=3398"}],"wp:term":[{"taxonomy":"docs_category","embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs_category?post=3398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}