{"id":27020,"date":"2023-05-11T14:11:36","date_gmt":"2023-05-11T07:11:36","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=27020"},"modified":"2024-02-01T15:12:53","modified_gmt":"2024-02-01T08:12:53","slug":"solid-la-gi","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/solid-la-gi\/","title":{"rendered":"SOLID l\u00e0 g\u00ec? 5 ph\u00fat hi\u1ec3u ngay c\u00e1ch \u00e1p d\u1ee5ng chi ti\u1ebft nh\u1eefng nguy\u00ean t\u1eafc SOLID"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Nguon_goc_ra_doi_cua_SOLID\" >Ngu\u1ed3n g\u1ed1c ra \u0111\u1eddi c\u1ee7a SOLID<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Vi_sao_SOLID_giup_lap_trinh_vien_viet_code_tot_hon\" >V\u00ec sao SOLID gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean vi\u1ebft code t\u1ed1t h\u01a1n?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#5_nguyen_tac_SOLID_la_gi\" >5 nguy\u00ean t\u1eafc SOLID l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Single_responsibility_Principle_%E2%80%93_Nguyen_tac_Don_nhiem\" >Single responsibility Principle &#8211; Nguy\u00ean t\u1eafc \u0110\u01a1n nhi\u1ec7m<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Openclosed_principle_%E2%80%93_Nguyen_tac_Modong\" >Open\/closed principle &#8211; Nguy\u00ean t\u1eafc M\u1edf\/\u0111\u00f3ng<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Liskov_Substitution_principle_%E2%80%93_Nguyen_tac_Thay_the_Liskov\" >Liskov Substitution principle &#8211; Nguy\u00ean t\u1eafc Thay th\u1ebf Liskov<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Interface_Segregation_principle_%E2%80%93_Nguyen_tac_Phan_tach_Interface\" >Interface Segregation principle &#8211; Nguy\u00ean t\u1eafc Ph\u00e2n t\u00e1ch Interface<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Dependency_Inversion_principle_%E2%80%93_Nguyen_tac_Dao_nguoc_Phu_thuoc\" >Dependency Inversion principle &#8211; Nguy\u00ean t\u1eafc \u0110\u1ea3o ng\u01b0\u1ee3c Ph\u1ee5 thu\u1ed9c<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/#Tong_ket\" >T\u1ed5ng k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n<p><b><i>SOLID l\u00e0 g\u00ec v\u00e0 v\u00ec sao vi\u1ec7c tu\u00e2n th\u1ee7 SOLID s\u1ebd gi\u00fap b\u1ea1n tr\u1edf th\u00e0nh l\u1eadp tr\u00ecnh vi\u00ean gi\u1ecfi? 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng gi\u00fap c\u00e1c thi\u1ebft k\u1ebf h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng tr\u1edf n\u00ean d\u1ec5 hi\u1ec3u, linh ho\u1ea1t v\u00e0 d\u1ec5 b\u1ea3o tr\u00ec h\u01a1n &#8211; \u0111i\u1ec1u m\u00e0 m\u1ecdi developer \u0111\u1ec1u mu\u1ed1n khi vi\u1ebft code.<\/i><\/b><\/p>\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft n\u00e0y \u0111\u1ec3 hi\u1ec3u r\u00f5:<\/p>\n<ul>\n<li aria-level=\"1\">SOLID l\u00e0 g\u00ec?<\/li>\n<li aria-level=\"1\">5 SOLID principles (nguy\u00ean t\u1eafc SOLID) ph\u1ea3i thu\u1ed9c n\u1eb1m l\u00f2ng<\/li>\n<li aria-level=\"1\">C\u00e1ch \u00e1p d\u1ee5ng \u0111\u00fang v\u00e0 sai c\u1ee7a t\u1eebng nguy\u00ean t\u1eafc SOLID v\u1edbi v\u00ed d\u1ee5 code d\u1ec5 hi\u1ec3u<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Nguon_goc_ra_doi_cua_SOLID\"><\/span><b> Ngu\u1ed3n g\u1ed1c ra \u0111\u1eddi c\u1ee7a SOLID<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>C\u00e1c SOLID principles \u0111\u01b0\u1ee3c Robert C. Martin gi\u1edbi thi\u1ec7u trong cu\u1ed1n s\u00e1ch \u201cDesign Principles and Design Patterns\u201d xu\u1ea5t b\u1ea3n n\u0103m 2000. B\u1ed9 nguy\u00ean t\u1eafc nguy\u00ean b\u1ea3n trong cu\u1ed1n s\u00e1ch sau \u0111\u00f3 \u0111\u01b0\u1ee3c Michael Feathers t\u00f3m l\u01b0\u1ee3c l\u1ea1i b\u1eb1ng c\u1ee5m t\u1eeb vi\u1ebft t\u1eaft <b>SOLID<\/b> &#8211; c\u1ee5m t\u1eeb m\u00e0 ch\u00fang ta th\u01b0\u1eddng d\u00f9ng ng\u00e0y nay.<\/p>\n<p>V\u00e0 trong h\u01a1n 20 n\u0103m qua k\u1ec3 t\u1eeb khi ra m\u1eaft, nh\u1eefng SOLID principles n\u00e0y \u0111\u00e3 c\u00e1ch m\u1ea1ng h\u00f3a th\u1ebf gi\u1edbi l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng (<a href=\"https:\/\/itviec.com\/blog\/oop-la-gi\/\" target=\"_blank\" rel=\"noopener\">OOP<\/a>) v\u00e0 thay \u0111\u1ed5i c\u00e1ch ch\u00fang ta vi\u1ebft ph\u1ea7n m\u1ec1m.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Vi_sao_SOLID_giup_lap_trinh_vien_viet_code_tot_hon\"><\/span><b> V\u00ec sao SOLID gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean vi\u1ebft code t\u1ed1t h\u01a1n?<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>SOLID ph\u1ee5c v\u1ee5 cho m\u1ee5c \u0111\u00edch:<\/p>\n<blockquote><p><i>&#8220;T\u1ea1o ra nh\u1eefng d\u00f2ng code gi\u00fap c\u00e1c <\/i><a href=\"https:\/\/itviec.com\/blog\/dev-la-gi\/\" target=\"_blank\" rel=\"noopener\"><i>developer<\/i><\/a><i> d\u1ec5 \u0111\u1ecdc, d\u1ec5 hi\u1ec3u v\u00e0 d\u1ec5 ki\u1ec3m tra khi h\u1ee3p t\u00e1c c\u00f9ng nhau.&#8221;<\/i><\/p><\/blockquote>\n<p>C\u00e1c SOLID principles c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m v\u1edbi m\u1ee5c \u0111\u00edch d\u1ec5 duy tr\u00ec v\u00e0 m\u1edf r\u1ed9ng khi d\u1ef1 \u00e1n ph\u00e1t tri\u1ec3n. Vi\u1ec7c \u00e1p d\u1ee5ng c\u00e1c ph\u01b0\u01a1ng ph\u00e1p n\u00e0y c\u0169ng s\u1ebd g\u00f3p ph\u1ea7n t\u00e1i c\u1ea5u tr\u00fac codebase sang tr\u1ea1ng th\u00e1i d\u1ec5 b\u1ea3o tr\u00ec h\u01a1n ho\u1eb7c th\u1eadm ch\u00ed \u00e1p d\u1ee5ng c\u00e1c ph\u01b0\u01a1ng ph\u00e1p <a href=\"https:\/\/itviec.com\/blog\/agile-la-gi-scrum-la-gi\/\" target=\"_blank\" rel=\"noopener\">Agile<\/a>!<\/p>\n<p>N\u00f3i m\u1ed9t c\u00e1ch \u0111\u01a1n gi\u1ea3n, c\u00e1c nguy\u00ean t\u1eafc thi\u1ebft k\u1ebf c\u1ee7a Martin v\u00e0 Feathers khuy\u1ebfn kh\u00edch l\u1eadp tr\u00ecnh vi\u00ean t\u1ea1o ra nh\u1eefng ph\u1ea7n m\u1ec1m d\u1ec5 b\u1ea3o tr\u00ec, d\u1ec5 hi\u1ec3u v\u00e0 linh ho\u1ea1t h\u01a1n. T\u1ea5t c\u1ea3 nh\u1eefng ai \u0111\u00e3 t\u1eebng l\u1eadp tr\u00ecnh c\u0169ng \u0111\u1ec1u bi\u1ebft r\u1eb1ng b\u1ea3o tr\u00ec code (nh\u01b0 l\u00e0 th\u00eam ch\u1ee9c n\u0103ng, s\u1eeda l\u1ed7i,&#8230;) m\u1edbi l\u00e0 ph\u1ea7n t\u1ed1n nhi\u1ec1u th\u1eddi gian nh\u1ea5t trong qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n.<\/p>\n<p>Nh\u1edd c\u00f3 SOLID, khi c\u00e1c \u1ee9ng d\u1ee5ng ph\u00e1t tri\u1ec3n quy m\u00f4, ch\u00fang ta c\u00f3 th\u1ec3 gi\u1ea3m \u0111\u1ed9 ph\u1ee9c t\u1ea1p v\u00e0 h\u1ea1n ch\u1ebf c\u00e1c v\u1ea5n \u0111\u1ec1 r\u1ee7i ro trong t\u01b0\u01a1ng lai.<\/p>\n<blockquote><p><a href=\"https:\/\/itviec.com\/viec-lam-it\/developer\/ho-chi-minh-hcm\" target=\"_blank\" rel=\"noopener\"><em>Vi\u1ec7c l\u00e0m Developer TP. HCM<\/em><\/a><\/p>\n<p><a href=\"https:\/\/itviec.com\/viec-lam-it\/developer\/ha-noi\" target=\"_blank\" rel=\"noopener\"><em>Vi\u1ec7c l\u00e0m Developer H\u00e0 N\u1ed9i<\/em><\/a><\/p><\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"5_nguyen_tac_SOLID_la_gi\"><\/span><b>5 nguy\u00ean t\u1eafc SOLID l\u00e0 g\u00ec?<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>V\u1eady th\u00ec SOLID principles l\u00e0 g\u00ec? SOLID principles l\u00e0 n\u0103m nguy\u00ean t\u1eafc thi\u1ebft k\u1ebf h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng. Ch\u00fang l\u00e0 m\u1ed9t b\u1ed9 quy t\u1eafc v\u00e0 c\u00e1c ph\u01b0\u01a1ng ph\u00e1p \u0111\u00e3 \u0111\u01b0\u1ee3c ki\u1ec3m ch\u1ee9ng v\u00e0 \u0111\u00fac k\u1ebft b\u1edfi nhi\u1ec1u l\u1eadp tr\u00ecnh vi\u00ean c\u1ea7n tu\u00e2n theo khi thi\u1ebft k\u1ebf c\u1ea5u tr\u00fac class.<\/p>\n<blockquote><p>Ngo\u00e0i ra, b\u1ea1n c\u00f3 th\u1ec3 ghi nh\u1edb th\u00eam m\u1ed9t v\u00e0i <a href=\"https:\/\/itviec.com\/blog\/design-pattern\/\" target=\"_blank\" rel=\"noopener\">Design Pattern<\/a> ph\u1ed5 bi\u1ebfn trong l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng OOP do ITviec t\u1ed5ng h\u1ee3p.<\/p><\/blockquote>\n<p>SOLID l\u00e0 vi\u1ebft t\u1eaft t\u1eeb n\u0103m ch\u1eef c\u00e1i \u0111\u1ea7u c\u1ee7a n\u0103m nguy\u00ean t\u1eafc sau:<\/p>\n<ol>\n<li aria-level=\"1\"><b>S<\/b>ingle Responsibility<\/li>\n<li aria-level=\"1\"><b>O<\/b>pen\/Closed<\/li>\n<li aria-level=\"1\"><b>L<\/b>iskov Substitution<\/li>\n<li aria-level=\"1\"><b>I<\/b>nterface Segregation<\/li>\n<li aria-level=\"1\"><b>D<\/b>ependency Inversion<\/li>\n<\/ol>\n<p>M\u1eb7c d\u00f9 nh\u1eefng kh\u00e1i ni\u1ec7m n\u00e0y tho\u1ea1t nghe c\u00f3 v\u1ebb kh\u00f3 hi\u1ec3u v\u00e0 kh\u00f3 \u00e1p d\u1ee5ng, nh\u01b0ng sau b\u00e0i vi\u1ebft n\u00e0y k\u00e8m theo v\u00ed d\u1ee5 code \u0111\u01a1n gi\u1ea3n, b\u1ea1n c\u00f3 th\u1ec3 hi\u1ec3u SOLID l\u00e0 g\u00ec v\u00e0 \u00e1p d\u1ee5ng \u0111\u01b0\u1ee3c ngay. Trong ph\u1ea7n ti\u1ebfp theo c\u1ee7a b\u00e0i vi\u1ebft, ch\u00fang ta s\u1ebd \u0111i s\u00e2u v\u00e0o 5 SOLID principles n\u00e0y, k\u00e8m v\u00ed d\u1ee5 minh h\u1ecda c\u1ef1c k\u1ef3 d\u1ec5 hi\u1ec3u cho t\u1eebng nguy\u00ean t\u1eafc.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Single_responsibility_Principle_%E2%80%93_Nguyen_tac_Don_nhiem\"><\/span><b> Single responsibility Principle &#8211; Nguy\u00ean t\u1eafc \u0110\u01a1n nhi\u1ec7m<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>N\u1ed9i dung Nguy\u00ean t\u1eafc \u0110\u01a1n nhi\u1ec7m nh\u01b0 sau:<\/p>\n<blockquote><p><i>M\u1ed9t class ch\u1ec9 n\u00ean c\u00f3 m\u1ed9t nhi\u1ec7m v\u1ee5. H\u01a1n n\u1eefa, m\u1ed7i class ch\u1ec9 n\u00ean c\u00f3 m\u1ed9t l\u00fd do \u0111\u1ec3 thay \u0111\u1ed5i.<\/i><\/p><\/blockquote>\n<p>V\u00ec sao nguy\u00ean t\u1eafc \u0110\u01a1n nhi\u1ec7m l\u1ea1i quan tr\u1ecdng nh\u01b0 v\u1eady?<\/p>\n<p>Tr\u01b0\u1edbc h\u1ebft, v\u00ec nhi\u1ec1u team kh\u00e1c nhau c\u00f3 th\u1ec3 l\u00e0m vi\u1ec7c trong c\u00f9ng m\u1ed9t d\u1ef1 \u00e1n n\u00ean n\u1ebfu m\u1ed9t class c\u00f3 nhi\u1ec1u h\u01a1n m\u1ed9t tr\u00e1ch nhi\u1ec7m, th\u00ec c\u00e1c team \u0111\u00f3 ph\u1ea3i l\u00e0m vi\u1ec7c tr\u00ean c\u00f9ng m\u1ed9t class v\u00e0 ch\u1ec9nh s\u1eeda c\u00f9ng m\u1ed9t class v\u00ec nh\u1eefng l\u00fd do kh\u00e1c nhau, \u0111i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn c\u00e1c module kh\u00f4ng t\u01b0\u01a1ng th\u00edch.<\/p>\n<p>L\u00fd do th\u1ee9 hai, nguy\u00ean t\u1eafc \u0110\u01a1n nhi\u1ec7m gi\u00fap cho vi\u1ec7c ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n tr\u1edf n\u00ean d\u1ec5 d\u00e0ng h\u01a1n. V\u00ed d\u1ee5: gi\u1ea3 s\u1eed ta c\u00f3 m\u1ed9t persistence class d\u00f9ng \u0111\u1ec3 x\u1eed l\u00fd c\u00e1c ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u01a1 s\u1edf d\u1eef li\u1ec7u v\u00e0 ch\u00fang ta nh\u1eadn th\u1ea5y c\u00f3 m\u1ed9t thay \u0111\u1ed5i trong t\u1ec7p \u0111\u00f3 \u1edf <a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"noopener\">GitHub<\/a> commit. B\u1eb1ng c\u00e1ch l\u00e0m theo nguy\u00ean t\u1eafc \u0110\u01a1n nhi\u1ec7m, ch\u00fang ta s\u1ebd d\u1ec5 d\u00e0ng bi\u1ebft r\u1eb1ng thay \u0111\u1ed5i \u0111\u00f3 li\u00ean quan \u0111\u1ebfn l\u01b0u tr\u1eef hay li\u00ean quan \u0111\u1ebfn c\u01a1 s\u1edf d\u1eef li\u1ec7u.<\/p>\n<p>V\u00ed d\u1ee5: Ta h\u00e3y nh\u00ecn v\u00e0o m\u1ed9t class \u0111\u1ea1i di\u1ec7n cho m\u1ed9t cu\u1ed1n s\u00e1ch \u0111\u01a1n gi\u1ea3n:<\/p>\n<pre>public class Book {\r\n\r\n \u00a0\u00a0\u00a0\u00a0\u00a0 private String name;\r\n  \u00a0\u00a0\u00a0\u00a0 private String author;\r\n \u00a0\u00a0\u00a0\u00a0\u00a0 private String text;\r\n\r\n \u00a0\u00a0\u00a0\u00a0\u00a0 \/\/constructor, getters v\u00e0 setters\r\n}<\/pre>\n<p>Trong \u0111o\u1ea1n code n\u00e0y, ch\u00fang ta l\u01b0u tr\u1eef t\u00ean, t\u00e1c gi\u1ea3 v\u00e0 v\u0103n b\u1ea3n \u0111\u01b0\u1ee3c li\u00ean k\u1ebft v\u1edbi m\u1ed9t phi\u00ean b\u1ea3n c\u1ee7a Book.<\/p>\n<p>B\u00e2y gi\u1edd ch\u00fang ta h\u00e3y th\u00eam m\u1ed9t v\u00e0i ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 truy v\u1ea5n v\u0103n b\u1ea3n:<\/p>\n<pre>public class Book {\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 private String name;\r\n  \u00a0\u00a0\u00a0\u00a0 private String author;\r\n  \u00a0\u00a0\u00a0\u00a0 private String text;\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 \/\/constructor, getters v\u00e0 setters\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 \/\/c\u00e1c ph\u01b0\u01a1ng th\u1ee9c li\u00ean quan tr\u1ef1c ti\u1ebfp \u0111\u1ebfn thu\u1ed9c t\u00ednh Book\r\n  \u00a0\u00a0\u00a0\u00a0 public String replaceWordInText(String word, String replacementWord){\r\n  \u00a0\u00a0\u00a0\u00a0 return text.replaceAll(word, replacementWord);\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 public boolean isWordInText(String word){\r\n \u00a0\u00a0\u00a0   return text.contains(word);\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>\u0110\u1ec3 kh\u1eafc ph\u1ee5c t\u00ecnh tr\u1ea1ng \u201cthi\u1ebfu tr\u1eadt t\u1ef1&#8221; tr\u00ean, ch\u00fang ta n\u00ean tri\u1ec3n khai m\u1ed9t class ri\u00eang ch\u1ec9 x\u1eed l\u00fd vi\u1ec7c in v\u0103n b\u1ea3n:<\/p>\n<pre>public class BookPrinter {\r\n\r\n  \u00a0\u00a0\u00a0  \/\/ph\u01b0\u01a1ng th\u1ee9c cho v\u0103n b\u1ea3n \u0111\u1ea7u ra\r\n  \u00a0\u00a0\u00a0\u00a0 void printTextToConsole(String text){\r\n \u00a0\u00a0 \u00a0\u00a0 \/\/code d\u00f9ng \u0111\u1ec3 \u0111\u1ecbnh d\u1ea1ng v\u00e0 in v\u0103n b\u1ea3n\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 void printTextToAnotherMedium(String text){\r\n   \u00a0\u00a0\u00a0 \/\/code d\u00f9ng \u0111\u1ec3 vi\u1ebft cho c\u00e1c ph\u01b0\u01a1ng ti\u1ec7n kh\u00e1c\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>Ch\u00fang ta kh\u00f4ng ch\u1ec9 ph\u00e1t tri\u1ec3n m\u1ed9t class gi\u00fap gi\u1ea3m b\u1edbt nhi\u1ec7m v\u1ee5 in Book m\u00e0 ch\u00fang ta c\u00f2n c\u00f3 th\u1ec3 t\u1eadn d\u1ee5ng class BookPrinter \u0111\u1ec3 g\u1eedi v\u0103n b\u1ea3n t\u1edbi c\u00e1c ph\u01b0\u01a1ng ti\u1ec7n kh\u00e1c. D\u00f9 \u0111\u00f3 l\u00e0 email, nh\u1eadt k\u00fd ho\u1ea1t \u0111\u1ed9ng, hay b\u1ea5t k\u1ef3 ph\u01b0\u01a1ng ti\u1ec7n g\u00ec, ch\u00fang ta \u0111ang c\u00f3 m\u1ed9t class ri\u00eang d\u00e0nh ri\u00eang cho nhi\u1ec7m v\u1ee5 n\u00e0y.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Openclosed_principle_%E2%80%93_Nguyen_tac_Modong\"><\/span><b> Open\/closed principle &#8211; Nguy\u00ean t\u1eafc M\u1edf\/\u0111\u00f3ng<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>N\u1ed9i dung Nguy\u00ean t\u1eafc M\u1edf\/\u0111\u00f3ng nh\u01b0 sau:<\/p>\n<blockquote><p><i>C\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng ho\u1eb7c th\u1ef1c th\u1ec3 n\u00ean \u201cm\u1edf c\u1eeda\u201d v\u1edbi m\u1edf r\u1ed9ng nh\u01b0ng \u201c\u0111\u00f3ng c\u1eeda\u201d v\u1edbi s\u1eeda \u0111\u1ed5i.<\/i><\/p><\/blockquote>\n<p>Trong \u0111\u00f3:<\/p>\n<ul>\n<li aria-level=\"1\">M\u1edf r\u1ed9ng c\u00f3 ngh\u0129a l\u00e0 th\u00eam ch\u1ee9c n\u0103ng m\u1edbi v\u00e0o class hi\u1ec7n c\u00f3.<\/li>\n<li aria-level=\"1\">S\u1eeda \u0111\u1ed5i c\u00f3 ngh\u0129a l\u00e0 thay \u0111\u1ed5i code c\u1ee7a m\u1ed9t class hi\u1ec7n c\u00f3.<\/li>\n<\/ul>\n<p>V\u00ec v\u1eady, n\u1ed9i dung nguy\u00ean t\u1eafc M\u1edf\/\u0111\u00f3ng c\u00f3 ngh\u0129a l\u00e0: Ch\u00fang ta c\u00f3 th\u1ec3 th\u00eam ch\u1ee9c n\u0103ng m\u1edbi m\u00e0 kh\u00f4ng c\u1ea7n \u0111\u1ee5ng v\u00e0o code hi\u1ec7n c\u00f3 c\u1ee7a class.<\/p>\n<p>Nguy\u00ean nh\u00e2n l\u00e0 do b\u1ea5t c\u1ee9 khi n\u00e0o ta s\u1eeda \u0111\u1ed5i code hi\u1ec7n c\u00f3, lu\u00f4n s\u1ebd c\u00f3 nguy c\u01a1 t\u1ea1o ra c\u00e1c l\u1ed7i ti\u1ec1m \u1ea9n. V\u00ec v\u1eady, n\u1ebfu c\u00f3 th\u1ec3, ch\u00fang ta n\u00ean tr\u00e1nh ch\u1ea1m v\u00e0o code \u0111\u00e3 \u0111\u01b0\u1ee3c ki\u1ec3m tra v\u00e0 \u0111ang ch\u1ea1y \u1ed5n.<\/p>\n<p>V\u1eady th\u00ec l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 ch\u00fang ta th\u00eam ch\u1ee9c n\u0103ng m\u1edbi m\u00e0 kh\u00f4ng ph\u1ea3i \u0111\u1ee5ng v\u00e0o class \u0111\u00f3? Ch\u00fang ta ch\u1ec9 c\u1ea7n k\u1ebf th\u1eeba ho\u1eb7c s\u1edf h\u1eefu class \u0111\u00f3. H\u00e3y \u0111\u1ebfn v\u1edbi v\u00ed d\u1ee5 sau:<\/p>\n<p>H\u00e3y th\u1eed t\u01b0\u1edfng t\u01b0\u1ee3ng ch\u00fang ta \u0111ang tri\u1ec3n khai m\u1ed9t class Guitar. \u0110\u00e2y l\u00e0 m\u1ed9t chi\u1ebfc guitar ho\u00e0n ch\u1ec9nh v\u00e0 c\u00f3 c\u1ea3 n\u00fat ch\u1ec9nh \u00e2m l\u01b0\u1ee3ng:<\/p>\n<pre>public class Guitar {\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 private String make;\r\n  \u00a0\u00a0\u00a0\u00a0 private String model;\r\n  \u00a0\u00a0\u00a0\u00a0 private int volume;\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 \/\/constructors, getters v\u00e0 setters\r\n}<\/pre>\n<p>Sau m\u1ed9t v\u00e0i th\u00e1ng, ch\u00fang ta th\u1ea5y r\u1eb1ng Guitar nh\u00ecn h\u01a1i ch\u00e1n v\u00e0 ta mu\u1ed1n th\u00eam h\u1ecda ti\u1ebft h\u00ecnh ng\u1ecdn l\u1eeda \u0111\u1ec3 l\u00e0m cho chi\u1ebfc guitar n\u00e0y tr\u00f4ng \u201cch\u1ea5t&#8221; h\u01a1n.<\/p>\n<p>L\u00fac n\u00e0y \u0111\u00e2y, s\u1ebd c\u00f3 m\u1ed9t v\u00e0i b\u1ea1n mu\u1ed1n m\u1edf class Guitar ra v\u00e0 th\u00eam ngay h\u1ecda ti\u1ebft ng\u1ecdn l\u1eeda v\u00e0o \u0111\u00f3 nh\u01b0ng ai bi\u1ebft \u0111\u01b0\u1ee3c nh\u1eefng l\u1ed7i n\u00e0o c\u00f3 th\u1ec3 xu\u1ea5t hi\u1ec7n trong \u1ee9ng d\u1ee5ng n\u1ebfu ch\u00fang ta l\u00e0m nh\u01b0 v\u1eady.<\/p>\n<p>Thay v\u00e0o \u0111\u00f3, h\u00e3y tu\u00e2n theo nguy\u00ean t\u1eafc M\u1edf\/\u0111\u00f3ng v\u00e0 ch\u1ec9 c\u1ea7n m\u1edf r\u1ed9ng class Guitar:<\/p>\n<pre>public class SuperCoolGuitarWithFlames extends Guitar {\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 private String flameColor;\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 \/\/constructor, getters v\u00e0 setters\r\n\r\n}<\/pre>\n<p>B\u1eb1ng c\u00e1ch m\u1edf r\u1ed9ng class Guitar, ta c\u00f3 th\u1ec3 ch\u1eafc ch\u1eafn r\u1eb1ng \u1ee9ng d\u1ee5ng hi\u1ec7n c\u00f3 s\u1ebd kh\u00f4ng b\u1ecb \u1ea3nh h\u01b0\u1edfng g\u00ec c\u1ea3.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Liskov_Substitution_principle_%E2%80%93_Nguyen_tac_Thay_the_Liskov\"><\/span><b> Liskov Substitution principle &#8211; Nguy\u00ean t\u1eafc Thay th\u1ebf Liskov<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>N\u1ed9i dung Nguy\u00ean t\u1eafc Thay th\u1ebf Liskov nh\u01b0 sau:<\/p>\n<blockquote><p><i>Gi\u1ea3 s\u1eed <em>\u03a6<\/em>(x) l\u00e0 m\u1ed9t thu\u1ed9c t\u00ednh c\u00f3 th\u1ec3 ch\u1ee9ng minh \u0111\u01b0\u1ee3c \u0111\u1ed1i v\u1edbi c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng x thu\u1ed9c lo\u1ea1i T. Khi \u0111\u00f3, <em>\u03a6<\/em>(y) ph\u1ea3i c\u00f3 th\u1ec3 ch\u1ee9ng minh \u0111\u01b0\u1ee3c \u0111\u1ed1i v\u1edbi c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng y thu\u1ed9c lo\u1ea1i S m\u00e0 trong \u0111\u00f3 S l\u00e0 m\u1ed9t class con c\u1ee7a T.<\/i><\/p><\/blockquote>\n<p>Nguy\u00ean t\u1eafc n\u00e0y c\u00f3 ngh\u0129a l\u00e0 m\u1ecdi class con (subclass) ho\u1eb7c class d\u1eabn xu\u1ea5t ph\u1ea3i c\u00f3 kh\u1ea3 n\u0103ng thay th\u1ebf cho class c\u01a1 s\u1edf ho\u1eb7c class cha (superclass) c\u1ee7a ch\u00fang m\u00e0 kh\u00f4ng l\u00e0m \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn \u1ee9ng d\u1ee5ng.<\/p>\n<p>Trong 5 SOLID principles, nguy\u00ean t\u1eafc Thay th\u1ebf Liskov l\u00e0 nguy\u00ean t\u1eafc tr\u1eebu t\u01b0\u1ee3ng v\u00e0 kh\u00f3 hi\u1ec3u nh\u1ea5t. Ch\u00ednh v\u00ec th\u1ebf, thay v\u00ec gi\u1ea3i th\u00edch th\u00eam, b\u1ea1n c\u00f3 th\u1ec3 hi\u1ec3u nhanh b\u1eb1ng v\u00ed d\u1ee5 sau:<\/p>\n<p>Gi\u1ea3 s\u1eed b\u1ea1n c\u00f3 m\u1ed9t class h\u00ecnh ch\u1eef nh\u1eadt \u0111\u1ec3 t\u00ednh di\u1ec7n t\u00edch c\u1ee7a m\u1ed9t h\u00ecnh ch\u1eef nh\u1eadt v\u00e0 th\u1ef1c hi\u1ec7n c\u00e1c ho\u1ea1t \u0111\u1ed9ng kh\u00e1c nh\u01b0 x\u00e1c \u0111\u1ecbnh m\u00e0u s\u1eafc:<\/p>\n<pre>class Rectangle {\r\n  \u00a0\u00a0\u00a0\u00a0 setWidth(width) {\r\n  \u00a0\u00a0\u00a0\u00a0 this.width = width;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 setHeight(height) {\r\n   \u00a0\u00a0\u00a0 this.height = height;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 setColor(color) {\r\n   \u00a0\u00a0\u00a0 \/\/ ...\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 getArea() {\r\n  \u00a0\u00a0\u00a0\u00a0 return this.width * this.height;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>Ch\u00fang ta \u0111\u1ec1u bi\u1ebft r\u1eb1ng t\u1ea5t c\u1ea3 c\u00e1c h\u00ecnh vu\u00f4ng l\u00e0 h\u00ecnh ch\u1eef nh\u1eadt n\u00ean b\u1ea1n c\u00f3 th\u1ec3 k\u1ebf th\u1eeba c\u00e1c thu\u1ed9c t\u00ednh c\u1ee7a h\u00ecnh ch\u1eef nh\u1eadt. V\u00ec chi\u1ec1u r\u1ed9ng v\u00e0 chi\u1ec1u cao ph\u1ea3i gi\u1ed1ng nhau, n\u00ean b\u1ea1n c\u00f3 th\u1ec3 \u0111i\u1ec1u ch\u1ec9nh code nh\u01b0 sau:<\/p>\n<pre>class Square extends Rectangle {\r\n  \u00a0\u00a0\u00a0\u00a0 setWidth(width) {\r\n  \u00a0\u00a0\u00a0\u00a0 this.width = width;\r\n  \u00a0\u00a0\u00a0\u00a0 this.height = width;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 setHeight(height) {\r\n   \u00a0\u00a0\u00a0 this.width = height;\r\n  \u00a0\u00a0\u00a0\u00a0 this.height = height;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>Nh\u00ecn v\u00e0o v\u00ed d\u1ee5 n\u00e0y, code n\u00ean ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng:<\/p>\n<pre>let rectangle = new Rectangle();\r\nrectangle.setWidth(10);\r\nrectangle.setHeight(5);\r\nconsole.log(rectangle.getArea()); \/\/ 50<\/pre>\n<p>\u1ede \u0111o\u1ea1n code tr\u00ean, b\u1ea1n s\u1ebd nh\u1eadn th\u1ea5y r\u1eb1ng m\u1ed9t h\u00ecnh ch\u1eef nh\u1eadt \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o, v\u00e0 chi\u1ec1u r\u1ed9ng v\u00e0 chi\u1ec1u cao \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh. Sau \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 t\u00ednh to\u00e1n di\u1ec7n t\u00edch ch\u00ednh x\u00e1c.<\/p>\n<p>Tuy nhi\u00ean, theo nguy\u00ean t\u1eafc Thay th\u1ebf Liskov, c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng c\u1ee7a class con c\u1ea7n ho\u1ea1t \u0111\u1ed9ng gi\u1ed1ng nh\u01b0 c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng c\u1ee7a class cha. C\u00f3 ngh\u0129a l\u00e0 n\u1ebfu b\u1ea1n thay th\u1ebf h\u00ecnh ch\u1eef nh\u1eadt b\u1eb1ng h\u00ecnh vu\u00f4ng, code v\u1eabn n\u00ean ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng:<\/p>\n<pre>let square = new Square();\r\nsquare.setWidth(10);\r\nsquare.setHeight(5);<\/pre>\n<p>K\u1ebft qu\u1ea3 \u0111\u00e1ng l\u1ebd ra n\u00ean l\u00e0 100, b\u1edfi v\u00ec setWidth(10) n\u00ean c\u1ea3 chi\u1ec1u cao v\u00e0 chi\u1ec1u r\u1ed9ng \u0111\u1ec1u l\u00e0 10. Tuy nhi\u00ean, b\u1edfi v\u00ec setHeight(5), n\u00ean k\u1ebft qu\u1ea3 s\u1ebd l\u00e0 25.<\/p>\n<pre>let square = new Square();\r\nsquare.setWidth(10);\r\nsquare.setHeight(5);\r\nconsole.log(square.getArea()); \/\/ 25<\/pre>\n<p>Tuy nhi\u00ean, nh\u01b0 v\u1eady s\u1ebd ph\u00e1 v\u1ee1 nguy\u00ean t\u1eafc Thay th\u1ebf Liskov. \u0110\u1ec3 kh\u1eafc ph\u1ee5c l\u1ed7i n\u00e0y, ch\u00fang ta c\u1ea7n c\u00f3 m\u1ed9t class chung cho t\u1ea5t c\u1ea3 c\u00e1c h\u00ecnh d\u1ea1ng m\u00e0 s\u1ebd ch\u1ee9a t\u1ea5t c\u1ea3 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c chung m\u00e0 b\u1ea1n mu\u1ed1n c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng thu\u1ed9c c\u00e1c class con truy c\u1eadp \u0111\u01b0\u1ee3c. Sau \u0111\u00f3, \u0111\u1ed1i v\u1edbi c\u00e1c ph\u01b0\u01a1ng th\u1ee9c ri\u00eang l\u1ebb, b\u1ea1n t\u1ea1o m\u1ed9t class ri\u00eang cho h\u00ecnh ch\u1eef nh\u1eadt v\u00e0 h\u00ecnh vu\u00f4ng.<\/p>\n<pre>class Shape {\r\n  \u00a0\u00a0\u00a0\u00a0 setColor(color) {\r\n  \u00a0\u00a0\u00a0\u00a0 this.color = color;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n  \u00a0\u00a0\u00a0\u00a0 getColor() {\r\n  \u00a0\u00a0\u00a0\u00a0 return this.color;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}\r\n\r\nclass Rectangle extends Shape {\r\n  \u00a0\u00a0\u00a0\u00a0 setWidth(width) {\r\n  \u00a0\u00a0\u00a0\u00a0 this.width = width;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n  \u00a0\u00a0\u00a0\u00a0 setHeight(height) {\r\n  \u00a0\u00a0\u00a0\u00a0 this.height = height;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n  \u00a0\u00a0\u00a0\u00a0 getArea() {\r\n  \u00a0\u00a0\u00a0\u00a0 return this.width * this.height;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}\r\n\r\nclass Square extends Shape {\r\n  \u00a0\u00a0\u00a0\u00a0 setSide(side) {\r\n  \u00a0\u00a0\u00a0\u00a0 this.side = side;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n  \u00a0\u00a0\u00a0\u00a0 getArea() {\r\n  \u00a0\u00a0\u00a0\u00a0 return this.side * this.side;\r\n  \u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>B\u1eb1ng c\u00e1ch n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1eb7t m\u00e0u v\u00e0 l\u1ea5y m\u00e0u b\u1eb1ng c\u00e1c class cha ho\u1eb7c class con:<\/p>\n<pre>\/\/ superclass\r\nlet shape = new Shape();\r\nshape.setColor('red');\r\nconsole.log(shape.getColor()); \/\/ \u0111\u1ecf\r\n\r\n\/\/ subclass\r\nlet rectangle = new Rectangle();\r\nrectangle.setColor('red');\r\nconsole.log(rectangle.getColor()); \/\/ \u0111\u1ecf\r\n\r\n\/\/ subclass\r\nlet square = new Square();\r\nsquare.setColor('red');\r\nconsole.log(square.getColor()); \/\/ \u0111\u1ecf<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Interface_Segregation_principle_%E2%80%93_Nguyen_tac_Phan_tach_Interface\"><\/span><b>Interface Segregation principle &#8211; Nguy\u00ean t\u1eafc Ph\u00e2n t\u00e1ch Interface<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>N\u1ed9i dung Nguy\u00ean t\u1eafc Ph\u00e2n t\u00e1ch Interface nh\u01b0 sau:<\/p>\n<blockquote><p><i>M\u1ed9t kh\u00e1ch h\u00e0ng kh\u00f4ng n\u00ean b\u1ecb bu\u1ed9c ph\u1ea3i tri\u1ec3n khai m\u1ed9t giao di\u1ec7n m\u00e0 h\u1ecd kh\u00f4ng s\u1eed d\u1ee5ng, ho\u1eb7c ph\u1ee5 thu\u1ed9c v\u00e0o c\u00e1c ph\u01b0\u01a1ng ph\u00e1p h\u1ecd kh\u00f4ng s\u1eed d\u1ee5ng.<\/i><\/p><\/blockquote>\n<p>Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang ta s\u1ebd th\u1eed \u201ch\u00f3a th\u00e2n&#8221; th\u00e0nh nh\u1eefng ng\u01b0\u1eddi l\u00e0m vi\u1ec7c trong s\u1edf th\u00fa, c\u1ee5 th\u1ec3 l\u00e0 v\u1ecb tr\u00ed ch\u0103m s\u00f3c h\u1ed5.<\/p>\n<p>Tr\u01b0\u1edbc h\u1ebft, h\u00e3y b\u1eaft \u0111\u1ea7u v\u1edbi m\u1ed9t interface d\u00f9ng \u0111\u1ec3 li\u1ec7t k\u00ea nh\u1eefng \u0111\u1ea7u vi\u1ec7c c\u1ee7a m\u1ed9t ng\u01b0\u1eddi ch\u0103m s\u00f3c h\u1ed5.<\/p>\n<pre>public interface TigerKeeper {\r\n\r\n  \u00a0\u00a0\u00a0\u00a0 void washTheTiger();\r\n  \u00a0\u00a0\u00a0\u00a0 void feedTheTiger();\r\n  \u00a0\u00a0\u00a0\u00a0 void petTheTiger();\r\n}<\/pre>\n<p>L\u00e0 m\u1ed9t ng\u01b0\u1eddi ch\u0103m s\u00f3c th\u00fa n\u0103ng n\u1ed5, ch\u00fang ta s\u1eb5n s\u00e0ng t\u1eafm r\u1eeda v\u00e0 cho h\u1ed5 \u0103n. Tuy nhi\u00ean, kh\u00f4ng ph\u1ea3i ai c\u0169ng c\u00f3 \u0111\u1ee7 k\u1ef9 n\u0103ng v\u00e0 l\u00f2ng can \u0111\u1ea3m \u0111\u1ec3 \u201cn\u1ef1ng&#8221; m\u1ed9t ch\u00fa h\u1ed5 to con c\u1ea3. Nh\u01b0ng do interface c\u1ee7a ch\u00fang ta qu\u00e1 r\u1ed9ng, n\u00ean ta b\u1eaft bu\u1ed9c ph\u1ea3i tri\u1ec3n khai code \u0111\u1ec3 \u201cn\u1ef1ng\u201d ch\u00fa h\u1ed5 \u1ea5y.<\/p>\n<p>Ch\u00fang ta c\u00f3 th\u1ec3 s\u1eeda l\u1ed7i n\u00e0y b\u1eb1ng c\u00e1ch chia interface l\u1edbn th\u00e0nh ba interface ri\u00eang bi\u1ec7t:<\/p>\n<pre>public interface TigerCleaner {\r\n  \u00a0\u00a0\u00a0\u00a0 void washTheTiger();\r\n}\r\n\r\npublic interface TigerFeeder {\r\n  \u00a0\u00a0\u00a0\u00a0 void feedTheTiger();\r\n}\r\n\r\npublic interface TigerPetter {\r\n  \u00a0\u00a0\u00a0\u00a0 void petTheTiger();\r\n}<\/pre>\n<p>Gi\u1edd \u0111\u00e2y, nh\u1edd c\u00f3 s\u1ef1 ph\u00e2n t\u00e1ch interface, ta c\u00f3 th\u1ec3 t\u1ef1 do tri\u1ec3n khai ch\u1ec9 nh\u1eefng ph\u01b0\u01a1ng th\u1ee9c c\u1ea7n thi\u1ebft \u0111\u1ed1i v\u1edbi ch\u00fang ta:<\/p>\n<pre>public class TigerCarer implements TigerCleaner, TigerFeeder {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 public void washTheTiger() {\r\n \u00a0\u00a0 \u00a0 \/\/T\u1eafm r\u1eeda m\u00e0 c\u00f2n d\u01a1!\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 public void feedTheTiger() {\r\n  \u00a0\u00a0\u00a0 \/\/Th\u1ee9 3 \u0103n c\u00e1 ng\u1eeb\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>V\u00e0 cu\u1ed1i c\u00f9ng, b\u1ea1n c\u00f3 th\u1ec3 nh\u01b0\u1eddng nhi\u1ec7m v\u1ee5 \u201cn\u1ef1ng&#8221; cho nh\u1eefng ai \u0111\u1ee7 k\u1ef9 n\u0103ng:<\/p>\n<pre>public class SkilledPerson implements TigerPetter {\r\n\r\n\u00a0\u00a0\u00a0\u00a0 public void petTheTiger() {\r\n\u00a0\u00a0\u00a0\u00a0 \/\/C\u1ea9n th\u1eadn b\u1ea1n nh\u00e9!\r\n\u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Dependency_Inversion_principle_%E2%80%93_Nguyen_tac_Dao_nguoc_Phu_thuoc\"><\/span><b>Dependency Inversion principle &#8211; Nguy\u00ean t\u1eafc \u0110\u1ea3o ng\u01b0\u1ee3c Ph\u1ee5 thu\u1ed9c<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>N\u1ed9i dung Nguy\u00ean t\u1eafc \u0110\u1ea3o ng\u01b0\u1ee3c Ph\u1ee5 thu\u1ed9c nh\u01b0 sau:<\/p>\n<blockquote><p><i>C\u00e1c th\u1ef1c th\u1ec3 ph\u1ea3i ph\u1ee5 thu\u1ed9c v\u00e0o abstraction, kh\u00f4ng ph\u1ea3i class c\u1ee5 th\u1ec3 hay ch\u1ee9c n\u0103ng c\u1ee5 th\u1ec3.<\/i><\/p>\n<p><i>Module c\u1ea5p cao kh\u00f4ng \u0111\u01b0\u1ee3c ph\u1ee5 thu\u1ed9c v\u00e0o module c\u1ea5p th\u1ea5p, nh\u01b0ng ch\u00fang \u0111\u1ec1u ph\u1ea3i ph\u1ee5 thu\u1ed9c v\u00e0o abstraction.<\/i><\/p><\/blockquote>\n<p>N\u00f3i m\u1ed9t c\u00e1ch \u0111\u01a1n gi\u1ea3n, nguy\u00ean t\u1eafc \u0110\u1ea3o ng\u01b0\u1ee3c Ph\u1ee5 thu\u1ed9c n\u00f3i r\u1eb1ng c\u00e1c class n\u00ean ph\u1ee5 thu\u1ed9c v\u00e0o interface ho\u1eb7c abstraction thay v\u00ec c\u00e1c class v\u00e0 ch\u1ee9c n\u0103ng c\u1ee5 th\u1ec3. \u0110i\u1ec1u n\u00e0y l\u00e0m cho c\u00e1c class m\u1edf r\u1ed9ng, tu\u00e2n theo nguy\u00ean t\u1eafc M\u1edf\/\u0111\u00f3ng.<\/p>\n<p>\u0110\u1ec3 v\u00ed d\u1ee5 c\u00e1ch \u00e1p d\u1ee5ng c\u1ee7a nguy\u00ean t\u1eafc n\u00e0y, h\u00e3y c\u00f9ng \u201cho\u00e0i ni\u1ec7m&#8221; v\u1edbi Windows 98:<\/p>\n<pre>public class Windows98Machine {}<\/pre>\n<p>Nh\u01b0ng l\u00e0m sao m\u1ed9t chi\u1ebfc m\u00e1y t\u00ednh l\u1ea1i c\u00f3 th\u1ec3 kh\u00f4ng c\u00f3 m\u00e0n h\u00ecnh v\u00e0 b\u00e0n ph\u00edm \u0111\u01b0\u1ee3c? H\u00e3y th\u00eam ch\u00fang v\u00e0o constructor \u0111\u1ec3 m\u1ecdi Windows98Machine m\u00e0 ch\u00fang ta kh\u1edfi t\u1ea1o \u0111\u1ec1u c\u00f3 s\u1eb5n Monitor v\u00e0 m\u1ed9t StandardKeyboard:<\/p>\n<pre>public class Windows98Machine {\r\n\r\n\u00a0\u00a0\u00a0\u00a0 private final StandardKeyboard keyboard;\r\n\u00a0\u00a0\u00a0\u00a0 private final Monitor monitor;\r\n\r\n\u00a0\u00a0\u00a0\u00a0 public Windows98Machine() {\r\n\u00a0\u00a0\u00a0\u00a0 monitor = new Monitor();\r\n\u00a0\u00a0\u00a0\u00a0 keyboard = new StandardKeyboard();\r\n\u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>V\u1edbi code n\u00e0y, ch\u00fang ta c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng StandardKeyboard v\u00e0 Monitor tho\u1ea3i m\u00e1i trong class Windows98Machine.<\/p>\n<p>Tuy nhi\u00ean, b\u1eb1ng c\u00e1ch khai b\u00e1o StandardKeyboard v\u00e0 Monitor v\u1edbi t\u1eeb kh\u00f3a m\u1edbi, ch\u00fang ta \u0111\u00e3 li\u00ean k\u1ebft ch\u1eb7t ch\u1ebd ba class n\u00e0y l\u1ea1i v\u1edbi nhau.<\/p>\n<p>\u0110i\u1ec1u n\u00e0y kh\u00f4ng ch\u1ec9 l\u00e0m cho Windows98Machine kh\u00f3 ki\u1ec3m tra m\u00e0 ch\u00fang ta c\u00f2n m\u1ea5t kh\u1ea3 n\u0103ng chuy\u1ec3n \u0111\u1ed5i class StandardKeyboard b\u1eb1ng m\u1ed9t l\u1edbp kh\u00e1c n\u1ebfu c\u00f3 nhu c\u1ea7u. V\u00e0 ch\u00fang ta c\u0169ng kh\u00f4ng th\u1ec3 chuy\u1ec3n \u0111\u1ed5i class Monitor.<\/p>\n<p>H\u00e3y t\u00e1ch Windows98Machine ra kh\u1ecfi StandardKeyboard b\u1eb1ng c\u00e1ch th\u00eam m\u1ed9t interface Keyboard t\u1ed5ng qu\u00e1t h\u01a1n v\u00e0 s\u1eed d\u1ee5ng interface n\u00e0y trong class:<\/p>\n<pre>public interface Keyboard { }<\/pre>\n<pre>public class Windows98Machine{\r\n\r\n\u00a0\u00a0\u00a0\u00a0 private final Keyboard keyboard;\r\n\u00a0\u00a0\u00a0\u00a0 private final Monitor monitor;\r\n\r\n\u00a0\u00a0\u00a0\u00a0 public Windows98Machine(Keyboard keyboard, Monitor monitor) {\r\n\u00a0\u00a0\u00a0\u00a0 this.keyboard = keyboard;\r\n\u00a0\u00a0\u00a0\u00a0 this.monitor = monitor;\r\n\u00a0\u00a0\u00a0\u00a0 }\r\n}<\/pre>\n<p>\u1ede \u0111\u00e2y, ch\u00fang ta \u0111ang s\u1eed d\u1ee5ng dependency injection pattern \u0111\u1ec3 th\u00eam Keyboard dependency v\u00e0o class Windows98Machine.<\/p>\n<p>Ch\u00fang ta c\u0169ng h\u00e3y s\u1eeda \u0111\u1ed5i class StandardKeyboard \u0111\u1ec3 tri\u1ec3n khai giao di\u1ec7n Keyboard sao cho ph\u00f9 h\u1ee3p \u0111\u1ec3 \u0111\u01b0a v\u00e0o class Windows98Machine:<\/p>\n<pre>public class StandardKeyboard implements Keyboard { }<\/pre>\n<p>B\u00e2y gi\u1edd, c\u00e1c class \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00e1ch r\u1eddi v\u00e0 giao ti\u1ebfp th\u00f4ng qua Keyboard abstraction. N\u1ebfu mu\u1ed1n, ch\u00fang ta c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng chuy\u1ec3n \u0111\u1ed5i lo\u1ea1i b\u00e0n ph\u00edm trong m\u00e1y b\u1eb1ng c\u00e1ch tri\u1ec3n khai interface kh\u00e1c. Ch\u00fang ta c\u00f3 th\u1ec3 l\u00e0m theo nguy\u00ean t\u1eafc t\u01b0\u01a1ng t\u1ef1 cho class Monitor.<\/p>\n<p>Gi\u1edd ch\u00fang ta \u0111\u00e3 t\u00e1ch r\u1eddi c\u00e1c th\u00e0nh ph\u1ea7n ph\u1ee5 thu\u1ed9c v\u00e0 c\u00f3 th\u1ec3 t\u1ef1 do ki\u1ec3m Windows98Machine v\u1edbi b\u1ea5t k\u1ef3 <a href=\"https:\/\/itviec.com\/blog\/framework-la-gi-top-framework-pho-bien-nhat\/\">framework<\/a> ki\u1ec3m tra n\u00e0o.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tong_ket\"><\/span><b> T\u1ed5ng k\u1ebft<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Trong b\u00e0i vi\u1ebft n\u00e0y, ch\u00fang ta \u0111\u00e3 t\u00ecm hi\u1ec3u s\u00e2u v\u1ec1 SOLID l\u00e0 g\u00ec v\u00e0 SOLID principles l\u00e0 g\u00ec. B\u00e0i vi\u1ebft b\u1eaft \u0111\u1ea7u b\u1eb1ng l\u1ecbch s\u1eed h\u00ecnh th\u00e0nh c\u1ee7a SOLID v\u00e0 l\u00fd do v\u00ec sao nh\u1eefng nguy\u00ean t\u1eafc n\u00e0y t\u1ed3n t\u1ea1i v\u00e0 c\u1ea7n thi\u1ebft trong l\u1eadp tr\u00ecnh.<\/p>\n<p>B\u1eb1ng c\u00e1ch ph\u00e2n t\u00edch t\u1eebng ch\u1eef c\u00e1i m\u1ed9t trong SOLID, ITviec \u0111\u00e3 \u0111i s\u00e2u v\u00e0o \u00fd ngh\u0129a c\u1ee7a t\u1eebng nguy\u00ean t\u1eafc c\u0169ng nh\u01b0 nh\u1eefng c\u00e1ch \u00e1p d\u1ee5ng ph\u00f9 h\u1ee3p \u0111\u01b0\u1ee3c minh h\u1ecda qua v\u00ed d\u1ee5 d\u1ec5 hi\u1ec3u.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"sp-no-webp wp-image-5668 aligncenter sp-no-webp entered lazyloaded\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png\" alt=\"robby-2\" width=\"300\" height=\"300\" data-lazy-src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png\" data-lazy-sizes=\"(max-width: 300px) 100vw, 300px\" data-lazy-srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-200x200.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-60x60.png 60w\" data-ll-status=\"loaded\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-200x200.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-60x60.png 60w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n<\/div>\n<p id=\"block-bdf220a1-3635-4794-9101-81d879939b92\" class=\"has-text-align-center\" style=\"text-align: center;\"><strong>B\u1ea1n th\u1ea5y b\u00e0i vi\u1ebft hay v\u00e0 h\u1eefu \u00edch? \u0110\u1eebng ng\u1ea1i Share v\u1edbi b\u1ea1n b\u00e8 v\u00e0 \u0111\u1ed3ng nghi\u1ec7p nh\u00e9.<\/strong><\/p>\n<p id=\"block-a1315aab-406f-48df-97fc-6b9584e6e134\" class=\"has-text-align-center\" style=\"text-align: center;\"><strong>V\u00e0 nhanh tay tham kh\u1ea3o\u00a0<a href=\"http:\/\/itviec.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">vi\u1ec7c l\u00e0m IT<\/a>\u00a0\u201cch\u1ea5t\u201d tr\u00ean ITviec<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SOLID l\u00e0 g\u00ec v\u00e0 v\u00ec sao vi\u1ec7c tu\u00e2n th\u1ee7 SOLID s\u1ebd gi\u00fap b\u1ea1n tr\u1edf th\u00e0nh l\u1eadp tr\u00ecnh vi\u00ean gi\u1ecfi? 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng gi\u00fap c\u00e1c thi\u1ebft k\u1ebf h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng tr\u1edf n\u00ean d\u1ec5 hi\u1ec3u, linh ho\u1ea1t v\u00e0 d\u1ec5 b\u1ea3o tr\u00ec h\u01a1n &#8211; \u0111i\u1ec1u m\u00e0 m\u1ecdi developer \u0111\u1ec1u mu\u1ed1n khi vi\u1ebft [&hellip;]<\/p>\n","protected":false},"author":95,"featured_media":27033,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109,99],"tags":[],"class_list":["post-27020","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it","category-developer"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SOLID l\u00e0 g\u00ec? Gi\u1ea3i th\u00edch d\u1ec5 hi\u1ec3u 5 SOLID principles (k\u00e8m v\u00ed d\u1ee5)<\/title>\n<meta name=\"description\" content=\"SOLID l\u00e0 g\u00ec? T\u00ecm hi\u1ec3u c\u00e1ch 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng ho\u1ea1t \u0111\u1ed9ng c\u0169ng nh\u01b0 c\u00e1ch \u00e1p d\u1ee5ng ngay.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/solid-la-gi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SOLID l\u00e0 g\u00ec? 5 ph\u00fat hi\u1ec3u ngay c\u00e1ch \u00e1p d\u1ee5ng chi ti\u1ebft nh\u1eefng nguy\u00ean t\u1eafc SOLID\" \/>\n<meta property=\"og:description\" content=\"SOLID l\u00e0 g\u00ec v\u00e0 v\u00ec sao vi\u1ec7c tu\u00e2n th\u1ee7 SOLID s\u1ebd gi\u00fap b\u1ea1n tr\u1edf th\u00e0nh l\u1eadp tr\u00ecnh vi\u00ean gi\u1ecfi? 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng gi\u00fap c\u00e1c thi\u1ebft k\u1ebf\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/solid-la-gi\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-11T07:11:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-01T08:12:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/05\/solid-blog-thumbnail.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"337\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tuong Uyen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tuong Uyen\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SOLID l\u00e0 g\u00ec? Gi\u1ea3i th\u00edch d\u1ec5 hi\u1ec3u 5 SOLID principles (k\u00e8m v\u00ed d\u1ee5)","description":"SOLID l\u00e0 g\u00ec? T\u00ecm hi\u1ec3u c\u00e1ch 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng ho\u1ea1t \u0111\u1ed9ng c\u0169ng nh\u01b0 c\u00e1ch \u00e1p d\u1ee5ng ngay.","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:\/\/itviec.com\/blog\/solid-la-gi\/","og_locale":"vi_VN","og_type":"article","og_title":"SOLID l\u00e0 g\u00ec? 5 ph\u00fat hi\u1ec3u ngay c\u00e1ch \u00e1p d\u1ee5ng chi ti\u1ebft nh\u1eefng nguy\u00ean t\u1eafc SOLID","og_description":"SOLID l\u00e0 g\u00ec v\u00e0 v\u00ec sao vi\u1ec7c tu\u00e2n th\u1ee7 SOLID s\u1ebd gi\u00fap b\u1ea1n tr\u1edf th\u00e0nh l\u1eadp tr\u00ecnh vi\u00ean gi\u1ecfi? 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng gi\u00fap c\u00e1c thi\u1ebft k\u1ebf","og_url":"https:\/\/itviec.com\/blog\/solid-la-gi\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2023-05-11T07:11:36+00:00","article_modified_time":"2024-02-01T08:12:53+00:00","og_image":[{"width":640,"height":337,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/05\/solid-blog-thumbnail.jpg","type":"image\/jpeg"}],"author":"Tuong Uyen","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Tuong Uyen","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"12 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/"},"author":{"name":"Tuong Uyen","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/e97d0e359f8840eaea7dc3a96006a8d4"},"headline":"SOLID l\u00e0 g\u00ec? 5 ph\u00fat hi\u1ec3u ngay c\u00e1ch \u00e1p d\u1ee5ng chi ti\u1ebft nh\u1eefng nguy\u00ean t\u1eafc SOLID","datePublished":"2023-05-11T07:11:36+00:00","dateModified":"2024-02-01T08:12:53+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/"},"wordCount":3512,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/05\/solid-blog-thumbnail.jpg","articleSection":["Chuy\u00ean m\u00f4n IT","Developer"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/","url":"https:\/\/itviec.com\/blog\/solid-la-gi\/","name":"SOLID l\u00e0 g\u00ec? Gi\u1ea3i th\u00edch d\u1ec5 hi\u1ec3u 5 SOLID principles (k\u00e8m v\u00ed d\u1ee5)","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/05\/solid-blog-thumbnail.jpg","datePublished":"2023-05-11T07:11:36+00:00","dateModified":"2024-02-01T08:12:53+00:00","description":"SOLID l\u00e0 g\u00ec? T\u00ecm hi\u1ec3u c\u00e1ch 5 SOLID principles c\u1ee7a l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng ho\u1ea1t \u0111\u1ed9ng c\u0169ng nh\u01b0 c\u00e1ch \u00e1p d\u1ee5ng ngay.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/solid-la-gi\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/05\/solid-blog-thumbnail.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2023\/05\/solid-blog-thumbnail.jpg","width":640,"height":337,"caption":"solid l\u00e0 g\u00ec - solid principles"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/solid-la-gi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"SOLID l\u00e0 g\u00ec? 5 ph\u00fat hi\u1ec3u ngay c\u00e1ch \u00e1p d\u1ee5ng chi ti\u1ebft nh\u1eefng nguy\u00ean t\u1eafc SOLID"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/e97d0e359f8840eaea7dc3a96006a8d4","name":"Tuong Uyen","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","caption":"Tuong Uyen"},"url":"https:\/\/itviec.com\/blog\/author\/tuong-uyen-pikachu\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/27020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/95"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=27020"}],"version-history":[{"count":0,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/27020\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/27033"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=27020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=27020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=27020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}