Nhập môn Design Pattern (Phong cách kiếm hiệp)

Nhập đề

Kinh thư ghi lại rằng, con đường tu chân có 3 cảnh giới: Luyện khí, Trúc cơ và Kết đan. Luyện khí là quá trình rèn thân luyện thể, cho phàm thân kiên cường dẻo dai. Trúc cơ là quá trình du nhập thiên địa linh khí vào thể nội, giúp khai thông kinh mạch. Khi thiên địa linh khí trong đan điền đạt tới một nồng độ nhất định, sẽ kết thành Kim Đan, đặt bước chân đầu tiên con đường tu chân đại đạo.

Con đường khởi đầu của code học cũng có 3 cảnh giới: Học đồ (Junior Developer), Học sĩ (Developer), Đại sư (Senior Developer). Để đạt đến cảnh giới Đại sư (senior), bất kì Học Sĩ (dev) nào cũng cần phải tường tận vài Design Pattern cơ bản để phòng thân. Bài viết này do tại hạ viết ra trong một phút cao hứng nhất thời, nhằm chia sẻ với các nhân sĩ võ lâm trên con đường truy cầu đại đạo.

911201211_9_2012_tuchan1s

Nhiều kẻ khi đạt đến cảnh giới Đại sư (Senior) cứ ngỡ rằng mình đã đạt đến cảnh giới tối cao của võ học mà không biết rằng “Thiên ngoại hữu thiên, nhân ngoại hữu nhân”. Phía trên cảnh giới Đại sư còn có vô số cao thủ đạt tới những cảnh giới khác như Chưởng Môn (Project Manager) hoặc Tông sư (Software Architect). Những kẻ này hiếm thấy như phượng mao lân giác (lông phượng sừng lân), mang một thân võ công cao ngất ngưởng và lương cao ngất ngưỡng, lướt gió mà đi, đạp mây mà về. Do cảnh giới bản thân còn thấp, bần đạo tạm thời không bàn tới. Bằng hữu nào hứng thú có thể tìm hiểu thêm tại đây.

Hỏi thế gian DS là chi, mà bọn Dev thề nguyền sống chết

Nói một cách đơn giản, design patterncác mẫu thiết kế có sẵn, dung để giải quyết một vấn đề. Áp dụng mẫu thiết kế này sẽ làm code dễ bảo trì, mở rộng hơn (Có thể sẽ khó hiểu hơn 1 chút). Nói văn hoa, design pattern là tinh hoa trong võ học, đã được các bậc tông sư đúc kết, truyền lưu từ đời này qua đời khác. Design pattern là thiết kế dựa trên code, nó nằm ở một cảnh giới cao hơn CODE, do đó đệ tử của bất kì môn phái nào (C#, Java, Python) cũng có thể áp dụng vào được. Ảnh lấy từ bí kíp Head First Design Pattern (xem phía dưới).

c1

Trước khi dạy võ, các bậc đạo sư luôn dặn học trò rằng học võ là để tu thân hành hiệp giúp đời, không phải để ý vào một thân võ học mà đi bắt nạt kẻ yếu. Nay ta cũng có một lời khuyên tương tự: Học design pattern là để nâng cao trình độ, để giải quyết vấn đề, không phải đế lấy ra lòe thiên hạ. Nhiều kẻ học nghệ chưa tinh, ngựa non háu đá, nhét design pattern vào dự án một cách vô tội vạ, nhẹ thì tẩu hỏa nhập ma, võ công sụt giảm, nặng thì hồn phi phách tán, vĩnh kiếp không được siêu sinh. Các đạo hữu hãy nhìn kẻ than tàn ma dại phía dưới mà làm gương.

1

Design Pattern Kiếm Phổ

Bí kíp võ công đầu tiên nhắc đến design pattern là Design Patterns: Elements of Reusable Object-Oriented Software. Tuy nhiên, khẩu quyết trong quyển này khá khô cứng, khó truyền dạy, do đó các bậc cao nhân đã chỉnh sửa, xuất bản 2 cuốn bí kíp dễ hiểu hơn cho hậu thế là Head First Design PatternsDesign Patterns For Dummies. Thuở xưa khi đặt bước chân đầu tiên trên con đường cầu đạo-cạo đầu, bần đạo cũng tự tu luyện từ hai cuốn bí kiếp này. Các đạo hữu có thể lên mạng tải về ngâm cứu.

combine_images

Khẩu quyết nhập môn Design Pattern

Có khá nhiều chiêu thức design pattern lưu lạc trong chốn giang hồ, song ta có thể tạm phân loại làm Tam Thức:

  • Khởi Thức (Creational Design Pattern): Liên quan đến việc khởi tạo object. VD: Factory, Object Pool, Abstract Factory, Builder.
  • Cấu Thức (Structure Design Pattern): Liên quan đến kết cấu, liên hệ giữa các object. VD: Adapter, Bridge, Decorator, Proxy, Composite, Facede.
  • Vi Thức (Behavioral Design Pattern): Liên quan tới hành vi của các object. VD: Iterator, Mementor, Strategy, Template Method, Visitor.

c2

Khẩu quyết một chiêu thức Design Pattern thường có 3 phần. Khi muốn học một design pattern mới, hãy tập trung chú ý vào 3 phần này:

  • Thức Đề: Vấn đề mà design pattern đó giải quyết
  • Thức Đồ: Sơ đồ UML mô tả design pattern
  • Thức Phổ: Code minh họa

Dưới đâu là một Design pattern đơn giản nhất mà hầu như học sĩ nào cũng biết: Đơn Thân Độc Mã,  thuộc Khởi Thức, hay còn gọi là Singeton, thuộc loại Creational Design Pattern.

  • Thức Đề: Design Pattern này được dùng khi ta muốn đảm bảo chỉ có duy nhất một object được sinh ra trong toàn hệ thống.
  • Thức Đồ:  Singleton
  • Thức Phổ:


public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}

