Là developer chuyên nghiệp thì việc phải tuân theo style convention khi code là điều bắt buộc. Với code Java/Kotlin, bạn có thể tuân theo chuẩn đặt tên như camelCase. Thế còn các file resource như dimensions, strings… thì sao? Bạn đã bao giờ nghĩ mình sẽ phải đặt tên resource cho chúng sao cho quy củ nhất chưa?
Mỗi người khi bắt tay vào dự án sẽ quy tắc đặt tên riêng. Chính vì thế mà gây khó khăn cho việc quản lý, đọc mã nguồn.
Bài viết này, chúng ta cùng tham khao một quy tắc đặt tên các resource trong dự án Android nhé.
Nội dung chính của bài viết
Quy ước đặt tên resource trong Android
Trong dự án Android, resource bao gồm các tệp xml/image như:
- Layout: là các file thiết kế giao diện màn hình ứng dụng.
- String: định nghĩa các text sử dụng trong dự án. Mục đích là để ứng dụng hỗ trợ đa ngôn ngữ là chính.
- Drawables: Liên quan tới hình ảnh, hiệu ứng, animation.
- Dimensions: Định nghĩa fontsize, width, height… Mục đích là để ứng dụng hỗ trợ đa kích thước màn hình.
#1. Các file cho Layout
Tên các tệp Layout phải khớp với tên class view. Ví dụ: nếu chúng ta đang tạo layout cho màn hình SignInActivity, tên của tệp layout phải là activity_sign_in.xml
.
Một số trường hợp ngoại lệ như khi chúng ta tạo layout để inflated bằng Adapter. Ví dụ trong trường hợp sau: để tạo layout cho từng item trong một ListView hoặc Recyclerview , tên của layout sẽ bắt đầu bằng item_
💦 Series học lập trình Android:Hướng dẫn toàn tập RecyclerView trong Android
#2. Cách đặt tên String
Tên string bắt đầu bằng tiền tố xác định chúng thuộc về phân mục nào. Chúng ta sử dụng quy tắc sau: <HOW>_<DESCRIPTION>
để đặt tên string.
Trong đó:
<HOW>
cho biết lý do string được sử dụng.<
description>
để cung cấp thêm thông tin. Thường dùng để phân biệt những thành phần trong cùng một màn hình.
Mình lấy một ví dụ đơn giản:
<string name="label_home">Home</string>
: label chính là <how> còn home là <description> dùng để miêu tả cho string.<string name="hint_user_name">Enter Your Name</string>
: how = hint và user_name là <description>
#3. Drawables
Với drawables thì sử dụng quy tắc: <WHAT>_<DESCRIPTION>
để đặt tên.
Trong đó:
<WHAT>
là kiểu của view, ví dụ: Button, Dialog, Divider, Icon, …<
DESCRIPTION
>
là để cung cấp thêm thông tin. Thường dùng để phân biệt những thành phần trong cùng một màn hình.
Để các bạn dễ hiểu hơn, mình cùng xem bảng bên dưới nhé
💦 Dành riêng cho bạn: [Video] Chia sẻ miễn phí khóa học Kotlin trên Android
#4. Còn Dimensions thì sao?
Các bạn chỉ nên định nghĩa có giới hạn các dimensions và tái sử dụng càng nhiều càng tốt trong ứng dụng.
Quy tắc đặt tên như sau:<WHAT>_<WHERE>_<SIZE>
<WHAT>
: Nó có thể là width (đơn vị dp), height (đơn vị dp), size (if width == height), margin (đơn vị dp), padding(đơn vị dp), elevation (đơn vị dp), text_size (đơn vị sp).<WHERE>
: Chỉ ra mục cụ thể mà dimen được sử dụng hoặc loại bỏ phần này nếu dimen này được sử dụng trong tất cả màn hình của ứng dụng.<SIZE>
: : Dơn vị của dimen, nó có thể làdp
hoặcsp
.
Xong rồi đó! Mặc dù quy ước này không bao gồm tất cả các loại resource. Nhưng cũng đủ cho những loại resource phổ biến nhất rồi.
Những hạn chế của quy tắc này
Như mình đã đề cập ở trên, khi bạn áp dụng một quy tắc để đặt tên resource sẽ có rất nhiều ưu điểm. Có thể kể như: thống nhất được style cho toàn dự án, dễ hiểu, dễ tìm kiếm khi đọc mã nguồn.
Tuy nhiên, vẫn tồn tại những hạn chế nhất định. Đó là:
1. Mỗi màn hình cần phải có tên duy nhất
Để tránh việc đặt tên bị trùng nhau, các class view phải có tên duy nhất (unique). Bạn không thể cùng có MainActivity
và MainFragment
vì tiền tố main
sẽ không còn để chỉ 1 màn hình duy nhất.
2. Không hỗ trợ refactoring code
Khi bạn sử dụng công cụ đến tiến hành refactoring code, việc đổi tên class view sẽ không đổi tên resource theo. Bạn sẽ cần phải đổi tên resource thủ công. Ví dụ: khi bạn đổi tên class MainActivity
thành ContentActivity
, tên của layout tương ứng của nó là activity_main
sẽ không được tự cập nhật.
Hi vọng trong tương lai gần, Android Studio sẽ cải tiến điều này.
3. Chưa hỗ trợ tất cả các loại resource
Hiện tại thì quy tắc đặt tên này chưa hỗ trợ tất cả các loại resource. Một số loại resource ít dùng như raw, assets chưa hỗ trợ. Hoặc một số loại khó khái quát hóa như themes/styles/colors/animations cũng vậy.
Nếu bạn có quy ước khác thì hãy đề xuất bên dưới để mình và mọi người có thể tìm hiểu thêm từ trải nghiệm của bạn nhé.
Tài liệu tham khảo:
- https://medium.com/mindorks/android-resource-naming-convention-42e4e8026614
Mặc dù trước đây mình cũng chú ý cách đặt tên nhưng vẫn còn lộn xộn lắm. Cám ơn admin