Search This Blog

Friday, June 10, 2016

Design Patterns trong các dự án thực tế - Design Patterns là gì?

Lời nói đầu

Chúng ta dễ dàng tìm thấy rất nhiều các tài liệu cũng như bài viết về design patterns trong sách vở, internet...Tuy nhiên vấn đề là những bài viết này khá chung chung, mang thiên hướng sách vở và không đưa ra được những ví dụ áp dụng thực tế trong công việc, dự án của chúng ta...Điều này khiến các developer cảm thấy khó hiểu và khó áp dụng để giải quyết các vấn đề trong công việc hàng ngày. Chính vì vậy Kiên viết loạt bài này dựa thêm kinh nghiệm thực tế trong các dự án mà Kiên đã tham gia để nhằm giới thiệu đến các bạn một số design patterns thông dụng nhất, dễ gặp nhấtcác ví dụ về design patterns thực tế nhất nhằm giúp các bạn hiểu nhanh nhất, có thể biết được khi nào áp dụng, áp dụng ở đâu và làm thế nào để áp dụng nó vào công việc, dự án của mình.
***

Giới thiệu về Design Patterns.


Trước tiên ta cũng nên tìm hiểu Design Patterns là gì?

Design patterns có thể xem là một kĩ thuật lập trình hướng đối tượng (OOP) nâng cao, áp dụng một cách triệt để các tính chất của OOP như bao đóng (encapsulation), trừu tượng (abstract), kế thừa (inheritance), đa hình (polymorphism) cũng như các khái niệm như object, class, interfaces, generic...để đưa ra các mẫu thiết kế hoàn thiện. Hãy đảm bảo bạn đã nắm rõ hay ít nhất cũng có cái nhìn tương đối về OOP.
Bạn có thể tham khảo qua bài viết: Tìm hiểu về lập trình hướng đối tượng

Design patterns được giới thiệu và phát triển bởi các nhà phát triển phần mềm có kinh nghiệm, là những giải pháp cho những vấn đề chung mà các nhà phát triển phải đối mặt trong quá trình phát triển phần mềm. Những giải pháp này đã được tích lũy và đúc kết theo thời gian.

Một design pattern là một giải pháp chung cho một vấn đề thường xảy ra trong những tình huống nhất định. Nó mô tả hoặc làm mẫu để giúp ta làm thế nào để giải quyết một vấn đề mà có thể được sử dụng trong nhiều tình huống khác nhau.

Lấy ví dụ giả sử chúng ta có một yêu cầu: Hãy viết một chức năng kết nối database, mà chức năng này phải đảm bảo hoạt động tốt và dễ cấu hình cho các hệ quản trị cơ sở dữ liệu (DBMS) khác nhau như MySQL, MSSQL, Oracle...Lúc này ta có thể áp dụng ngay Factory Pattern để xử lí yêu cầu này.

Chúng ta có 3 nhóm design patterns và 23 design patterns cơ bản nhất:

Creational Patterns Structural Patterns Behavioral Patterns
Abstract Factory
Chain of responsibility
Builder
Bridge
Command
Composite
Interpreter
Prototype
Decorator
Iterator
Mediator
Flyweight
Memento
Proxy
Observer
State
Strategy
Visitor

Trong khả năng và thời gian cho phép, Kiên sẽ cố gắng giới thiệu đến các bạn một số design patterns thông dụng nhất trong giải quyết các vấn đề cũng như trong thiết kế phần mềm.

Tại sao phải biết Design Patterns?

Như Kiên đã đề cập ở trên, design patterns được đúc kết bằng kinh nghiệm và là cách giải quyết chung cho các vấn đề trong thiết kế phần mềm. Chính vì vậy nếu chúng ta hiểu rõ design patterns thì khi chúng ta đối mặt một tình huống hay một vấn đề nào đó, chúng ta có thể áp dụng design patterns và vấn đề có thể được giải quyết một cách nhanh chóng và hiệu quả nhất.

Ngoài ra, nếu chúng ta áp dụng tốt design patterns, nó sẽ giúp giải pháp của chúng ta dễ hiểu, dễ trình bày, hệ thống của chúng ta linh hoạt, dễ bảo trì, dễ test hơn.

Đối với bản thân các developer, việc hiểu rõ design patterns sẽ giúp năng suất làm việc cải thiện, giá trị bản thân ngày càng tăng, đóng vai trò then chốt (key member) trong các dự án mà mình tham gia, đó cũng là đảm bảo cho quyền lợi, lợi ích của chúng ta sau này.

