+1

Naming convention resources trong Android

Bạn còn nhớ lần cuối mà bạn phải mò vào file strings.xml để tìm String mà mình cẩn không ? Hay lần mà bạn phải lục thư mục drawalbes để tìm ảnh mà bạn cần ?

Bất cứ khi nào chúng ta bắt đầu một project mới, ta luôn chú trọng quan tâm đến việc cài đặt, sử dụng mô hình code ra sao nhưng bạn đã bao giờ lên kế hoạch đặt tên cho các nguồn resoures trong project chưa ?

Nếu chưa thì bạn nên đặc biệt lưu tâm đến vấn đề này ! Bời vì thiếu namesapces XML hay đặt tên một cách bừa bãi sẽ khiến việc quản lí, tìm kiếm nguồn resourecs này về lâu dài sẽ rất khó khăn và khi project càng lớn thì ta càng khó kiểm soát hơn.

Sau đây mình xin gợi ý một vài điểm cần lưu tâm để giải quyết mối lo của các bạn

  • Nguồn resoures cần dễ tìm (auto complete)
  • Đặt tên một cách khoa học, dễ đoán
  • Sắp xếp theo thứ tự gọn gàn, mở rộng tên theo đặc điểm

Bài viết này sẽ giải thích cơ chế, những ưu điểm, các giới hạn và cung cấp cách vận dụng và phát huy các điểm lưu ý này.

Basic principle

Tất cả tên resoures đặt theo convention sau

Giờ ta sẽ thảo luận về ưu điểm từng element và cách apply convention này <WHAT> Chỉ ra nguồn resouce này đại diện cho cái gì, thường là tên của View Class để giới hạn sự lựa chọn của resoure này. VD : MainActivity → activity , BaseFragment → fragment ...

<WHERE> Mô tả nơi resouce này nằm ở đâu trong app. Các resourec sử dụng ở nhiều màn thường đặt là all, còn các phần cụ thể khác sẽ phải chỉ cụ thể vị trị của phần đó VD : MainActivity → main, MovieFragment → movie ... <DESCRIPTION> Mô tả thuộc tính của resouce trên màn hình VD : title, sub_title ...

<SIZE> (optional) Chỉ rõ kích thước của resoure này, thường dành cho và dimensions VD : 24dp, small, big …

Advantages

  1. Sắp xếp vị trí resoures theo màn hình

    <Where> đã mô tả nơi resoure này nằm ở màn hình nào. Vì vậy ta có thể lấy các resourecs như ảnh, dimens, string ở màn hình cụ thể

  2. Gắn kết với resoures IDs <What> mô tả tên class nằm ở element xml, sẽ dễ dàng cho ta khi gọi findViewById()

  3. Tổ chức resoures tốt hơn

Browser của IDE thường sắp xếp theo thứ tự alphabe, cho nên các resoures sẽ đc sắp theo theo group ứng với <What> (activity, fragment, dialog … ) và <Where> để biết resoures nằm ở màn nào.

  1. Autocomplete hiệu quả hơn

Các prefix <What> và <Where> giúp việc tìm kiếm trên browser hiệu quả hơn khi chỉ cần nhập keyword các prefix này để thu gọn kết quả danh sách tìm k

  1. Không còn name conflict

Các resoures ở các màn hình khác nhau hoặc dùng từ khóa “all” còn không sẽ có 1 <Where> riêng biệt sẽ giúp tránh khỏi việc conflict name

  1. Resouces name clean hơn

Tên resourecs được đặt 1 cách logic sẽ khiến project của chúng ta cũng clean hơn rất nhiều

  1. Tools support

Convention này đc Android Studio supports trong việc inspect code và giúp dễ dàng preview các màn hình.

Layouts

Sau đây là rule của layout

<What> là một trong các tên sau

activity : content view trong activity fragment : content view trong fragment view : custom inflated view item : layout sử dụng trong recycler view, grid view … layout : layout sử dụng trong thẻ include

VD : activity_main, fragment_movie, view_menu, item_article, layout_action_bar

Strings

Nếu strings này sử dụng ở màn cụ thể và duy nhất, ta chỉ định <Where> cho string đó hoặc nếu strings đc sử dụng toàn app thì dùng VD : article_title, error_message, all_ok, all_close

Drawables

Tượng tự như Strings và ta nên cân nhắc thêm lựa chọn <Size> hoặc VD: all_back_icon, movie_placeholder, all_default_avatar_36dp, all_action_image_big

IDs Đối với Ids của view ta có rule sau Trong đó <What> là tên View class, <Where> là vị trí của view

VD: tablayout_main, image_menu_profile, text_movie_title

Dimensions

Một app android nên xác định một vài dimension cố định và có thể sử dụng lại. Thường ta hay sử dụng all cho <WHERE> hoặc có thể tùy chọn cho size cụ thể

Trong đó <What> gồm có : width, height, size (nếu width == height) , margin, padding, elevation, keyline, textsize….

Ngoài ra còn nhiều dimension ít phổ biến hơn như animation rotate, scale …

VD : height_toolbar, size_menu_icon, textsize_big…

Known limitations

  1. Các màn hình cần unique name
  • VD chỉ nên có 1 MainActivity trong project, ngoài ra <What> nên tránh đặt trùng hoặc gần giống nhất có thể. nếu có MainActivity và MainFragment thì <What> không còn unique nữa
  1. Không hỗ trợ refactor Khi đổi tên MainActivity sang BaseActivity thì tên id activity_main sẽ không đổi sang activity_base.

  2. Không support tất cả resoures Có những resoures khá đặc biệt như animation, assets, raw thì vẫn chưa có solution để quản lí những resoures này một cách tốt nhất vì thường các resoures này ít khi dùng lại đc.

Bài viết được dịch từ : https://jeroenmols.com/blog/2016/03/07/resourcenaming/


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.