Starter pattern trong Android
Viết code Android không phải là một việc quá khó khăn và vất vả. Đôi khi những gì bạn cần chỉ đơn giản là làm theo một bài viết hay một video nào đấy. Và khi gặp lỗi, bạn chỉ cần đưa mã lỗi lên stack over flow rồi copy solution code và phệt vào project. Nhưng điều làm cho bạn trở lên khác biệt so với những thằng code Android khác chính là chất lượng đoạn code mà bạn vừa viết. Một đoạn code Android tốt không chỉ phân biệt bạn với những thằng khác mà còn giúp bạn tránh những lỗi Runtime tiềm ẩn khi mà bạn hoặc Android không phát hiện ra trong quá trình biên dịch.
Vậy nên hôm nay chúng ta sẽ cùng tìm hiểu 1 cách nhỏ giúp code đỡ ngu hơn phần nào.
Bài toán:
Sau một thời gian đi công tác và ăn hành, sếp của chúng ta cẩn tuyển người massage “lành mạnh” và đã có hai người đã ứng tuyển cho vị trí massage này. Chúng ta sẽ mô phỏng việc này trong code như sau:
Ta có một activity là CandidateActivity thể hiện thông tin chi tiết của ứng viên như tuổi, link ảnh. Activity này được gọi từ 2 activity khác là YuiHatanoActivity và HuyenMyActivity, những activity này sẽ truyền cho CandidateActivity hai tham số là age và imageUrl.
Cách giải quyết:
Chúng ta sẽ tạo ra một class nhỏ để chứa các Constants value như thế này :

Mục đích của việc tạo class này là để tránh text cứng trong activity, sau này nếu cần sửa tên intent key, chúng ta chỉ cần sửa một chỗ. Sau đó các activity HuyenMyActivity và YuiHatanoActivity sẽ như dưới đây:

Code cho CandidateActivity:

Nhìn có vẻ ổn đấy, nhưng bạn muốn code sạch sẽ và trong sáng hơn tý nữa, làm tý comment vào cho nguy hiểm:

Vấn đề:
Tại thời điểm này, nhìn code của bạn có vẻ trong sáng và sạch sẽ đấy. Tuy nhiên vấn đề ở đây là bạn không làm việc một mình, bạn có một team làm project này. Trong quá trình phát triển hoặc maintain, sẽ có rất nhiều người vào dự án của bạn, họ có thể xây dựng, clean hoặc xả rác vào project.
Giả sử sau này sếp cần biết thêm thời gian phục vụ của ứng viên. Yêu cầu này quá đơn giản phải không? Chúng ta chỉ cần thêm 1 hằng số vào class Constant như này:
public static final String TIME = “time”;
Và sau đó truyền thêm param ở 2 activity YuiHatano và HuyenMy. Tuy nhiên, bạn không làm một mình, có thể việc chỉnh sửa này được thực hiện bởi một người khác. Chính vì vào sau và không nắm được specs nên họ chỉ thực hiện thêm param cho activity YuiHatano mà quên không thêm cho activity HuyenMy và họ cũng chẳng update lại comment cho class CandidateActivity. Việc chỉnh sửa thiếu này sẽ không gây ra bất kỳ một lỗi runtime nào, nó sẽ chỉ bị phát hiện khi vào tay tester hoặc đen hơn là vào tay người dùng. Ngoài ra nếu đó là một project lớn, class Constants không chỉ có một vài key, class CandidateActivity được gọi từ nhiều chỗ hơn, bạn sẽ cần làm nhiều hơn và nguy cơ xảy ra thiết sót sẽ cao hơn.
Solution:
Để giải quyết vấn đề này, chúng ta sẽ sử dụng Starter Pattern.
Trong Starter Pattern, chúng ta sẽ sử dụng một hàm static để start activity với các required params được khai báo sẵn. Bây giờ activity Candidate của chúng ta sẽ như thế này:

Bây giờ, để gọi activityCandidateActivity, chúng ta sẽ thực hiện như sau
CandidateActivity.start(this, 10, “https://www.google.com/yuihatano.img");
Bây giờ, khi CandidateActivity cần thêm hoặc bớt một param , chúng ta chỉ cần chỉnh sửa trong hàm start, và sửa ở các vị trí gọi CandidateActivity.start() ở 2 activity HuyenMy và YuiHatano. Nếu bạn quên sửa ở một activity nào đấy thì cũng đừng lo, Android sẽ báo lỗi cho chúng ta khi build project. Đối với Fragment chúng ta cúng làm tương tự.
Và thế là xong, code của bạn đã bớt tù hơn rồi đấy.
Nguồn: Mindorks
