Tại sao nguyên tắc SOLID là bí quyết để viết code tốt hơn?

Поділитися
Вставка
  • Опубліковано 18 січ 2025

КОМЕНТАРІ • 71

  • @KhungLongAnCo2000
    @KhungLongAnCo2000  Місяць тому +5

    Hơi thiếu là đáng ra mình nên lấy thêm ví dụ bằng Java để dùng interface, abstract class thuần OOP sẽ dễ hiểu hơn, vì nhiều bạn bị confuse vụ interface, extends quá :D. Bạn nào chưa hiểu ví dụ thì có thể tìm hiểu thêm về OOP trong javascript, typescript nhé 😘😘😘

  • @vothihiena2455
    @vothihiena2455 10 днів тому

    Hay quá hehe bài này giúp em cải thiện thêm tư duy code

  • @penintel8292
    @penintel8292 Місяць тому +1

    Chiều nay em có buổi phỏng vấn intern thì xem được video này ạ. Rất dễ hiểu, em cảm ơn sếp.

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      ôn tý design pattern nhé bạn. Khả năng cao là hỏi đó ^^

  • @TuanNguyen-mw2cx
    @TuanNguyen-mw2cx 21 день тому

    Một video quá tuyệt vời, mong chủ kênh sẽ làm ra thêm nhiều video bổ ích nữa

  • @breakeract796
    @breakeract796 18 днів тому +6

    Hơi non, kiến thức này mới ở mức đọc thuộc thôi chứ chưa thông hiểu.
    Ví dụ nhé:
    1. S
    Ngay cái class User thôi, thì bản thân nó là model rồi. Thì nó không nên chứa bất kì cái logic save data hay bất kì cái gì khác. Đã nói là single response thì nhiệm vụ của nó là mô tả đối tượng, ngoài ra đừng làm gì khác.
    2. O
    Mô tả thì không sai nhưng ví dụ thì không hợp lí. Product type nó dynamic lên n cái thì bạn tạo ra n class để thực thi à ?
    3. L
    Chưa hiểu bản chất. Cái này nó là khi thay đổi implementation của 1 interface thì chương trình vẫn chạy đúng. Hay khái quát hóa lên là abstraction nhưng phải đảm bảo tính đúng đắn của chương trình.

    • @alonerock136
      @alonerock136 15 днів тому

      thôi, video trên đang dễ hiểu, đừng làm tui lú bn oi 😅

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  11 днів тому

      Haizz video này cho người mới, mục đích cho mọi người dễ hiểu. Ko làm phức tạp lên làm j. Mấy bạn advanced thì nên tìm video giải thích sâu xem nhé 😘, phải từ cơ bản đi lên

    • @breakeract796
      @breakeract796 11 днів тому +2

      @@KhungLongAnCo2000 vấn đề là bạn chưa hiểu chứ không phải dành cho ai

  • @cuonghoang7609
    @cuonghoang7609 Місяць тому +1

    Cực kì dễ hiểu thanks kênh

  • @illistr
    @illistr Місяць тому

    nội dung của bạn này truyền tải cực kì dễ hiểu
    +rep

  • @dev.nghean
    @dev.nghean 19 днів тому

    Video rất hay.

  • @tnu2312
    @tnu2312 Місяць тому

    Rất hay và dễ hiểu. Thank you so much!

  • @Bim3DM
    @Bim3DM Місяць тому

    dễ hiểu quá, cảm ơn kênh bạn nhé.

  • @Nylhne
    @Nylhne Місяць тому

    Dễ hiểu quá. Cảm ơn bạn đã chia sẻ ❤

  •  Місяць тому +2

    Trước đi làm công ty cũ có dự án bảo là đừng đặt parameter dạng Interface vì Interface chứa nhiều class nên nặng hơn nè. Méo hiểu thằng nào có tư duy như vậy mà lên được tech

  • @baooan3505
    @baooan3505 Місяць тому

    Hay quá

  • @muimeko2774
    @muimeko2774 Місяць тому +1

    Ngoài mục khi nào nên áp dụng ra thì a có thể cho thêm 1 số ví dụ về việc khi nào KHÔNG NÊN áp dụng được không ạ?

  • @vanvothe4817
    @vanvothe4817 Місяць тому

    Nên biết, còn áp dụng được hay thì tùy trường hợp, đừng quá cứng nhắc.

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      Mình có bảo ở gần cuối video đó bạn ^^

  • @nguyenthanhvinh3348
    @nguyenthanhvinh3348 Місяць тому

    Thư viện có sẵn của java ko tuân theo solid thì cũng chịu

  • @longphan9799
    @longphan9799 Місяць тому +1

    Thấy nội dung vẫn còn mập mờ giữa class và interface nhỉ

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      Ví dụ trong video là dùng javascript. Nên class và interface hoàn toàn khác nhau bạn ạ. Nếu muốn dùng interface thì phải dùng typescript. Bạn có thể tìm hiểu thêm về khác biệt giữa extends class và extends interface trong javascript, typescript để rõ hơn nhé

  • @atle5153
    @atle5153 Місяць тому

    11:47 Messi có làm gì a đâu :((
    xD giỡn chứ, +1 kiến thức, cám ơn a

  • @sentinel435
    @sentinel435 Місяць тому

    Tuyệt vời quá anh ơi, em mới sinh viên năm 3 nhma nghe vẫn hiểu. Dù em chưa áp dụng được nhiều lắm nhưng mà cảm ơn anh rất nhiều ạ

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      Chúc bạn kiếm đc job ngon nhé 😘

    • @sentinel435
      @sentinel435 Місяць тому

      @@KhungLongAnCo2000 dạ em cảm ơn anh

    • @sirbar3662
      @sirbar3662 Місяць тому

      Chào anh ạ, hiện tại em đang năm 2, anh cho em hỏi anh đang nắm 3 hiện tại anh đã nắm vững được kiến thức nào rồi a. Em cảm ơn a.

    • @sentinel435
      @sentinel435 Місяць тому

      @@sirbar3662 mình định hướng theo full stack web á. Mình định hướng theo angular + nestjs và học 1 số thứ liên quan như 1 chút java với react native,...

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому +1

      @@sirbar3662 Ae đừng chờ trường dạy mà nên tự học rồi làm dự án cá nhân. Vì trên trường dạy thiếu rất nhiều thứ mà đi làm cần, thì tầm năm 3 là đi thực tập được luôn. Ra trường thì ngon nghẻ luôn

  • @micaelbao
    @micaelbao Місяць тому

    9:14 có gì sai sai chỗ MultifunctionPrinter đúng ko anh, nó ko thèm extends Fax và Scanner

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому +1

      Bạn cùng issue với bạn @dzphong405 ở dưới mình giải thích rồi nhé :D

  • @rizzalsmusic5733
    @rizzalsmusic5733 Місяць тому

    Bạn cho mình hỏi cái DIP 12:14 á, là tóm gọn lại là nên truyền 1 param vào để xử lý chứ không phải gọi cứng 1 service từ bên trong đúng không bạn

  • @atle5153
    @atle5153 Місяць тому +1

    cái này có bài tập gì ko nhỉ, hay mình chỉ cần áp dụng vô các dự án hằng ngày thôi a, trc h code ko theo pattern nào h phải tập sửa lại tí

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому +1

      Bài tập thì có cuốn A Practical Guide to SOLID Design Principles. Nhưng thôi áp dụng trong dự án là thành mindset :V. Làm bài tập nhiều lú người

  • @PowBao
    @PowBao Місяць тому

    great

  • @nimnim9300
    @nimnim9300 Місяць тому

    SRP phát biểu như trong video thì mỗi lớp làm 1 nhiệm vụ duy nhất, và giải quyết bài toán 1 class có nhiều hoạt động bằng cách tách ra nhiều class nhỏ, như vậy SRP hiểu theo các này đang vị phạm Encapsulation trong OOP, và nếu 1 class chỉ thực hiện đúng 1 nhiệm vụ vậy thì 1 class có mất đi tính mô tả 1 tính chất và hành động của một thực thể không ? VD: Con người, nghe đc thì không nhìn đc, ăn đc thì không … đc 😂😂😂. B có thể giải thích thêm đoạn này không

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      Như mình có nói ở cuối video đó. Nguyên tắc khi chúng ta thấy phù hợp thì mới apply thôi. Chứ ko cứng ngắc được 😁, Tuỳ cơ ứng biến trong từng case. Chứ nó ko thể cover hết đc các cases đc ^^

    • @nimnim9300
      @nimnim9300 Місяць тому

      @@KhungLongAnCo2000 Theo mình biết thì SOLID là đc xây dựng cho OOP nên case mà xung đột với tính chất của OOP là không thể, chỉ có thể là bạn đang hiểu sai tính chất này thôi😅

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      @@nimnim9300 stackoverflow.com/questions/28651947/single-responsibility-vs-encapsulation bạn có thể đọc thêm về bài này nhé, cùng chung thắc mắc với bạn đó :D

    • @nimnim9300
      @nimnim9300 Місяць тому

      ⁠@@KhungLongAnCo2000Mình đọc qua một số bài liên quan rồi, trong đó có bài này 😅, k biết b có đọc qua page Wiki về SRP không, mình không thấy có định nghĩa nào vè việc class chỉ chịu trách nhiệm cho 1 chức năng cả 😊, Mình trích nguyên văn là “A module should be responsible to one, and only one, actor”. Nếu b đi theo hướng này thì nó không hề đụng chạm gì tới tính chất nào cả, còn cái bạn trình bày ở 1:11 thì mình không chắc

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      @@nimnim9300 ví dụ trong video là JS bạn ạ, và khi code thì thường sẽ chỉ để 1 class trong 1 file tức là 1 module thôi, => class apiAbcService, authService... vậy là đúng 'A module should be responsible to one, and only one, actor.' mà 😂. Như trong ví dụ User đầu tiên, nếu bạn code BE, cái cục đầu nó giống như bạn làm 1 cái api send mail to user thì tách ra thêm 1 cái emailService, emailService ở đây chính là cái 'module' đó 😘

  • @dzphong405
    @dzphong405 Місяць тому

    A ơi cho em hỏi cái khúc 9:33 sao multifuntionprint chỉ kế thừa mỗi print mà lại dùng được cả 3 phương thức vậy ạ

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому +2

      Chỉ là kế thừa trong oop thôi bạn ạ. Bạn có thể tìm hiểu thêm những thuật ngữ quan trọng trong OOP như kế thừa, abstraction.. nhé. Nên học chắc oop vì nó rất quan trọng. Chúc bạn thành công 😘

    • @dzphong405
      @dzphong405 Місяць тому

      ​@@KhungLongAnCo2000e cảm ơn

    • @Akiraaohk
      @Akiraaohk Місяць тому

      @@KhungLongAnCo2000 em học kế thừa rồi mà có vẻ kiến thức ko vững nên chưa hiểu, em thấy ảnh bên trái class printer có 3 method thì extends có thể dùng đc, ảnh bên phải chỉ có 1 method sao extend vẫn dùng đc method của 2 class còn lại ạ

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому +1

      @@Akiraaohk cái này ko extends thì class vẫn tạo được phương thức của riêng nó mà :D. extends ở đây nhằm việc cố định cái phương thức, không kế thừa vẫn có thể tạo ra phương thức printDocument mà, như kiểu máy in nào cũng phải có thể print, còn máy xịn hơn thì có thêm fax, scan..., midset của nó là nói về clean code bạn ạ.

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому +1

      @@Akiraaohk Ví dụ này bằng JS bạn có thể tìm hiểu về typescript thêm. hoặc bạn code Java có thể tìm kiểu về Abstract Class là oki

  • @vuduynhien38
    @vuduynhien38 Місяць тому

    10:17 interface a viết thành internet a ơi

    • @KhungLongAnCo2000
      @KhungLongAnCo2000  Місяць тому

      😂 sorry, auto caption của capcut nó detect ngu quá.

  • @QuanNguyen-cr7
    @QuanNguyen-cr7 Місяць тому

    Giờ mới bt:)

  • @dungvu-dw4sy
    @dungvu-dw4sy Місяць тому

    vid này gay thật