view raw

singleton.java

hosted with ❤ by GitHub

Thay lời kết

Xin nhắc lại một lần nữa: Design Pattern được tạo ra để giải quyết vấn đề, chứ không phải để phức tạp hóa nó. Các bậc cao nhân có câu: nước có thể dâng thuyền, cũng có thể lật thuyền. Design Pattern có thể giải quyết vấn đề, cũng có thể làm nó rắc rối phức tạp hơn.

Kẻ sĩ dùng design pattern cũng chia làm ba cảnh giới. Kẻ sơ nhập thì nhìn đâu cũng thấy pattern, chỉ lo áp dụng, nhét rất nhiều pattern vào mà không quan tâm đến thiết kế. Lăn lộn giang hồ một thời gian, đến cảnh giới cao thủ, sẽ học được rằng khi nào cần dùng pattern, khi nào không. Đến cấp bậc đại sư, chỉ dùng pattern khi đã rõ lợi hại của nó, biết lấy sự đơn giản hài hòa của design tổng thể làm trọng. Có thể tổng kết quá trình này bằng một câu:

Khi chưa học đạo, ta thấy núi là núi, sông là sông. Khi mới học đạo, ta thấy núi không phải là núi, sông không phải là sông. Sau khi học đạo, ta lại thấy núi chỉ là núi, sông chỉ là sông.

c3

Đây là bài viết đầu tiên của blog trong series về design pattern. Do là bài đầu nên viết theo phong cách kiếm hiệp để thu hút bạn đọc thôi, những bài viết sau trong series sẽ quay lại phong cách bình thường nhé. Chém gió tốn nhiều nơ ron não lắm, cứ viết kiểu này có khi tác giả tẩu hỏa nhập ma, hồn phi phách tán chứ chẳng chơi :'(. Bạn nào thích bài viết theo phong cách này có thể đọc bài Luận về comment code nhé.

Ngoài ebook, các bạn có thể tìm hiểu thêm về design pattern ở đây.

30s quảng cáo

book.jpg

Đây là một bài viết được trích dẫn từ cuốn sách “Code dạo kí sự – Lập trình viên đâu phải chỉ biết code” do mình viết. Quyển sách bao gồm những kĩ năng từ mềm đến cứng mà mỗi developer phải có, đảm bảo sẽ rất có ích cho các bạn sinh viên hoặc lập trình viên đã đi làm. Các bạn xem thông tin và đặt mua sách tại đây nhé: Sách Code Dạo Ký Sự.

