11/08/2018, 21:13

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 ...

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 pattern là cá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;
    }
}

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é.

Bản gốc: Blog Tôi đi code dạo.

0