HomeOur Team
Modularization - Why you should care
Articles
Modularization - Why you should care
anh.pham
anh.pham
September 21, 2020
4 min

Modularization

Hê lô e ve rì oăn !!!

Em/mình là Quang Anh ( từ đây chủ tus xin phép xưng hô là Mình cho tiện nhé ạ), là “newbie” của căn nhà mang tên TDA này. Ngày đầu tiên vào công ty, được john vào dự án mà lúc clone project về, mở nó lên … quá trời các module luôn (…) Thằng bé cảm thấy hoang mang, cảm thấy hãi hùng, lên mạng search sẵn – “Làm sao để xin nghỉ việc khi đang trong thời gian thử việc mà không làm mất lòng đôi bên”.  Nhưng may quá một nghị lực nhỏ nhoi le lói rằng “Tôi sẽ thành công, Tôi sẽ làm được, Vì tôi biết nếu tôi ở lại đủ lâu thì tôi sẽ chiến thắng …” – Trích Châm ngôn của Hội “multiples” cấp Quốc gia.

Khoảng thời gian 1 tháng, công việc cũng có chút thuận lợi, vừa tìm hiểu về project, vừa có thể tìm hiểu thêm về việc module hóa. Chính vì thế hôm nay mình sẽ viết những gì trong thời gian qua mình đã tìm hiểu về : Modularization hay cách gọi thuần Việt “Mô-đun hóa”.

Câu hỏi được đặt ra trong đầu mình ngay lần đầu tiên tìm hiểu project – Chia module này để làm gì? Nó có mục đích, lợi ích gì? Hiểu được tác dụng của nó rồi thì làm sao để thực hiện công việc module hóa dự án? Ban đầu đang là 1 module nếu tách ra thành nhiều module thì với “newbie” hay thậm chí 1 chuyên gia thường hay mắc phải những sai lầm hoặc sẽ gặp những bất lợi gì? vân vân mây mây …

Ok - Are you ready?

Câu hỏi đầu tiên: Người ta module hóa để làm gì?

Thực sự module hóa đem lại rất nhiều lợi ích:

  1. Tăng tốc độ build ứng dụng.
  2. Tăng khả năng tái sử dụng các module.
  3. Đơn giản để phát triển, mở rộng quy mô.
  4. Dễ dàng refactor.
  5. Giảm thiểu tình trạng conflict trong team.
  6. Cung cấp khả năng tùy chọn sử dụng dựa vào yêu cầu(dynamic module)
  7. Test dễ dàng hơn.
  8. Dễ dàng thử nghiệm công nghệ mới. …

Cùng đi sâu vào tìm hiểu các lợi ích chính kĩ hơn:

1. Tăng tốc độ build ứng dụng.

Rất đơn giản, Gradle thực hiện 2 việc để tăng tốc độ build:

  1. Bộ nhớ cache đã hoạt động trước đó nên nó sẽ ko phải thực hiện lại việc đó.
  2. Cố gắng thực hiện nhiều việc song song nhất có thể.

Cả 2 điều trên đều ko có tác dụng với ứng dụng chỉ có 1 module khi code thay đổi, không thể tái sử dụng dẫn tới code phải được biên dịch lại một cách tuần tự. Với multiples modules, Gradle có thể build các module 1 cách song song, và tránh build lại các module mà ko thay đổi code, giúp tăng tốc độ build.

2. Tăng khả năng tái sử dụng các module.

Giả sử ứng dụng của bạn đã hoàn thành, dự án tiếp theo lại tiếp tục copy base giống project cũ, vậy còn những tính năng hay ho như login, mã hóa key, camera, settings thì sao – làm lại từ đầu thì bạn khá là rảnh háng, mà nếu với project 1 module thì việc copy code còn cho thấy bạn khá có vấn đề với não, mà nếu não bạn ko có vấn đề thì mình ko chắc sau khi copy cái đống lộn xộn, phải import lại từng resource mất dạy kia, não bạn vẫn còn ổn định đâu :v