30 thoughts on “Nhập môn Design Pattern (Phong cách kiếm hiệp)”

  1. Mình rất thích phong cách viết blog kiếm hiệp này của bạn, mong bạn sẽ có nhiều bài viết hay và bổ ích như thế này nữa nhé. Thank you for you!

    Like

  2. Bài viết mở đầu rất phong cách. Trước khi các hạ viết về Design Pattern, có thể viết sơ qua về UML dc không.

    Like

  3. Gần đây mình đang tìm hiểu về Big Data, bạn có biết quyển sách nào hay giới thiệu giúp mình được không.

    Like

  4. Bài viết hay lắm, rất thích phong cách viết của anh. Em là sinh viên IT năm nhất, nhờ có anh Hoàng mới biết được muốn làm lập trình viên phải học rất nhiều thứ. Trước đây cứ tưởng học ngôn ngữ là giỏi chứ có biết Design Pattern là cái mô tê gì đâu.

    Like

  5. Đọc bài của anh Hoàng cười muốn bể bụng nhưng em thấy nể anh lắm 🙂 hẳn là người vui tính

    Liked by 1 person

  6. Tại hạ cũng đang nghiền cuốn Gang of four , đọc bài này xong có động lực tiếp tục , hóng bài tiếp theo , đa tạ :v

    Like

  7. đa tạ tiềm bối đã cho tại hạ biết được con đường học đạo trong ngành lập trình này, hi vọng tiềm bối có thêm nhiều bài viết theo phong cách này nữa để tại hạ và các huynh đệ khắp thiên hạ trong giới code-lâm có thêm nhiều cơ hội nâng cao khả năng. Nếu được vậy tại hạ vô cùng cảm kích!

    Like

  8. Mình rất mong chờ chuỗi bài này của bạn, DP có thể hiểu dễ thôi nhưng áp dụng lúc nào mới thể hiện trình độ :))

    Like

  9. Đọc blog của anh thấy thích ghê, toàn thông tin bổ ích, cảm thấy tâm huyết và “độ trải nghiệm thực tế – lăn lộn Tin trường” của anh dữ dội biết chừng nào. Cám ơn anh :))

    Like

  10. Tại hạ khâm phục các hạ quá đi mà. Các hạ hãy viết theo phong cách kiếm hiệp đi hả. Vừa đọc hiểu vừa đọc vui đó mà 😀

    Like

  11. Tại hạ tình cờ đi ngang qua chốn này! Thấy các vị huynh đệ cùng các tỉ muội xôn xao bàn tán bèn mạn phép ghé vào cho thỏa lòng soi mói. Giật mình, kinh ngạc khi thấy lời nói của các vị vô cùng sắc bén, ngữ ngôn truyền cảm, thiết nghĩ Độc Cô Cầu Bại ngày xưa có đội mồ sống dậy cũng thêm phần nể sợ. Nay xuất hiện thêm nhiều anh hùng code dạo như thế này cũng khiến cho tại hạ mở mang tầm mắt, học hỏi được nhiều điều. Nếu các vị huynh đệ đây không cảm thấy phiền nhiễu thì với một cú Click chuột chúng ta hãy kết nghĩa bàn thờ, à không bàn đào! Ngày hôm nay được gặp các vị huynh đệ, các vị tỉ muội ở đây cũng là phước phần cho tại hạ. Xin nhận của tại hạ một like gọi là để kết nghĩa thâm giao! :v

    Liked by 5 people

  12. Tuyệt, rất mong có những bài hướng dẫn như thế này. Cảm ơn bạn chủ thớt rất nhiều.

    Like

  13. Keywork: Design Pattern for Dummies Tiếng Việt
    có người dịch cuốn này rồi, đọc như đọc truyện rất hay, mọi người lên google download về đọc

    Like

  14. Bài viết hay.
    Tác giả thể hiển kiến thức uyên thâm, ngôn ngữ phong phú.
    Đọc quả thật thấy mát vô cùng.
    Mong chủ thớt tiếp tục series cho anh em võ lâm mở rộng tầm mắt.

    Liked by 1 person

Leave a comment