{"id":3437,"date":"2025-11-13T10:10:04","date_gmt":"2025-11-13T03:10:04","guid":{"rendered":"https:\/\/portal-atlasx.cdg.co.th\/home\/?post_type=docs&#038;p=3437"},"modified":"2025-11-13T10:11:02","modified_gmt":"2025-11-13T03:11:02","slug":"dependency-inversion-principle","status":"publish","type":"docs","link":"https:\/\/portal-atlasx.cdg.co.th\/home\/docs\/atlasx-web-template\/deployment\/dependency-inversion-principle\/","title":{"rendered":"Dependency Inversion Principle"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"dependency-inversion-principle-dip\">Dependency Inversion Principle (DIP)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"tldr\">TL;DR<\/h3>\n\n\n\n<p>\u0e2b\u0e25\u0e32\u0e22\u0e04\u0e19\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e40\u0e04\u0e22\u0e44\u0e14\u0e49\u0e22\u0e34\u0e19\u0e04\u0e33\u0e27\u0e48\u0e32 dependency inversion \u0e21\u0e32\u0e41\u0e25\u0e49\u0e27\u0e2b\u0e23\u0e37\u0e2d\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e27\u0e48\u0e32\u0e21\u0e31\u0e19\u0e41\u0e1b\u0e25\u0e27\u0e48\u0e32\u0e2b\u0e25\u0e31\u0e01\u0e01\u0e32\u0e23\u0e1e\u0e25\u0e34\u0e01 dependency \u0e01\u0e25\u0e31\u0e1a\u0e14\u0e49\u0e32\u0e19 \u0e41\u0e15\u0e48\u0e01\u0e25\u0e31\u0e1a\u0e14\u0e49\u0e32\u0e19\u0e01\u0e31\u0e1a\u0e43\u0e04\u0e23? \u0e01\u0e25\u0e31\u0e1a\u0e14\u0e49\u0e32\u0e19\u0e41\u0e25\u0e49\u0e27\u0e22\u0e31\u0e07\u0e44\u0e07? \u0e41\u0e25\u0e49\u0e27\u0e17\u0e33\u0e44\u0e21\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e25\u0e31\u0e1a\u0e14\u0e49\u0e32\u0e19? \u0e01\u0e48\u0e2d\u0e19\u0e08\u0e30\u0e15\u0e2d\u0e1a\u0e04\u0e33\u0e16\u0e32\u0e21\u0e40\u0e2b\u0e25\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19\u0e44\u0e14\u0e49\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e01\u0e31\u0e1a\u0e04\u0e33\u0e27\u0e48\u0e32 flow of control \u0e01\u0e48\u0e2d\u0e19<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07-flow-of-control\">\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07 Flow of Control<\/h2>\n\n\n\n<p>Flow of control \u0e01\u0e47\u0e04\u0e37\u0e2d\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e44\u0e2b\u0e25\u0e02\u0e2d\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e23\u0e32 \u0e40\u0e0a\u0e48\u0e19\u0e40\u0e23\u0e32\u0e21\u0e35 main method \u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e08\u0e38\u0e14\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19 \u0e41\u0e25\u0e49\u0e27\u0e43\u0e19\u0e19\u0e31\u0e49\u0e19\u0e40\u0e23\u0e32\u0e01\u0e47\u0e44\u0e1b\u0e40\u0e23\u0e35\u0e22\u0e01 method \u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 class \u0e2d\u0e37\u0e48\u0e19 flow of control \u0e01\u0e47\u0e08\u0e30\u0e44\u0e2b\u0e25\u0e08\u0e32\u0e01 main method \u0e44\u0e1b\u0e17\u0e32\u0e07 class \u0e19\u0e31\u0e49\u0e19<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/portal-atlasx.cdg.co.th\/share\/Portal%20Docs\/Default\/Web%20Template\/flow-of-control.webp\" alt=\"Flow of control \u0e44\u0e2b\u0e25\u0e08\u0e32\u0e01 Main -&gt; Store\" title=\"null\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><small>Flow of control \u0e44\u0e2b\u0e25\u0e08\u0e32\u0e01 Main -&gt; Store<\/small><\/p>\n\n\n\n<p>\u0e17\u0e35\u0e19\u0e35\u0e49\u0e2a\u0e21\u0e21\u0e15\u0e34\u0e27\u0e48\u0e32\u0e43\u0e19 method \u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 class \u0e19\u0e31\u0e49\u0e19\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 class \u0e2d\u0e37\u0e48\u0e19\u0e15\u0e48\u0e2d \u0e40\u0e0a\u0e48\u0e19\u0e15\u0e49\u0e2d\u0e07\u0e14\u0e36\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1a\u0e32\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e08\u0e32\u0e01\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 flow of control \u0e01\u0e47\u0e08\u0e30\u0e44\u0e2b\u0e25\u0e08\u0e32\u0e01 class \u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e04\u0e19\u0e40\u0e23\u0e35\u0e22\u0e01 (caller) \u0e44\u0e1b\u0e2b\u0e32 class \u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e40\u0e23\u0e35\u0e22\u0e01 (callee) \u0e15\u0e48\u0e2d\u0e44\u0e1b<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/portal-atlasx.cdg.co.th\/share\/Portal%20Docs\/Default\/Web%20Template\/flow-of-control-with-db.webp\" alt=\"Flow of control \u0e44\u0e2b\u0e25\u0e08\u0e32\u0e01 Main -&gt; Store -&gt; BookDatabase\" title=\"null\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><small>Flow of control \u0e44\u0e2b\u0e25\u0e08\u0e32\u0e01 Main -&gt; Store -&gt; BookDatabase<\/small><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07-dependency\">\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07 Dependency<\/h2>\n\n\n\n<p>\u0e08\u0e32\u0e01\u0e23\u0e39\u0e1b\u0e02\u0e49\u0e32\u0e07\u0e1a\u0e19\u0e16\u0e49\u0e32\u0e40\u0e23\u0e32\u0e14\u0e39\u0e43\u0e19\u0e41\u0e07\u0e48\u0e02\u0e2d\u0e07 dependency \u0e1a\u0e49\u0e32\u0e07\u0e40\u0e23\u0e32\u0e01\u0e47\u0e08\u0e30\u0e40\u0e2b\u0e47\u0e19\u0e27\u0e48\u0e32 Main \u0e15\u0e49\u0e2d\u0e07\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01 Store \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e08\u0e30\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 showBooks \u0e43\u0e19 Store \u0e2a\u0e48\u0e27\u0e19 Store \u0e01\u0e47\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01 listAllBooks \u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 BookDatabase \u0e41\u0e2a\u0e14\u0e07\u0e27\u0e48\u0e32\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07 dependency \u0e01\u0e47\u0e44\u0e1b\u0e17\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a flow of control \u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e23\u0e35\u0e22\u0e01\u0e27\u0e48\u0e32 \u201cdependency normal\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/portal-atlasx.cdg.co.th\/share\/Portal%20Docs\/Default\/Web%20Template\/dependency-normal.webp\" alt=\"\u0e25\u0e39\u0e01\u0e28\u0e23\u0e40\u0e2a\u0e49\u0e19\u0e1b\u0e23\u0e30\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 dependency \u0e0a\u0e35\u0e49\u0e44\u0e1b\u0e17\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e25\u0e39\u0e01\u0e28\u0e23\u0e2a\u0e35\u0e41\u0e14\u0e07\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 flow of control\" title=\"null\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><small>\u0e25\u0e39\u0e01\u0e28\u0e23\u0e40\u0e2a\u0e49\u0e19\u0e1b\u0e23\u0e30\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 dependency \u0e0a\u0e35\u0e49\u0e44\u0e1b\u0e17\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e25\u0e39\u0e01\u0e28\u0e23\u0e2a\u0e35\u0e41\u0e14\u0e07\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 flow of control<\/small><\/p>\n\n\n\n<p>\u0e16\u0e32\u0e21\u0e27\u0e48\u0e32\u0e41\u0e25\u0e49\u0e27\u0e0a\u0e35\u0e49\u0e08\u0e32\u0e01\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32\u0e41\u0e1a\u0e1a\u0e19\u0e35\u0e49\u0e1c\u0e34\u0e14\u0e15\u0e23\u0e07\u0e44\u0e2b\u0e19 \u0e04\u0e33\u0e15\u0e2d\u0e1a\u0e01\u0e47\u0e04\u0e37\u0e2d\u0e40\u0e21\u0e37\u0e48\u0e2d&nbsp;<code>Store<\/code>&nbsp;\u0e44\u0e1b\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e01\u0e31\u0e1a database \u0e41\u0e25\u0e49\u0e27\u0e01\u0e47\u0e21\u0e35\u0e42\u0e2d\u0e01\u0e32\u0e2a\u0e17\u0e35\u0e48\u0e16\u0e49\u0e32\u0e16\u0e49\u0e32\u0e27\u0e31\u0e19\u0e19\u0e36\u0e07\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 database \u0e1c\u0e25\u0e01\u0e23\u0e30\u0e17\u0e1a\u0e08\u0e30\u0e25\u0e32\u0e21\u0e21\u0e32\u0e16\u0e36\u0e07&nbsp;<code>Store<\/code>&nbsp;\u0e14\u0e49\u0e27\u0e22 \u0e41\u0e25\u0e30\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e40\u0e2a\u0e35\u0e22\u0e2d\u0e35\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e04\u0e37\u0e2d\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e27\u0e25\u0e32\u0e08\u0e30 test \u0e15\u0e31\u0e27&nbsp;<code>Store<\/code>&nbsp;\u0e41\u0e15\u0e48\u0e25\u0e30\u0e04\u0e23\u0e31\u0e49\u0e07\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07&nbsp;<code>BookDatabase<\/code>&nbsp;\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e01\u0e48\u0e2d\u0e19 \u0e15\u0e49\u0e2d\u0e07\u0e15\u0e48\u0e2d Database \u0e08\u0e23\u0e34\u0e07\u0e01\u0e48\u0e2d\u0e19 \u0e17\u0e33\u0e43\u0e2b\u0e49 test \u0e22\u0e32\u0e01\u0e41\u0e25\u0e30\u0e40\u0e2a\u0e35\u0e22\u0e40\u0e27\u0e25\u0e32<\/p>\n\n\n\n<p>\u0e43\u0e19\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d&nbsp;<a href=\"https:\/\/www.amazon.com\/Clean-Architecture-Craftsmans-Software-Structure\/dp\/0134494164\/\" target=\"_blank\" rel=\"noreferrer noopener\">Clean Architecture<\/a>&nbsp;\u0e02\u0e2d\u0e07 Robert C. Martin \u0e2b\u0e23\u0e37\u0e2d Uncle Bob \u0e23\u0e30\u0e1a\u0e38\u0e44\u0e27\u0e49\u0e27\u0e48\u0e32<\/p>\n\n\n\n<p><em>The Dependency Inversion Principle (DIP) tells us that the most flexible systems are those in which source code dependencies refer only to abstractions, not to concretions.<\/em><\/p>\n\n\n\n<p>\u0e2b\u0e23\u0e37\u0e2d\u0e41\u0e1b\u0e25\u0e40\u0e1b\u0e47\u0e19\u0e44\u0e17\u0e22\u0e27\u0e48\u0e32\u0e23\u0e30\u0e1a\u0e1a\u0e17\u0e35\u0e48\u0e22\u0e37\u0e14\u0e2b\u0e22\u0e38\u0e48\u0e19 dependencies \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e0a\u0e35\u0e49\u0e44\u0e1b\u0e17\u0e32\u0e07\u0e17\u0e35\u0e48 abstract \u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48\u0e0a\u0e35\u0e49\u0e44\u0e1b\u0e17\u0e32\u0e07\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 concrete<\/p>\n\n\n\n<p>\u0e43\u0e19\u0e01\u0e23\u0e13\u0e35\u0e19\u0e35\u0e49&nbsp;<code>BookDatabase<\/code>&nbsp;\u0e16\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19 concrete \u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32&nbsp;<code>Store<\/code>&nbsp;\u0e40\u0e1e\u0e23\u0e32\u0e30\u0e27\u0e48\u0e32\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e01\u0e31\u0e1a database \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e44\u0e1b\u0e22\u0e31\u0e07 database \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07 query string \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e14\u0e36\u0e07\u0e23\u0e32\u0e22\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d\u0e2d\u0e2d\u0e01\u0e21\u0e32 \u0e2f\u0e25\u0e2f \u0e41\u0e1b\u0e25\u0e27\u0e48\u0e32\u0e08\u0e23\u0e34\u0e07 \u0e46 \u0e41\u0e25\u0e49\u0e27\u0e25\u0e39\u0e01\u0e28\u0e23 dependency \u0e16\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e0a\u0e35\u0e49\u0e1c\u0e34\u0e14\u0e14\u0e49\u0e32\u0e19<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u0e1e\u0e25\u0e31\u0e07\u0e02\u0e2d\u0e07-interface\">\u0e1e\u0e25\u0e31\u0e07\u0e02\u0e2d\u0e07 Interface<\/h2>\n\n\n\n<p>\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e19\u0e35\u0e49\u0e41\u0e01\u0e49\u0e44\u0e14\u0e49\u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 Interface \u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b\u0e02\u0e31\u0e49\u0e19\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07&nbsp;<code>Store<\/code>&nbsp;\u0e01\u0e31\u0e1a&nbsp;<code>BookDatabase<\/code>&nbsp;\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e15\u0e31\u0e27<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/portal-atlasx.cdg.co.th\/share\/Portal%20Docs\/Default\/Web%20Template\/flow-control-with-interface.webp\" alt=\"Store \u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 BookRepository \u0e17\u0e35\u0e48\u0e16\u0e39\u0e01 implement \u0e42\u0e14\u0e22 BookDatabase\" title=\"null\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><small>Store \u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 BookRepository \u0e17\u0e35\u0e48\u0e16\u0e39\u0e01 implement \u0e42\u0e14\u0e22 BookDatabase<\/small><\/p>\n\n\n\n<p>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e43\u0e2a\u0e48 interface \u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e15\u0e31\u0e27\u0e15\u0e23\u0e07\u0e01\u0e25\u0e32\u0e07\u0e41\u0e25\u0e49\u0e27\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e21\u0e35\u0e25\u0e39\u0e01\u0e28\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e2d\u0e07\u0e2d\u0e31\u0e19 \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e08\u0e30\u0e43\u0e2b\u0e49 interface \u0e17\u0e35\u0e48\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e21\u0e32\u0e2d\u0e22\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e02\u0e49\u0e32\u0e07\u0e44\u0e2b\u0e19\u0e42\u0e14\u0e22\u0e02\u0e36\u0e49\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14 package<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/portal-atlasx.cdg.co.th\/share\/Portal%20Docs\/Default\/Web%20Template\/flow-control-interface-normal.webp\" alt=\"\u0e16\u0e49\u0e32\u0e08\u0e31\u0e14 package \u0e41\u0e1a\u0e1a\u0e19\u0e35\u0e49\u0e08\u0e30\u0e44\u0e14\u0e49 dependency \u0e44\u0e1b\u0e17\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a flow of control (Dependency Normal)\" title=\"null\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><small>\u0e16\u0e49\u0e32\u0e08\u0e31\u0e14 package \u0e41\u0e1a\u0e1a\u0e19\u0e35\u0e49\u0e08\u0e30\u0e44\u0e14\u0e49 dependency \u0e44\u0e1b\u0e17\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a flow of control (Dependency Normal)<\/small><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/portal-atlasx.cdg.co.th\/share\/Portal%20Docs\/Default\/Web%20Template\/flow-control-interface-inverted.webp\" alt=\"\u0e16\u0e49\u0e32\u0e08\u0e31\u0e14 package \u0e41\u0e1a\u0e1a\u0e19\u0e35\u0e49\u0e08\u0e30\u0e44\u0e14\u0e49 dependency \u0e2a\u0e27\u0e19\u0e17\u0e32\u0e07\u0e01\u0e31\u0e1a flow of control (Dependency Inverted)\" title=\"null\"\/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><small>\u0e16\u0e49\u0e32\u0e08\u0e31\u0e14 package \u0e41\u0e1a\u0e1a\u0e19\u0e35\u0e49\u0e08\u0e30\u0e44\u0e14\u0e49 dependency \u0e2a\u0e27\u0e19\u0e17\u0e32\u0e07\u0e01\u0e31\u0e1a flow of control (Dependency Inverted)<\/small><\/p>\n\n\n\n<p>\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07 dependency \u0e2a\u0e27\u0e19\u0e17\u0e32\u0e07\u0e01\u0e31\u0e1a flow of control \u0e08\u0e36\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e17\u0e35\u0e48\u0e21\u0e32\u0e02\u0e2d\u0e07\u0e04\u0e33\u0e27\u0e48\u0e32 Dependency Inversion \u0e41\u0e25\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e44\u0e1b\u0e15\u0e32\u0e21\u0e2b\u0e25\u0e31\u0e01 DIP \u0e14\u0e49\u0e27\u0e22 \u0e02\u0e49\u0e2d\u0e14\u0e35\u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e04\u0e37\u0e2d\u0e16\u0e49\u0e32\u0e2b\u0e32\u0e01\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 database \u0e44\u0e1b\u0e15\u0e48\u0e2d\u0e01\u0e31\u0e1a MySQL, MSSQL, Oracle, MongoDB, DynamoDB \u0e2b\u0e23\u0e37\u0e2d\u0e08\u0e30\u0e40\u0e01\u0e47\u0e1a\u0e25\u0e07\u0e44\u0e1f\u0e25\u0e4c CSV \u0e2b\u0e23\u0e37\u0e2d\u0e08\u0e30\u0e40\u0e01\u0e47\u0e1a\u0e44\u0e27\u0e49\u0e43\u0e19 memory \u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e40\u0e23\u0e32\u0e01\u0e47\u0e41\u0e04\u0e48\u0e44\u0e1b\u0e2a\u0e23\u0e49\u0e32\u0e07 adapter \u0e15\u0e31\u0e27\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e35\u0e48 implement BookRepository \u0e21\u0e32\u0e43\u0e2a\u0e48\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48 BookDatabase \u0e15\u0e31\u0e27\u0e40\u0e14\u0e34\u0e21\u0e42\u0e14\u0e22\u0e17\u0e35\u0e48 business logic \u0e43\u0e19\u0e1d\u0e31\u0e48\u0e07 Store \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e23\u0e39\u0e49\u0e41\u0e25\u0e30\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e41\u0e01\u0e49\u0e2d\u0e30\u0e44\u0e23\u0e40\u0e25\u0e22 \u0e2b\u0e23\u0e37\u0e2d\u0e16\u0e49\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e15\u0e2d\u0e19\u0e17\u0e33 unit test \u0e01\u0e47\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e15\u0e31\u0e27 mock \u0e17\u0e35\u0e48\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e15\u0e32\u0e21\u0e17\u0e35\u0e48 test case \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e01\u0e47\u0e44\u0e14\u0e49<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u0e2a\u0e23\u0e38\u0e1b\">\u0e2a\u0e23\u0e38\u0e1b<\/h2>\n\n\n\n<p>\u0e01\u0e32\u0e23\u0e17\u0e33 Dependency Inversion \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e21\u0e35\u0e2d\u0e34\u0e2a\u0e23\u0e30\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07 dependency \u0e27\u0e48\u0e32\u0e2d\u0e22\u0e32\u0e01\u0e43\u0e2b\u0e49\u0e0a\u0e35\u0e49\u0e44\u0e1b\u0e14\u0e49\u0e32\u0e19\u0e44\u0e2b\u0e19\u0e01\u0e47\u0e44\u0e14\u0e49\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e44\u0e1b\u0e15\u0e32\u0e21 flow of control \u0e2d\u0e35\u0e01\u0e15\u0e48\u0e2d\u0e44\u0e1b \u0e0b\u0e36\u0e48\u0e07\u0e16\u0e49\u0e32\u0e2b\u0e32\u0e01\u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e08\u0e31\u0e14\u0e01\u0e25\u0e38\u0e48\u0e21\u0e43\u0e2b\u0e49\u0e14\u0e35\u0e27\u0e48\u0e32\u0e2d\u0e30\u0e44\u0e23\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e17\u0e35\u0e48\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19 concrete \u0e21\u0e32\u0e01\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e32\u0e1e\u0e36\u0e48\u0e07\u0e1e\u0e32\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e31\u0e27\u0e43\u0e08\u0e02\u0e2d\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e23\u0e32\u0e17\u0e35\u0e48\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19 abstract \u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32\u0e01\u0e47\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e2b\u0e31\u0e27\u0e43\u0e08\u0e02\u0e2d\u0e07\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e23\u0e32\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e22\u0e37\u0e14\u0e2b\u0e22\u0e38\u0e48\u0e19\u0e21\u0e32\u0e01\u0e02\u0e36\u0e49\u0e19 \u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22\u0e08\u0e32\u0e01\u0e1b\u0e31\u0e08\u0e08\u0e31\u0e22\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e44\u0e14\u0e49<\/p>\n","protected":false},"featured_media":0,"parent":3428,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nav_title":"","positive":"","negative":"","footnotes":""},"docs_category":[],"class_list":["post-3437","docs","type-docs","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3437","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=3437"}],"version-history":[{"count":3,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3437\/revisions"}],"predecessor-version":[{"id":3440,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3437\/revisions\/3440"}],"up":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3428"}],"wp:attachment":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/media?parent=3437"}],"wp:term":[{"taxonomy":"docs_category","embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs_category?post=3437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}