Còn với việc chia nhỏ thành các module, việc bạn cần làm là import lại các module cần dùng, có thể vẫn sẽ thiếu 1 vài resource(do cách bạn tổ chức) nhưng resource đó đã trong module core của project, hoặc thiếu ko nhiều, việc copy lại ko mất quá nhiều thời gian cũng như rủi ro nào.

3. Dễ dàng refactor.

Để đơn giản sửa đổi, refactor project thì việc tách rời các chức năng là điều rất quan trọng, giống như việc ứng dụng của bạn sử dụng pattern MVP hoặc MVVM chứ ko phải AIO, nó đã khiến việc sửa đổi, phát triển và khả năng đọc được cải thiện rất nhiều. Thì module hóa cũng tương tự nhưng ở 1 cấp bậc rộng hơn vậy.

4. Giảm thiểu tình trạng conflict trong team.

Chắc hẳn việc phát triển dự án mà có nhiều người tham gia, việc giữ hòa khí là rất quan trọng, chứ dm code t ngon rồi mà tự dưng thằng review code nó merge cho thằng người yêu nó, làm giờ t bị conflict, chỉ thiếu nước dút dao ra chém chết mẹ chúng nó thôi.

May thay việc module hóa giảm thiểu được tình trạng ấy, mỗi thằng làm 1 chức năng, 1 module khác nhau thì conflict thế mẹ nào dk – việc conflict vẫn có thể xảy ra, nhưng có conflict thì cũng chỉ là mấy file dùng chung, resource, gradle, manifest, việc sửa conflict mấy file này hoàn toàn đơn giản.

5. Dễ dàng thử nghiệm công nghệ mới.

Lại tiếp tục giả sử, với 1 tính năng như camera, bạn đã viết tính năng camera của mình khá là ổn, thư viện chạy khá vừa ý, cho tới 1 ngày trên medium giới thiệu 1 thư viện camera mới với vài chục nghìn sao, còn lượng issuse chỉ vỏn vẹn 2 lần số sao (chém thôi), bạn liều mình thử chuyển sang thư viện mới. Rõ ràng là bạn vẫn phải sửa những chỗ implement thư viện, nhưng với multiples modules bạn có thể convert module cũ sang 1 module mới (vẫn giữ lại module cũ ), nếu thành công bạn có thể switch sang module mới, còn nếu bất ngờ lượng issuse bắt đầu có tác dụng với bạn, thì chỉ đơn giản vẫn sử dụng module cũ chạy tiếp. “Dm, thế t dùng 1 module rồi nếu ko thành công thì t reset git về trước khi sửa là dk”. Rõ ràng với việc sử dụng nhiều module việc thay đổi công nghệ với việc phát triển dự án vẫn có thể đi cùng nhau dk, cùng với việc switch qua lại cũng rất đơn giản, nếu ko thành công bạn vẫn có thể pending để sau thử lại được.

Mục 6,7,8 cho Phần 2 nhé, chứ em thấy em viết nhiều quá rồi :3

Kết luận:

Module hóa mang lại nhiều lợi ích cho việc triển khai dự án, tăng tốc quá trình build, tăng khả năng mở rộng quy mô, đơn giản để phát triển. Trong bài viết tiếp theo mình sẽ đưa ra mô hình, cách thức triển khai module mà mình đang dùng, những quy tắc cũng như những khó khăn có thể gặp phải trong việc module hóa.

Tài liệu tham khảo:

https://medium.com/swlh/modularization-by-feature-and-layer-with-android-architecture-components-80bf317d737
https://medium.com/google-developer-experts/modularizing-android-applications-9e2d18f244a0

Tags

#modularization#092020#architect
anh.pham

anh.pham

Developer

Related Posts

Imperative và Declarative trong Swift
Imperative và Declarative trong Swift
September 28, 2020
2 min
© 2021, All Rights Reserved.

Quick Links

HomeOur Team

Social Media