Tăng tốc, tăng tốc
Tăng tốc, tăng tốc

Framework là gì?

    • Framework hay cụ thể hơn là software framework, có thể được hiểu như là một ứng dụng phần mềm chưa hoàn chỉnh, được thết kế ra nhằm mục đích phục vụ cho một lớp các ứng dụng có nhiều điểm chung giống nhau. Khi developer sử dụng framework sẽ tận dụng lại những tính năng, dịch vụ có sẵn của framework thay vì viết lại những tính năng đó từ đầu, rút ngắn thời gian phát triển, tập trung hơn vào các đặc tả yêu cầu phần phềm.
    • Hiểu một cách nôm na, framework cũng khá giống với thư viện. Nhưng khác với thư viện. Nó lớn hơn thư viện và chứa đựng thư viện hay một số thư viện. Framework cung cấp  các tính năng mang tính hệ thống, tập trung vào 1 lớp các bài toán cụ thể, trong khi thư viện cung cấp các tính năng tương đối độc lập với nhau, thường mang tính tổng quát. Khi sử dụng thư viện, code của chúng ta gọi đến thư viện, còn khi sử dụng framework thì code của framework gọi đến code của chúng ta, và code của chúng ta cũng có thể gọi đến code của framework.
Framework vs library
Framework và thư viện

Có những framework nổi tiếng như:

  • Spring: Web framework dùng ngôn ngữ Java.
  • WordPress: Web framework dùng ngôn ngữ PHP.
  • Swing: Cross platform desktop application framework dùng ngôn ngữ Java.
  • Xamarin: Cross platform mobile application framework dùng ngôn ngữ C#…

Bạn không có khả năng viết framework?

Thử nhìn xem những famework thông dụng mà mọi người hay dùng, nó to lớn đến cỡ nào, khả năng của bạn có hạn, thời gian của bạn cũng có hạn thì làm sao bạn có thể làm được như vậy? Không, ý tôi không nói bạn viết famework lớn như vậy, bạn viết famework nhỏ đủ cho bạn dùng thôi (có thể là cho cả team bạn dùng nữa). Framework bạn viết ra trước tiên là để phục vụ cho công việc của bạn và của team bạn, chứ chưa phải để chia sẻ, cống hiến cho cộng đồng, nên bạn không cần phải làm cho nó hoàn hảo như những framework đang được cộng đồng sử dụng. Bạn cũng không cần phải viết framework từ đầu (from scratch), bạn có thể dựa trên nền tảng của 1 framework lớn, và các thư viện có sẵn.

Tự viết framework mang lại lợi ích gì?

Mặc dù giảm thời gian viết ứng dụng nhưng bạn lại tốn thêm thời gian để viết framework. Vậy viết framework mà chỉ dùng cho 1 ứng dụng thì có lẽ hại nhiều hơn lợi. Nhưng nếu bạn đang làm một loạt các ứng dụng tương tự nhau, 1 framework có thể dùng chung cho nhiều ứng dụng thì nó mang lại nhiều lợi ích.

– Tái sử dụng, tăng hiệu quả công việc. Khi công việc bạn cứ lặp đi lặp lại nhiều phần giống nhau, bạn đưa những phần giống nhau đó vào chung trong 1 cái framework, thì bạn chỉ còn phải làm những việc đó 1 lần và tái sử dụng cho những lần khác mà không cần phải làm lại.

– Dễ maintain. Vừa maintain app vừa maintain framework thì sẽ vất vã hơn là chỉ maintain mỗi app. Nhưng khi maintain nhiều app giống nhau, có những bug giống nhau sẽ vất vã hơn nhiều so với việc maintain cái framework cho 1 bug cùng xuất hiện ở nhiều app.

– Học được nhiều hơn, chuyên sâu hơn. Khi viết framework, bạn buộc phải tư duy theo kiểu của người viết framework, buộc phải nghĩ nhiều về kiến trúc phần mềm hơn, buộc phải học cách tổ chức code tốt hơn.

– Học từ những framework mà bạn sử dụng. Khi sử dụng framework, có thể bạn chỉ cần đọc tài liệu của famework đó là đã biết cách dùng. Nhưng khi bạn có ý định bắt chước một phần nào đó của framework đó thì bạn sẽ phải tư duy và tìm hiểu nhiều hơn là việc chỉ đọc tài liệu. Ví dụ như khi bạn viết một ứng Java Swing, bạn định nghĩa một class impelents ActionListener. Nhưng bạn có từng nghĩ rằng bạn cũng có thể định nghĩa một cái Listenser interface khác tương tự như vậy hay không?… Khoan, ở ví dụ này mình không nói định nghĩa Listenser inteface đồng nghĩa với tạo framework mới đâu. Đừng hiểu nhầm ý mình. Mình ví dụ như vậy là để làm rõ cho cái cách tư duy và học hỏi từ những framework có sẵn ấy.

Câu chuyện anh developer nọ tự viết framework

Ở một công ty nọ, có một anh Java developer nọ, sau khi làm xong dự án nọ, công ty có dự án mới cho anh. Dự án lần này dùng C++ và C#. Mặc dù đó cũng không phải là thế mạnh của anh, nhưng anh cũng “chiến tất”. Dự án mới, team mới. Team có 5 người, họ cũng thuộc dạng “xuất chúng”, 1 lúc cõng 2 đến 3 dự án khác nhau của những khách hàng khác nhau. Cũng bởi 4 người kia còn phải cõng dự án khác, nên gần như toàn bộ dự án mới này họ giao lại cho anh Java developer kia 1 mình tự xử. Vì là dự án nước ngoài, không dùng tiếng Anh, và đương nhiên cũng không dùng tiếng Việt rồi, anh ta căng mắt đọc requirement bằng Google dịch và cố gắng hiểu nó, chỗ nào không hiểu thì tìm người hỏi. Thế rồi trầy trật ngày qua ngày anh cũng dần hoàn thành xong dự án. Xong dự án này, khách hàng lại order thêm dự án mới. Anh lại căng mắt đọc requirement, rồi anh thấy nó giống giống dự án cũ. Để cho nhanh, anh copy source code của dự án cũ rồi sửa lại. Xong dự án, khách hàng lại order thêm dự án mới nữa. Lại hao hao giống 2 dự án cũ. Thế là anh ta nãy ra ý định tách source code ra thành 2 phần. Framework và application. Xong dự án này, khách hàng lại liên tiếp order những dự án mới giống giống vậy. Vậy là anh cứ đem cái framework mà anh đã viết ở dự án trước dùng lại cho các dự án sau. Với cách làm như vậy, anh release cho khách hàng với tốc độ bình quân 2 tuần một dự án. Trong đó, thời gian anh gõ code chỉ đâu đó chưa tới 2 ngày (<16h), phần còn lại là thời gian đọc/dịch requirement, viết test plan, test, report… Chưa kể anh còn nhiệt tình support cho những team khác nữa.

Vậy đó.

Viết framework lớn và bài bản thì không dễ. Nhưng viết framework nhỏ thì không phải khó.  Đôi khi viết framework làm chúng ta tốn thêm thời gian và chi phí. Nhưng không phải lúc nào cũng vậy. Có những lúc nó lại giúp chúng ta tiết kiệm được rất nhiều thời gian và chi phí. Vậy nên “Có nên tự viết framework hay không?” cũng là 1 vấn đề đáng để cân nhắc.