Design Pattern | Design Pattern ?

Trong chuỗi bài viết này, chúng ta sẽ cùng khám phá về Design Pattern, để hiểu rõ về Design Pattern, bạn chắc chắn cần một kiến thức tốt về Obejct- Oriented Design, vì thế, nếu chưa cảm thấy chắc chắn, hãy tham gia tìm hiểu về Obeject- Oriented Design với mình song song với những bài viết này.

Đây là một bài viết về chuyên môn, nên vào vấn đề luôn, Design Pattern là gì ?

Chà, vấn đề của thiết kế và ứng dụng có thể được giải quyết thông qua mẫu thiết kế (Design Patterns) thường được áp dụng bởi các chuyên gia. Chuỗi bài viết này sẽ giúp bạn mở rộng sự hiểu biết của mình về Object- Oriented Analysis Design bằng cách học làm thế nào để ứng dụng Design Patterns để giải quyết các vấn đề thiêt kế phần mềm.

Thông qua các cuộc khảo sát đã được thiết lập, bạn sẽ có một nền tảng chắc chắn để xây dựng những phần mềm phức tạp hơn. Chúng ta sẽ tìm hiểu về các nguyên tắc trong thiết kế như tái sử dụng (reusable), linh hoạt (flexible), và duy trì (maintainable). Cuối cùng, chúng ta sẽ bàn luật về làm thế nào để quyết định một thiết thế phần mềm là dở (bad software design) thông qua code smells.

Trong công nghệ phần mềm, bạn sẽ thường trải qua các vấn đề tương tự nhau nhiều lần lặp đi lặp lại. Có rất nhiều cách để giải quyết các vấn đề này nhưng theo áp lực của thời gian, một số giải pháp được ưa thích hơn các cách khác, vì chúng linh hoạt hoạt hơn và có thể tái sử dụng. (flexible & resable). Design Pattern là một giải pháp đã được chứng minh thực tế cho các vấn đề thiết kế như vậy. Thay vì giải quyết một vấn đề phần mềm cụ thể bằng cách sửa chữa code mọi lúc trong phần mềm, bạn sẽ phải quyết định sử dụng đối tượng nào, làm thế nào đối tượng lại liên quan như vậy, bạn sẽ cần một giải pháp được phát triển trước đây mà các chuyên gia nhà phát triển thường hay sử dụng.

Những giải pháp thiết kế này không phải là lý thuyết chỉ quan tâm đến học thuật. Đây là những giải pháp thực tế được sử dụng trong công nghiệp phần mềm. Hãy nghĩ về Design Pattern giống như cách bạn nghĩ về công  thức nấu ăn, có một số món ăn mà mọi  người đã thử nghiệm và nấu đi nấu lại nhiều lần, sau một thời gian, một cách nấu nhất định với một món ăn cụ thể sẽ được ưa thích vì nó tạo ra món ăn ngon nhất. Trong những năm qua, các nhà phát triển đã thử nghiệm nhiều giải pháp thiết kế khác nhau, có 23 mẫu thiết kế được nói đến trong một quyển sách có tên là  Elements of Reusable Object-Oriented Software [Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Grady Booch]. Bài viết này sẽ đi qua một vài các mẫu thiết kế này. 

Tuy nhiên, điều quan trọng cần lưu ý là sẽ không đơn giản để xem xét vấn đề thiết kế phần mềm và tự động biết nên sử dụng mẫu thiêt kế nào. Có rất nhiều mẫu thiết kế có sẵn, nên một mẫu thiết kế có vẻ áp dụng được nhưng nó có thể không thực sự phù hợp với vấn đề trong tay. Sử dụng các mẫu thiết kế giống như chơi một ván cờ, có rất nhiều cách để giành chiến thắng bằng cách đưa đối thủ của bạn vào checkmate (chiếu hết). Một người mới bắt đầu chơi cờ có thể chỉ biết các nước đi cơ bản của từng quân cờ, trong khi một kiện tướng sẽ tìm kiếm các thế cờ thích hợp trên bàn cờ, như khai cuộc thế nào, sắp xếp các quân chiếm trung tâm ra làm sao. Thông qua kinh nghiệm, họ có thể đánh giá tốt hơn những mô hình sẽ sử dụng hoặc tạo ra trong một tình huống cụ thể để giành chiến thắng trong trò chơi. Tương tự như chơi cờ, các nhà phát triển phần mềm mới bắt đầu có thể chỉ biết các yếu tố của cú pháp ngôn ngữ trong phần mềm lập trình. Họ biết các yếu tố hết sức cơ bản như làm thế nào để tạo một vòng lặp, một câu điều kiện, một phương thức  v.v. Nhưng với nhiều kinh nghiệm và thực tiễn hơn, các nhà phát triển phần mềm này sẽ viết mã thành ngữ hơn theo các quy ước chung. Ngoài ra, họ có thể trở thành chuyên gia thiết kế, người biết các mẫu thiết kế để sử dụng trong việc giải quyết các vấn đề thiết kế phần mềm cụ thể.

Một điều cần lưu ý về các mẫu thiết kế nữa là nó không chỉ là một bộ source code cụ thể mà bạn ghi nhớ và đưa vào các phần mềm của bạn, như Java libraries hay Frameworks, nó giống như kiến thức hơn.

Tại sao bạn nên sử dụng design pattern ?

Các mẫu thiết kế giúp nhà phát triển phần mềm thay vì xây dựng mọi thứ từ đầu. Một vận động viên mới bắt đầu có thể có tài năng tự nhiên và kiến thức cơ bản về môn thể thao mà họ chơi, nhưng với mộ huấn luyện viên với nhiều năm kinh nghiệm có thể giúp vận động viên đó sử dụng những tài năng của họ để đạt được những điều lớn hơn. Các design pattern đã được chuyên gia chứng minh và họ đã phải trải qua khó khăn để chứng mình được điều đó. Ban có thể bỏ qua những thử nghiệm mà họ đã trải qua và chỉ tập trung vào con đường bạn đi thôi, tạo ra một phần mềm tốt hơn.

Và điều cuối cùng, design pattern giống như tạo ra một bộ từ vựng thiết kế. Thay vì phải giải thích chi tiết về giải pháp thiết kế nhiều lần, bạn có thể đơn giản hóa cuộc thảo luận bằng cách sử dụng một "từ gợi ý" để mô tả nó.  Ví dụ: có một vấn đề thiết kế rất phổ biến trong phần mềm nơi bạn có hai đối tượng và đối tượng thứ nhất phụ thuộc vào đối tượng thứ hai. Nếu đối tượng thứ hai thay đổi, đối tượng đầu tiên sẽ được thông báo. Bạn sẽ làm thế nào ?

Như vậy đã là khá tốt mở đầu cho một chuỗi bài viết như thế này. Hẹn các bạn ở bài tiếp theo, cảm ơn.

Nhận xét

Bài đăng phổ biến từ blog này

Hiểu về Norm Regularization

Những thuật toán nền tảng trong lĩnh vực Trí tuệ nhân tạo (Artificial Intelligence I)