Theo như mình biết thì Dependency Inversion là một nguyên tắc thiết kế trong OOP còn Dependency Injection là một cách để triển khai Dependency Inversion trong source code. Cụ thể, Dependency Inversion Principle (DIP) là 1 trong 5 nguyên tắc của SOLID. Trọng tâm của DIP hướng đến việc các module cấp cao không nên phụ thuộc trực tiếp vào các module cấp thấp mà cả hai phải phụ thuộc vào các lớp trừu tượng. Lấy ví dụ về bàn phím và máy tính Desktop: Để hiển thị đúng ký tự đã gõ trên bàn phím, máy tính cần biết được phím nào đã được nhấn. Giả sử một cái bàn phím A nào đó được tạo ra và không tuân theo quy chuẩn nào hết, sau đó mới tạo ra một cái máy tính để sử dụng được với cái bàn phím A này, máy tính phải hiểu được cấu trúc cũng như các tín hiệu của cái bàn phím A này. Giờ ta có nhu cầu đổi sang bàn phím B với quy chuẩn hoàn toàn khác, ta phải thiết kế các máy tính lại từ đầu. Khi áp dụng DIP ta sẽ có quy trình thiết kế như sau. Tạo ra một chuẩn giao tiếp giữa bàn phím và máy tính, sau đó thiết kế bàn phím A và máy tính theo chuẩn giao tiếp này. Khi có một cái bàn phím B mới thì chỉ cần thiết kế nó theo đúng chuẩn giao tiếp này là được. Thậm chí khi bạn không sử dụng bàn phím mà sử dụng máy tính bỏ túi được "độ" sao cho có thể giao tiếp theo chuẩn này thì nó vẫn có thể hoàn toàn thay thế cái bàn phím A kia mà không gặp bất cứ vấn đề gì. Khi này Dependency Injection có thể hiểu là bạn tạo ra cái cổng USB để cắm bàn phím chứ không cần phải nối dây trực tiếp vào bảng mạnh.
đúng vậy,bản thân mình không sử dụng bất kì một lớp class nào của oop thứ nhất là nó không hề khiến code của bạn gọn hơn hay hệ thống hơn so với việc dùng con trỏ hàm bên trong một struct.Thứ hai quan trọng nhất đó là hiệu suất,nếu sử dụng các API âm thanh của window viết trên C thì không nên gọi hàm trong lớp vì chúng chậm và gây lỗi cái này là trải nghiệm thực tế của mình cho thấy oop là chậm hoặc không cần thiết trong lập trình.
Месяц назад+11
Mình nghĩ nên thay cái performance bởi cái clean code. Hồi còn sinh viên, mình khá quan tâm đến perfomance của code một phần vì trong chương trình học cũng có nhắc đến khái niệm độ phức tạp của thuật toán, một phần do mình đi thi thuật toán nên hiển nhiên peformance của code rất quan trọng rồi.
DIP là triết lý thiết kế hệ thống (gọi là design principle hoặc philosophy cũng được), một module cấp cao không nên phụ thuộc vào module cấp thấp (cho tới architect vẫn thế) DI là implement của DIP, cái này về mức code thôi (level thấp nhất của 1 module), sẽ có tool hỗ trợ (Host Application của .NET, Bean bên Java, ...) Giống quả CQRS và CQS
Thế mục đích của cái này để làm gì á bạn? Mình mới đi làm có 3 4 năm ở outsource, cũng không hiểu ba cái này, chỉ có đọc docs rồi làm theo req thôi, nhiều khi dính quả source code nát quá, không có gì học luôn :(
Follow anh zai từ lúc trên tiktok , phải nói là ah chia sẽ những kiến thức rất thực tế và có chiều sâu , đã vậy còn rất khiêm tốn 😁 , chúc kênh phát triển để giúp đỡ newbie như e
Mình nghĩ rằng Dependency Inversion là một principle/idea/concept về việc quản lý dependency. Còn Dependency Injection là một pattern/solution/technique để implement cái idea kia. Ngoài Dependency Injection thì còn có một pattern khác là Service Locator. Cả 2 pattern đều rất phổ biến trong việc quản lý dependency.
Cám ơn e. A biết các nội dung mình truyền tải chưa thực sự trọn vẹn về mặt trình bày hấp dẫn nhưng vẫn được mọi người đón nhận. Đó là nguồn động lực lớn để a hoàn thiện hơn. Chúc e may mắn thành công 🙌🍀
những bạn nào quá quen thuộc với OOP mà vẫn muốn hiểu rõ hơn nữa về OOP, tốt nhất là nghịch các Language không OOP như C, Golang, F#, Javascript... để xem nó giải quyết vấn đề thế nào khi ko có OOP. các mặt trái của Oop
@DanTech0xFF khó khăn lớn nhất đối với mình là debug higher order function. Một hàm f1 có input là 1 hàm f2 rồi truyền f2 cho thằng khác gọi, hàm f2 lại nhận input là hàm f3, f4.. rồi output cũng lại là 1 hàm khác, ko rõ sẽ được gọi vào thời điểm nào... lúc debug stack trace chả giúp đỡ được nhiều, mà phải hiểu được tư duy của tác giả cái mớ hỗn độn này mới mong gỡ được.
@@duongphuhiep Chính vì vậy người ta mới tích đẻ ra TS cho JS, để bạn biết được hàm f1 nhận gì và trả về kết quả gì từ đó có thể debug dễ hơn, nếu thấy một chuỗi hàm gọi lồng nhau thì chỉ cần check đúng hàm nào nó làm sai thì có thể giải quyết đc.😅
Dạ, nội dung bổ ích ạ. Mà kiểu e thấy các phần nội dung kiến thức a nên có hình ảnh minh hoạ gì đó thì tuyệt hơn. Ví dụ như trong phần DI thì có thêm minh hoạ thì 10đ ạ. Này mới 9.5 thôi ạ 😅
vid hay, học về oop thì nên biết thêm chứ thuộc mỗi 4 tính chất thôi thì chưa thấy thú vị lắm. Mà e cũng có 1 vài bổ sung sau + chủ đề oop và performance , lấy java làm ví dụ đi thì e nhớ ko nhầm ngôn ngữ và framework nó quản lý mấy cái class với biến tận răng rồi. Oke mà cho là v đi thì liệu việc viết class cồng kềnh, kế thừa nhiều quá ảnh hưởng như nào đến hiệu năng, hay chỉ đơn thuần là rối mắt thôi. E thấy đây là chủ đề hay, vì bàn về hiệu năng mà ko nói đến big o thì ít ng làm + nên ngó qua 1 xíu về functional programming, tại vì 1 số ngôn ngữ oop cũng lấy vài tính năng của FP cho tiện. Và ngó qua FP để biết là ko chỉ có mỗi OOP
Trăm lần cám ơn bạn đã phản hồi lên video. Nội dung trong video có thể chưa thuyết phục được tất cả mọi người, mình hi vọng nhận được nhiều sự bổ sung góp ý để làm tốt hơn 😁🤗
OOP nhớ đến câu chuyện con khỉ và khu rừng. Cần 1 quả chuối nhưng lại nhận được một con khỉ đang cầm quả chuối và cả khu rừng 😁 "Và sau đó, tôi thực hiện 1 project mới, và tôi nghĩ ngay về cái class mà tôi đã từng sử dụng ở project trước đây. Thật tiện, việc cần làm duy nhất là lấy class đó ra từ project cũ và sử dụng. So simple! À thì.. không chỉ là mỗi class đó. Chúng ta sẽ cần class cha của nó nữa. Nhưng không sao, vậy cũng được mà. Um.. Chờ chút, có vẻ là sẽ cần thêm cả class cha của cha của class đó nữa cơ. Ok, tôi vẫn có thể xử lí được nó, không sao cả. Và thật là tuyệt, nó không chạy. Tại sao chứ!!?? À, có lẽ là tôi cần thêm class này, à cả class kia nữa... Không sao, mọi thứ vẫn có thể kiểm soát được! Nhưng chờ đã, không chỉ class kia, ta cần thêm class cha của nó, và cả cha của cha của.....!"
Vì sao anh lại xem Dependency Inversion là một cách làm bonus nhỉ? Có vẻ chưa chuẩn lắm, trong khi nó là principle mà để đáp ứng được principle ấy người ta implement Dependency Injection hoặc Service Locator,..
@@huyhunhngc Vì theo quá trình phát triển ban đầu người ta chỉ cần Dependency Injection mà không cần (hoặc ko biết) Dependency Inversion. Chỉ khi có nhu cầu mở rộng source code, hoặc thay thế module mới áp dụng D Inversion. Nên a nói nó là bonus của D Injection.
@@DanTech0xFFtheo em nghĩ dependency inversion là định nghĩa lớn, dependency injection là 1 cách áp dụng. Inversion là đảo ngược đưa sự phụ thuộc ra khỏi class laptop bằng cách truyền biến bàn phím vào, có thể truyền phím của laptop, phím rời phím cơ
Chào Dan, mình xem videos rồi, mới đọc các bình luận, xin phép góp ý là chắc Dan "update" thêm cách trình bày để mấy bạn tránh hiểu nhầm ý Dan. Hông lẽ là... để có thêm lý do làm videos :)). Chúc kênh phát triển tốt nhé.
Trước mình nghĩ design pattern nó là một cái gì đó ghê gớm lắm, sau đụng dự án mới hiểu nó chỉ là một cách triển khai code để giải quyết một vấn đề nào đó thôi. Khuyến khích ông là nên tự tìm hiểu xong làm dự án tự ứng dụng chứ đừng xem video 10-20p trên mạng vì design pattern nó rất nhiều và không phải chỗ nào cũng dùng là tốt và chỉ nên dùng khi ông thực sự cần và hiểu nó, nếu ông giác ngộ thì chỉ cần lướt qua design pattern nào đó thôi là hiểu liền😂(nói hơi quá) hoặc tự tạo một design pattern của riêng ông để giải quyết một vấn đề của ông.
Anh biết 1 kênh tip js đã làm về design pattern em có thể tham khảo. Hoặc tự đọc sách "gang of four design pattern" Nếu anh làm video về design pattern anh cũng sẽ nói lại những gì trong sách dạy thôi, với sự diễn đạt của anh.
Em cảm ơn anh về clip này, nó giúp ích cho em khá nhiều. Em có 1 chúc thắc mắc là việc sử dụng kế thừa có xuất hiện nhiều trong khi mình đi làm không anh
Video bạn nói Dependency inversion nghĩa là truyền nhiều dependecy. Thực ra ko phải vậy, nguyên lý này nghĩa là đảo ngược mối quan hệ giữa các module: chúng sẽ giao tiếp với nhau qua abstract chứ ko phải concrete
@@anhtuta95anh nhận định đúng nè, anh trên vid đưa ví dụ laptop với bàn phím, thì inversion đưa bàn phím ra ngoài truyền object phím laptop hoặc phím cơ vào. Đây ví dụ căn bản nhất của Dependency Inversion, Dependency Injection là 1 áp dụng của định nghĩa trên
2 Anh trai nói em yếu kiến thức thì có thể chỉ ra yếu ntn và đưa ví dụ để cover mảnh kiến thức bị yếu giúp em với 😁. Còn chuyện em yếu sinh lý, em cam đoan là anh nói xạo, võ đoán. Anh ko biết em khoẻ ntn đâu.
em code reactjs với expressjs (dùng typescript) nhưng đó giờ em không thề đụng vô gì tới OOP luôn nhưng vẫn ra sản phẩm bình thường. Em thắc mắc là liệu OOP có thực sự là một thứ quan trọng không ạ.
@@DanTech0xFF Ý em là OOP thực sự kiểu trong java á, trong typescript em chỉ dùng mỗi "type" để định nghĩa kiểu dữ liệu. Vài Trường hợp thì có đụng vô Class nhưng không nhiều.
Theo như mình biết thì Dependency Inversion là một nguyên tắc thiết kế trong OOP còn Dependency Injection là một cách để triển khai Dependency Inversion trong source code.
Cụ thể, Dependency Inversion Principle (DIP) là 1 trong 5 nguyên tắc của SOLID. Trọng tâm của DIP hướng đến việc các module cấp cao không nên phụ thuộc trực tiếp vào các module cấp thấp mà cả hai phải phụ thuộc vào các lớp trừu tượng.
Lấy ví dụ về bàn phím và máy tính Desktop:
Để hiển thị đúng ký tự đã gõ trên bàn phím, máy tính cần biết được phím nào đã được nhấn. Giả sử một cái bàn phím A nào đó được tạo ra và không tuân theo quy chuẩn nào hết, sau đó mới tạo ra một cái máy tính để sử dụng được với cái bàn phím A này, máy tính phải hiểu được cấu trúc cũng như các tín hiệu của cái bàn phím A này. Giờ ta có nhu cầu đổi sang bàn phím B với quy chuẩn hoàn toàn khác, ta phải thiết kế các máy tính lại từ đầu.
Khi áp dụng DIP ta sẽ có quy trình thiết kế như sau. Tạo ra một chuẩn giao tiếp giữa bàn phím và máy tính, sau đó thiết kế bàn phím A và máy tính theo chuẩn giao tiếp này. Khi có một cái bàn phím B mới thì chỉ cần thiết kế nó theo đúng chuẩn giao tiếp này là được. Thậm chí khi bạn không sử dụng bàn phím mà sử dụng máy tính bỏ túi được "độ" sao cho có thể giao tiếp theo chuẩn này thì nó vẫn có thể hoàn toàn thay thế cái bàn phím A kia mà không gặp bất cứ vấn đề gì.
Khi này Dependency Injection có thể hiểu là bạn tạo ra cái cổng USB để cắm bàn phím chứ không cần phải nối dây trực tiếp vào bảng mạnh.
Cmt của bạn thật chi tiết. Cám ơn bạn đã bổ sung kiến thức cho video 🙌
kênh anh đang phát triển tốt, chúc anh càng có thêm động lực ra nhiều video hay
Đa tạ e nha. Theo dõi các content mới của anh nha.Chúc e thành công nheng.
đúng vậy,bản thân mình không sử dụng bất kì một lớp class nào của oop thứ nhất là nó không hề khiến code của bạn gọn hơn hay hệ thống hơn so với việc dùng con trỏ hàm bên trong một struct.Thứ hai quan trọng nhất đó là hiệu suất,nếu sử dụng các API âm thanh của window viết trên C thì không nên gọi hàm trong lớp vì chúng chậm và gây lỗi cái này là trải nghiệm thực tế của mình cho thấy oop là chậm hoặc không cần thiết trong lập trình.
Mình nghĩ nên thay cái performance bởi cái clean code. Hồi còn sinh viên, mình khá quan tâm đến perfomance của code một phần vì trong chương trình học cũng có nhắc đến khái niệm độ phức tạp của thuật toán, một phần do mình đi thi thuật toán nên hiển nhiên peformance của code rất quan trọng rồi.
Đồng ý 100% với bạn luôn. Hiệu năng luôn cần được cân nhắc trong quá trình phát triển software.
DIP là triết lý thiết kế hệ thống (gọi là design principle hoặc philosophy cũng được), một module cấp cao không nên phụ thuộc vào module cấp thấp (cho tới architect vẫn thế)
DI là implement của DIP, cái này về mức code thôi (level thấp nhất của 1 module), sẽ có tool hỗ trợ (Host Application của .NET, Bean bên Java, ...)
Giống quả CQRS và CQS
Thế mục đích của cái này để làm gì á bạn? Mình mới đi làm có 3 4 năm ở outsource, cũng không hiểu ba cái này, chỉ có đọc docs rồi làm theo req thôi, nhiều khi dính quả source code nát quá, không có gì học luôn :(
@@QaAq-z4g Mục đích chính để loose coupling, gián tiếp tăng tính re-usable bạn
@@nghe-van-phong-luong-5-trieu Bạn đi làm lâu chưa? Sao bạn giỏi thế?
@@QaAq-z4g Vừa ra trường thôi, mình có base ở chuyên tin nên học hiểu nhanh mấy cái này...
rỏ ràng và chi tiết, ủng hộ kênh ạ e mới làm 3 năm mấy thôi có mấy cài còn chưa hiểu lắm
Cám ơn e nha. Cmt này thực sự rất tạo động lực cho a tiếp tục 😆
Follow anh zai từ lúc trên tiktok , phải nói là ah chia sẽ những kiến thức rất thực tế và có chiều sâu , đã vậy còn rất khiêm tốn 😁 , chúc kênh phát triển để giúp đỡ newbie như e
Mình nghĩ rằng Dependency Inversion là một principle/idea/concept về việc quản lý dependency. Còn Dependency Injection là một pattern/solution/technique để implement cái idea kia. Ngoài Dependency Injection thì còn có một pattern khác là Service Locator. Cả 2 pattern đều rất phổ biến trong việc quản lý dependency.
Cám ơn bạn đã bổ sung kiến thức cho kênh. Vạn lần chân thành biết ơn 😁🙌
Coi anh từ Tiktok qua đây, em giới thiệu cho mấy ae công ty coi luôn =)) quá chất a ơi
Cám ơn e. A biết các nội dung mình truyền tải chưa thực sự trọn vẹn về mặt trình bày hấp dẫn nhưng vẫn được mọi người đón nhận. Đó là nguồn động lực lớn để a hoàn thiện hơn. Chúc e may mắn thành công 🙌🍀
những bạn nào quá quen thuộc với OOP mà vẫn muốn hiểu rõ hơn nữa về OOP, tốt nhất là nghịch các Language không OOP như C, Golang, F#, Javascript... để xem nó giải quyết vấn đề thế nào khi ko có OOP. các mặt trái của Oop
Một gợi ý hay. Bro có thể chia sẻ thêm về 1 số điểm khó khăn trong việc lập trình hàm ko?
@DanTech0xFF khó khăn lớn nhất đối với mình là debug higher order function. Một hàm f1 có input là 1 hàm f2 rồi truyền f2 cho thằng khác gọi, hàm f2 lại nhận input là hàm f3, f4.. rồi output cũng lại là 1 hàm khác, ko rõ sẽ được gọi vào thời điểm nào... lúc debug stack trace chả giúp đỡ được nhiều, mà phải hiểu được tư duy của tác giả cái mớ hỗn độn này mới mong gỡ được.
Có thể dùng stack trace để debug nơi nào call hàm. Nhưng quả thật rất đúng khi bảo trì callback hell thì ai cũng nhức đầu thôi.
@@duongphuhiep Chính vì vậy người ta mới tích đẻ ra TS cho JS, để bạn biết được hàm f1 nhận gì và trả về kết quả gì từ đó có thể debug dễ hơn, nếu thấy một chuỗi hàm gọi lồng nhau thì chỉ cần check đúng hàm nào nó làm sai thì có thể giải quyết đc.😅
từ khi em ứng dụng design pattern thì em mới biết là cái kế thừa / đa hình quan trọng như nào
Rất dễ hiểu... Mình đọc nhiều blog mà vẫn chưa hiểu về DI bằng video 🎉
Ví dụ dễ hiểu quá anh, video bổ ích ạ 🥰
Đa tạ em 🤘. Hóng chờ video mới nha
mong a ra video sinh viên cần đáp ứng gì cho danh nghiệp khi đi làm
Level dev cũng ở dạng middle thôi học thêm đi e...và chú tâm học trau dồi thêm đi ..kiến thức có bao nhiêu đâu mà còn youtube. a khuyên thật lòng.
Cám ơn anh đã khuyên 🤗
Dạ, nội dung bổ ích ạ. Mà kiểu e thấy các phần nội dung kiến thức a nên có hình ảnh minh hoạ gì đó thì tuyệt hơn. Ví dụ như trong phần DI thì có thêm minh hoạ thì 10đ ạ. Này mới 9.5 thôi ạ 😅
Cám ơn góp ý của e 😆. Kênh mới làm nên còn thiếu nhiều, e ủng hộ lâu dài nha.
vid hay, học về oop thì nên biết thêm chứ thuộc mỗi 4 tính chất thôi thì chưa thấy thú vị lắm. Mà e cũng có 1 vài bổ sung sau
+ chủ đề oop và performance , lấy java làm ví dụ đi thì e nhớ ko nhầm ngôn ngữ và framework nó quản lý mấy cái class với biến tận răng rồi. Oke mà cho là v đi thì liệu việc viết class cồng kềnh, kế thừa nhiều quá ảnh hưởng như nào đến hiệu năng, hay chỉ đơn thuần là rối mắt thôi. E thấy đây là chủ đề hay, vì bàn về hiệu năng mà ko nói đến big o thì ít ng làm
+ nên ngó qua 1 xíu về functional programming, tại vì 1 số ngôn ngữ oop cũng lấy vài tính năng của FP cho tiện. Và ngó qua FP để biết là ko chỉ có mỗi OOP
Trăm lần cám ơn bạn đã phản hồi lên video. Nội dung trong video có thể chưa thuyết phục được tất cả mọi người, mình hi vọng nhận được nhiều sự bổ sung góp ý để làm tốt hơn 😁🤗
OOP nhớ đến câu chuyện con khỉ và khu rừng. Cần 1 quả chuối nhưng lại nhận được một con khỉ đang cầm quả chuối và cả khu rừng 😁
"Và sau đó, tôi thực hiện 1 project mới, và tôi nghĩ ngay về cái class mà tôi đã từng sử dụng ở project trước đây. Thật tiện, việc cần làm duy nhất là lấy class đó ra từ project cũ và sử dụng. So simple!
À thì.. không chỉ là mỗi class đó. Chúng ta sẽ cần class cha của nó nữa. Nhưng không sao, vậy cũng được mà.
Um.. Chờ chút, có vẻ là sẽ cần thêm cả class cha của cha của class đó nữa cơ. Ok, tôi vẫn có thể xử lí được nó, không sao cả.
Và thật là tuyệt, nó không chạy. Tại sao chứ!!?? À, có lẽ là tôi cần thêm class này, à cả class kia nữa... Không sao, mọi thứ vẫn có thể kiểm soát được!
Nhưng chờ đã, không chỉ class kia, ta cần thêm class cha của nó, và cả cha của cha của.....!"
Haha, thật ko may. Tôi cần thêm cả 3rd party library nữa. Ôi cuộc đời.
Vì sao anh lại xem Dependency Inversion là một cách làm bonus nhỉ? Có vẻ chưa chuẩn lắm, trong khi nó là principle mà để đáp ứng được principle ấy người ta implement Dependency Injection hoặc Service Locator,..
@@huyhunhngc Vì theo quá trình phát triển ban đầu người ta chỉ cần Dependency Injection mà không cần (hoặc ko biết) Dependency Inversion. Chỉ khi có nhu cầu mở rộng source code, hoặc thay thế module mới áp dụng D Inversion. Nên a nói nó là bonus của D Injection.
Mình cũng chung câu hỏi cách làm bonus nghĩa là gì ? dependency injection khác dependency inversion không ?
@@DanTech0xFFtheo em nghĩ dependency inversion là định nghĩa lớn, dependency injection là 1 cách áp dụng. Inversion là đảo ngược đưa sự phụ thuộc ra khỏi class laptop bằng cách truyền biến bàn phím vào, có thể truyền phím của laptop, phím rời phím cơ
@@tuvantran660 A nghĩ mình có chung góc nhìn á. Nhưng trình bày cách hiểu khác nhau. It's all good.
anh ra series OOP đi anh
Hãy chuyển qua Functional Programming, bạn sẽ không gặp các issue của OPP😂
Chào Dan, mình xem videos rồi, mới đọc các bình luận, xin phép góp ý là chắc Dan "update" thêm cách trình bày để mấy bạn tránh hiểu nhầm ý Dan. Hông lẽ là... để có thêm lý do làm videos :)). Chúc kênh phát triển tốt nhé.
Cám ơn bạn nhìu nha 😅
anh biết chỗ nào gợi ý code trong vs code k anh(ví dụ như IntelliCode API Usage Examples á anh)
Em dùng tab nine thử xem. Nó free á
Với vai trò là người đi tuyển dụng thì theo một sinh viên cần nắm vững những kiến thức gì v a
Nếu là sinh viên thì em hãy học giỏi nhất có thể e nhé. Các project môn học hãy làm mọi cách để đạt điểm cao, hiểu hệ thống và tìm cách tối ưu chúng.
Mac của bạn bao nhiêu GB Ram thế
Mình làm Mobile nên hơi ngốn RAM. Cty cấp con 32Gb xài thả ga 🤣
Đã theo dõi nha bác, chúc bác sớm nhận được Nút
Đa tạ vị huynh đệ này 🤘
anh có video về design patern không anh
Trước mình nghĩ design pattern nó là một cái gì đó ghê gớm lắm, sau đụng dự án mới hiểu nó chỉ là một cách triển khai code để giải quyết một vấn đề nào đó thôi. Khuyến khích ông là nên tự tìm hiểu xong làm dự án tự ứng dụng chứ đừng xem video 10-20p trên mạng vì design pattern nó rất nhiều và không phải chỗ nào cũng dùng là tốt và chỉ nên dùng khi ông thực sự cần và hiểu nó, nếu ông giác ngộ thì chỉ cần lướt qua design pattern nào đó thôi là hiểu liền😂(nói hơi quá) hoặc tự tạo một design pattern của riêng ông để giải quyết một vấn đề của ông.
@@keysd7095 trường tui k có dạy design pattern nên tui cũng k biết, nghe anh chủ kênh nói thì tui mới bắt đầu tìm hiểu
Anh biết 1 kênh tip js đã làm về design pattern em có thể tham khảo. Hoặc tự đọc sách "gang of four design pattern"
Nếu anh làm video về design pattern anh cũng sẽ nói lại những gì trong sách dạy thôi, với sự diễn đạt của anh.
@@DanTech0xFF anh cho em xin tên kênh với ạ, em cảm ơn anh
@Hansoo-h8e kênh Tip JavaScript nha e. Chủ kênh người VN, nội dung dễ hiểu.
á à, t đã phát hiện thấy filco shibuki 🙂
Haha, xài từ tết 2019 đến giờ vẫn tốt bạn ạ.
@@DanTech0xFF ko ngờ b cũng biết chơi đồ đấy :)) đồ này dùng thì bền khỏi bàn rồi
@@O...Maiden...O haha, ông bạn quá khen
Cuốn sách về Design Pattern anh nói là cuốn gì vậy ạ
E search google Gang of Four - Design Pattern
là cuốn này bạn ạ, Design Patterns: Elements of Reusable Object-Oriented Software
@@DanTech0xFF @ducnguyenminh1vti.d994 Dạ, Em cảm ơn 2 anh ạ
có đại học nông lâm tp hcm dạy design pattern với tên thiết kế hướng đối tượng a ạ :v
Quá tuyệt e ạ. Có thể các trường cũng cập nhật theo thời thế 😆.
Ko biết có trường nào bỏ môn java dạy luôn kotlin chưa nhỉ
@@DanTech0xFF thank a , đúng r anh , trường em dạy chuyên java đến mức độ dùng java làm mọi thứ ...........
UIT thì tên là Mẫu Thiết Kế :v
một số khái niệm e nghĩ a nên chú thích trên màn hình
Cám ơn em. Hi vọng kênh phát triển tốt để anh kiếm thêm 1 editor làm cùng. Hiện tại anh làm hết nên edit còn tạm
Mọi người cho em hỏi khái niệm instance nên hiểu thế nào mới đúng ạ
Hình dung instace là 1 cái bánh, còn class là cái khuôn.
@@DanTech0xFF dạ cảm ơn nhiều
Em cảm ơn anh về clip này, nó giúp ích cho em khá nhiều. Em có 1 chúc thắc mắc là việc sử dụng kế thừa có xuất hiện nhiều trong khi mình đi làm không anh
Có em nhé. Kế thừa, đa hình sẽ ở mọi nơi em code.
@@DanTech0xFF dạ em cảm ơn anh, chúc kênh anh mau phát triển hơn nữa nha
OOP nên học ở đâu vậy anh
Oop cố gắng tự học và làm project nhiều chút em. Chúc em thành công nhen
anh ơi, sách Design Pattern anh nói là sách gì vậy anh. GIờ trên thị trường tèm lem đủ thử em không biết cái nào nên chọn nữa.
Design pattern gang of four nhé em
Dependency inversion nghe ko đúng lắm...
@@anhtuta95 bro có thể bổ sung ko 👍🙏
Video bạn nói Dependency inversion nghĩa là truyền nhiều dependecy. Thực ra ko phải vậy, nguyên lý này nghĩa là đảo ngược mối quan hệ giữa các module: chúng sẽ giao tiếp với nhau qua abstract chứ ko phải concrete
@@anhtuta95anh nhận định đúng nè, anh trên vid đưa ví dụ laptop với bàn phím, thì inversion đưa bàn phím ra ngoài truyền object phím laptop hoặc phím cơ vào. Đây ví dụ căn bản nhất của Dependency Inversion, Dependency Injection là 1 áp dụng của định nghĩa trên
ví dụ về laptop ko hợp lý n
cũng vì thế mình đánh giá ku thớt này..yếu: kiến thức và sinh lý luôn đó
2 Anh trai nói em yếu kiến thức thì có thể chỉ ra yếu ntn và đưa ví dụ để cover mảnh kiến thức bị yếu giúp em với 😁.
Còn chuyện em yếu sinh lý, em cam đoan là anh nói xạo, võ đoán. Anh ko biết em khoẻ ntn đâu.
em code reactjs với expressjs (dùng typescript) nhưng đó giờ em không thề đụng vô gì tới OOP luôn nhưng vẫn ra sản phẩm bình thường. Em thắc mắc là liệu OOP có thực sự là một thứ quan trọng không ạ.
Typescript là oop wrapper của js mà e ko dùng oop. Vậy e code gì ở đó 😆
@@DanTech0xFF Ý em là OOP thực sự kiểu trong java á, trong typescript em chỉ dùng mỗi "type" để định nghĩa kiểu dữ liệu. Vài Trường hợp thì có đụng vô Class nhưng không nhiều.
@@DanTech0xFFtại sao Typescript lại là OOP wrapper của JS. Bản thân JS cũng có thể OOP đc mà. TS cái tên nói lên tất cả, type safe. 😂
không em code chạy là được =>>. Theo như e kể thì viết mỗi type dùng class thì ít thì e dùng js document cho lành
@@XuanDuyNguyenVo OOP là type safe đó thôi bạn
tôi đã sub với bạn
Đa tạ bạn đã sub, tôi trăm ngàn lần biết ơn sự ủng hộ này.