Ngoài ra chúng ta cũng biết ngành lập trình là ngành có mức độ phát triển, thay đổi khá nhanh, các công nghệ, ngôn ngữ, thư viện...cập nhật liên tục cũng sẽ khiến chúng ta phải liên tục cập nhật theo. Nhưng luôn có những giá trị cốt lõi trong bất kì ngành nghề nào, và OOP và design patterns chính là một trong các giá trị cốt lỗi trong lập trình, nó sẽ giúp bạn vững vàng và mạnh mẽ hơn trong thời đại công nghệ này.

Vậy ai là người nên biết về Design Patterns?

Design patterns được sử dụng rất rộng rãi trong thiết kế phần mềm, đôi khi chúng ta đã thật sự biết đến nó và áp dụng nó vào các dự án, vào code của mình mà không nhận ra, vì đôi khi đó là những design pattern rất đơn giản. Chính vì vậy, việc có cái nhìn tổng quát lại design patterns vô cùng bổ ích cho chúng ta - những developer.

Ngoài ra, trong thiết kế phần mềm nói chung và phát triển dự án nói riêng, việc tìm giải pháp và áp dụng design patterns thường được giao cho các key member, các senior developer. Do đó ngoài các senior developers cần củng cố kiến thức về design pattern, mà các junior developers, thậm chí là các bạn sinh viên, thực tập thì sự hiểu biết về design patterns là rất quan trọng và cần thiết để đóng vai trò quan trọng trong các dự án hay tổ chức mà mình tham gia.

Bên cạnh đó, việc thiết kế hệ thống áp dụng design patterns đôi khi cũng cần có sự tham gia của những nhà thiết kế, business analyst trong việc thiết kế, vẽ biểu đồ để từ đó hiện thực hóa chúng thành những dòng code. Dưới đây là một class diagram minh họa cho chức năng xử lí ngoại lệ (exception):


Design Patterns áp dụng khi nào và nơi đâu?

Như chúng ta đã biết, design patterns là những giải pháp cho những vấn đề của chúng ta trong việc lập trình, nên việc áp dụng design patterns là bất kể khi nào, bất kể nơi đâu miễn là chúng ta thấy nó giải quyết được vấn đề của mình.

Thay vì chúng ta tốn thời gian và chi phí để loay hoay tìm giải pháp, tìm người giúp đỡ thì có thể thông qua một hay nhiều design patterns nào đó, vấn đề sẽ được giải quyết một cách rất nhanh chóng và hiệu quả, giải pháp đưa ra cũng đạt sự đồng thuận, chấp nhận của mọi người.

Vậy học Design Patterns như thế nào?

Điều kiện tiên quyết để hiểu và áp dụng tốt design patterns là chúng ta phải có kiến thức về lập trình hướng đối tượng (OOP), các tính chất cũng như là các thành phần, khái niệm của OOP.
Nếu các bạn chưa nắm rõ OOP thì có thể xem lại bài viết: Tìm hiểu về lập trình hướng đối tượng

Sau đó các bạn có thể theo dõi các bài viết trên blog của Kiên để có cái nhìn tổng quan cũng như chi tiết về các design pattern thường gặp, từ đó có thể linh hoạt áp dụng vào các dự án mà mình đang tham gia. Cách khác là các bạn có thể tự mình xây dựng lại các chức năng nào đó thông qua các ví dụ rất thực thế mà Kiên đưa ra từ chính các dự án của mình.

Với một số design patterns mà Kiên không giới thiệu trong loại bài viết này, các bạn có thể tự mình tìm hiểu thêm trên sách vở, internet..., từ đó rút ra được kinh nghiệm cho riêng mình.

Song song đó chúng ta có thể cùng nhau trao đổi kiến thức thông qua blog này để không chỉ các bạn mà còn để chính bản thân Kiên ngày càng hiểu sâu và rộng hơn về design patterns.

Học bao nhiêu Design Patterns là đủ?

Như Kiên đã đề cập ở trên, chúng ta có 23 design patterns cơ bản được chia làm 3 nhóm. Sẽ rất tốt nếu các bạn có thể hiểu rõ tất cả nhưng trên thực tế sẽ có những design pattern ít khi được sử dụng. Trong giới hạn loạt bài viết này Kiên sẽ cố gắng giới thiệu đến các bạn càng nhiều càng tốt các design pattern mà Kiên đã từng gặp qua và áp dụng vào dự án thực tế của mình.
Ngoài ra nếu thời gian cho phép Kiên cũng sẽ giới thiệu đến các bạn một số design patterns khác không nằm trong 23 design patterns này nhưng hiện tại cũng được áp dụng khá nhiều như Repository Pattern, MVC Pattern...

---
P/S: Nếu các bạn có thắc mắc hay muốn trao đổi thêm, các bạn có thể comment trực tiếp bên dưới bài viết này.

Share to be shared

1 comment: