Dạo bài
Xin chào các bạn, là mình đây, một anh chàng IT thích chia sẻ kiến thức đến mọi người
Với mình, việc chia sẻ kiến thức vừa giúp được các bạn đọc khám phá được kiến thức mới, vừa giúp bản thân có thể ôn lại kiến thức cũng như nhận ra những kiến thức sai mà mình nghĩ rằng trước giờ mình đã nắm rõ nó. Các bài viết của mình được viết dựa trên quá trình mình học hỏi, đi làm và đúc kết được sau những năm tháng
Kiến thức là bao la, không thể nào học hết được mà chỉ có thể tích lũy hằng ngày để lượng kiến thức được vung đầy. Vậy hôm nay chúng ta cùng nhau tích lũy thêm lượng kiến thức mới gì đây nhỉ? Đó chính là Design Pattern
Mình cá là ở đây có nhiều bạn biết rất nhiều pattern, ngay cả mình cũng biết cả chục pattern. Biết là vậy nhưng bạn đã áp dụng được bao nhiêu mẫu vào dự án của bạn???
Anh Leader mình từng nói: "Nhiều ông biết lắm Design Pattern mà hỏi tới thì toàn trả lời suông chứ chưa áp dụng bao giờ", đúng là vậy các bạn à, biết là một chuyện, hiểu là một chuyện mà áp dụng chưa là một chuyện khác
Sau đây là cái nhìn khái quát về Design Pattern. Chúng ta trả lời theo 3W: What - When - Why
Design Pattern
What - Design Pattern là gì?
Design là Thiết kế, Pattern là Mẫu, dịch ra nghĩa là Mẫu thiết kế. Nghe lạ thật, mình có phải Designer hay kiến trúc sư đâu mà thiết kế gì đây nhỉ? Lúc đi học cũng chưa từng nghe đến, thầy cô cũng không dạy mình cái này, đã thế lúc đi phỏng vấn nhà tuyển dụng nào cũng thích hỏi đến nó
Hmm, vậy nó là gì mà các nhà lập trình viên chúng ta ai ai cũng cần nắm vững (nghe có vẻ dữ dằn, phóng đại vậy chứ là nó quan trọng thiệt đó các bạn)
Design Pattern là những giải pháp chung đã được tối ưu hóa để áp dụng vào phát triển phần mềm, những giải pháp này là tinh hoa của các kỹ sư phần mềm dày dặn kinh nghiệm đút kết được. Ngắn gọn là vậy nhưng có tới 2 ý mà chúng ta cần bận tâm, đầu tiên là đã được tối ưu - các giải pháp này đã được thử nghiệm và kiểm chứng, bạn chỉ việc là lựa chọn giải pháp phù hợp và áp dụng vào hệ thống, điều thứ 2 đó là nó được đúc kết từ những người có kinh nghiệm - cái này quan trọng, giống như đi làm mà được mấy ông senior chỉ có mấy cái tip trick hay ho vậy đó
When - Khi nào sử dụng nó?
Khi bạn thấy dự án của mình gặp phải những vấn đề mà hầu như những dự án khác đã gặp phải
Khi dự án bắt đầu lớn dần và trở nên phức tạp
Khi bạn muốn dự án của bạn quy tắc hơn, chuẩn mực hơn
Why - Tại sao nên và không nên sử dụng nó?
Why - Tại sao nên sử dụng nó?
Kinh nghiệm từ những người đi trước: Design Pattern là kết quả của sự tích lũy kinh nghiệm từ các kỹ sư phần mềm gạo cội. Sử dụng Design Pattern giúp mình tiếp cận kiến thức và kinh nghiệm từ những người đi trước, tránh được các lỗi phổ biến và áp dụng những phương pháp đã được kiểm chứng
Tiếng nói chung: Design Pattern cung cấp một ngôn ngữ chung để thảo luận về các vấn đề. Nó giúp các nhà phát triển có thể giao tiếp với nhau một cách hiệu quả hơn, chia sẻ kiến thức và ý tưởng, và hiểu rõ hơn về thiết kế của hệ thống
Tính linh hoạt, mở rộng và tái sử dụng cao: Cho phép bạn dễ dàng thay đổi, mở rộng và sử dụng lại mã nguồn mà không ảnh hưởng đến các phần khác trong hệ thống
Khả năng kiểm thử: Bạn có thể dễ dàng kiểm thử từng chức năng/module một mà không ảnh hưởng đến các phần khác trong hệ thống
Why - Tại sao không nên sử dụng nó?
Design Pattern áp dụng vào hệ thống lớn thì giúp giảm độ phức tạp xuống, nhưng nếu áp dụng vào hệ thống nhỏ thì lại tăng độ phức tạp lên bởi vì:
Phức tạp hóa không cần thiết: Sử dụng Design Pattern có thể làm tăng độ phức tạp của mã nguồn mà không có lợi ích rõ ràng. Design Pattern đòi hỏi bạn phải áp dụng các quy tắc và cấu trúc phức tạp, và điều này có thể làm cho mã nguồn trở nên khó hiểu và bảo trì
Tăng thời gian và tốn nhiều công sức: Sử dụng Design Pattern đòi hỏi thời gian và công sức để áp dụng và triển khai chúng. Thời gian và tài nguyên cho các dự án đều có giới hạn, và việc áp dụng Design Pattern có thể làm tăng thời gian phát triển và ảnh hưởng đến dự án
Kiến thức nâng cao: Sử dụng Design Pattern có thể làm cho mã nguồn trở nên phức tạp hơn đối với những lập trình viên mới tham gia dự án, một số Design Pattern đòi hỏi kiến thức và kinh nghiệm chuyên sâu để hiểu và triển khai. Nếu các bạn không quen với Design Pattern hoặc không có đủ kinh nghiệm, việc hiểu và bảo trì mã nguồn trở nên khó khăn hơn rất nhiều
🗯️ Hy vọng 3W trên đã đủ trả lời cho câu hỏi Tại sao các nhà tuyển dụng thích phỏng vấn Design Pattern?
Các nhóm chính
Trong Design Pattern, có rất nhiều loại pattern khác nhau được sử dụng để giải quyết các vấn đề cụ thể. Các pattern này được chia làm 3 nhóm chính như sau:
Creational Patterns
Cung cấp cơ chế tạo ra các đối tượng một cách linh hoạt và hiệu quả. Những mẫu này giúp ẩn đi các chi tiết cụ thể của việc tạo đối tượng và cung cấp một cách để tạo ra các đối tượng mà không phụ thuộc vào lớp cụ thể
Pattern | Description |
---|---|
Singleton | Đảm bảo rằng chỉ có một instance duy nhất của một lớp được khởi tạo, instance này được sử dụng như một đối tượng global |
Factory Method | Cung cấp một phương thức để tạo ra một đối tượng mà không cần biết chi tiết về cách nó được tạo ra hoặc triển khai |
Builder | Tạo ra một đối tượng phức tạp theo từng bước từng bước thông qua việc sử dụng nhiều method pipe. Khi khởi tạo có thể tùy chọn sử dụng các method để thiết lập các thuộc tính và cấu trúc của đối tượng |
Structural Patterns
Tập hợp các object và class thành cấu trúc lớn hơn
Pattern | Description |
---|---|
Decorator | Thêm chức năng mới cho các đối tượng hoặc lớp mà không làm thay đổi cấu trúc của nó |
Proxy | Tạo ra một đối tượng proxy để đại diện cho một object gốc và cho phép người dùng tương tác với proxy object thay vì tương tác trực tiếp với object gốc |
Adapter | Giải quyết vấn đề không tương thích về giao diện giữa các đối tượng |
Facade | Tạo ra một giao diện đơn giản để người dùng tương tác với hệ thống |
Behavioral Patterns
Tập trung vào cách các đối tượng và lớp tương tác với nhau
Pattern | Description |
---|---|
Strategy | Định nghĩa một loạt các thuật toán và đóng gói chúng thành các đối tượng riêng biệt, các thuật toán có thể được thay đổi linh hoạt tại thời điểm runtime |
Observer | Định nghĩa một phụ thuộc 1-nhiều giữa các đối tượng, khi một đối tượng thay đổi trạng thái, tất cả các đối tượng phụ thuộc sẽ được thông báo và cập nhật tự động |
Null Object | Pattern này cung cấp một đối tượng rỗng hoặc giá trị mặc định để đại diện cho một đối tượng không tồn tại hoặc không khả dụng |
Mediator | Tạo ra một đối tượng trung gian để giảm sự phụ thuộc giữa các đối tượng khác nhau và quản lý sự tương tác giữa chúng |
Kết bài
Trong lĩnh vực Công nghệ thông tin, chúng ta luôn đối mặt với những vấn đề phổ biến. Thay vì phải dành kha khá nhiều thời gian và công sức để tự mình giải quyết, chúng ta nên học hỏi và sử dụng những nền tảng đã có để phát triển những giải pháp tốt hơn
Hành trình khám phá Design Pattern chỉ mới bắt đầu, phần giới thiệu này chủ yếu là lý thuyết suông, áp dụng vào dự án như thế nào mới là vấn đề. Nào cùng mình đến với những phần sau để xem mình áp dụng nó vào dự án thực tế như thế nào nhé. Cảm ơn các bạn đã đọc