ধারণা এবং জেটপ্যাক কম্পোজ বাস্তবায়ন
এই পৃষ্ঠায় স্থাপত্যের কিছু সেরা অনুশীলন এবং সুপারিশ উপস্থাপন করা হয়েছে। আপনার অ্যাপের গুণমান, দৃঢ়তা এবং প্রসারণযোগ্যতা উন্নত করতে এগুলো গ্রহণ করুন। এগুলো আপনার অ্যাপের রক্ষণাবেক্ষণ এবং পরীক্ষাও সহজ করে তোলে।
UI স্তর
UI লেয়ারের ভূমিকা হলো স্ক্রিনে অ্যাপ্লিকেশন ডেটা প্রদর্শন করা এবং ব্যবহারকারীর মিথস্ক্রিয়ার প্রধান কেন্দ্রবিন্দু হিসেবে কাজ করা। UI লেয়ারের জন্য কিছু সেরা অনুশীলন নিচে দেওয়া হলো:
সুপারিশ | বর্ণনা |
একমুখী ডেটা প্রবাহ (UDF) অনুসরণ করুন। জোরালোভাবে সুপারিশ করা হচ্ছে | ইউনিডিরেকশনাল ডেটা ফ্লো (UDF) নীতি অনুসরণ করুন, যেখানে ভিউমডেলগুলি অবজারভার প্যাটার্ন ব্যবহার করে UI স্টেট প্রকাশ করে এবং মেথড কলের মাধ্যমে UI থেকে অ্যাকশন গ্রহণ করে। |
আপনার অ্যাপের জন্য AAC ViewModel-এর সুবিধাগুলো প্রযোজ্য হলে তা ব্যবহার করুন। জোরালোভাবে সুপারিশ করা হচ্ছে | বিজনেস লজিক পরিচালনা করতে এবং UI-এর স্টেট প্রকাশ করার জন্য অ্যাপ্লিকেশন ডেটা ফেচ করতে AAC ViewModel ব্যবহার করুন। ViewModel-এর আরও সেরা অনুশীলনগুলো এখানে দেখুন। ভিউমডেলের সুবিধাগুলো এখানে দেখুন। |
লাইফসাইকেল-সচেতন UI স্টেট সংগ্রহ ব্যবহার করুন। জোরালোভাবে সুপারিশ করা হচ্ছে | উপযুক্ত লাইফসাইকেল-সচেতন কো-রুটিন বিল্ডার, |
ViewModel থেকে UI-তে ইভেন্ট পাঠাবেন না। জোরালোভাবে সুপারিশ করা হচ্ছে | ViewModel-এ ইভেন্টটি অবিলম্বে প্রসেস করুন এবং ইভেন্টটি হ্যান্ডেল করার ফলাফল দিয়ে একটি স্টেট আপডেট ঘটান। UI ইভেন্ট সম্পর্কে আরও জানতে এখানে দেখুন । |
একটি একক-কার্যকলাপের অ্যাপ্লিকেশন ব্যবহার করুন। সুপারিশকৃত | আপনার অ্যাপে একাধিক স্ক্রিন থাকলে, স্ক্রিনগুলোর মধ্যে নেভিগেট করতে এবং অ্যাপে ডিপ লিঙ্ক করতে নেভিগেশন ফ্র্যাগমেন্ট ব্যবহার করুন। |
নিম্নলিখিত কোড স্নিপেটটি লাইফসাইকেল-সচেতন পদ্ধতিতে UI স্টেট সংগ্রহ করার পদ্ধতি বর্ণনা করে:
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModel()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.uiState.collect {
// Process item
}
}
}
}
}
ভিউমডেল
ভিউমডেলগুলো UI স্টেট প্রদান এবং ডেটা লেয়ারে অ্যাক্সেস দেওয়ার জন্য দায়ী। ভিউমডেল ব্যবহারের কিছু সেরা পদ্ধতি নিচে দেওয়া হলো:
সুপারিশ | বর্ণনা |
ভিউমডেলগুলো অ্যান্ড্রয়েড লাইফসাইকেল সম্পর্কে অজ্ঞ থাকা উচিত। জোরালোভাবে সুপারিশ করা হচ্ছে | ViewModel-এ কোনো লাইফসাইকেল-সম্পর্কিত টাইপের রেফারেন্স থাকা উচিত নয়। ডিপেন্ডেন্সি হিসেবে |
কো-রুটিন এবং ফ্লো ব্যবহার করুন। জোরালোভাবে সুপারিশ করা হচ্ছে | ViewModel নিম্নলিখিত উপায়ে ডেটা বা ডোমেইন লেয়ারের সাথে যোগাযোগ করে:
|
স্ক্রিন লেভেলে ভিউমডেল ব্যবহার করুন। জোরালোভাবে সুপারিশ করা হচ্ছে | UI-এর পুনঃব্যবহারযোগ্য অংশে ViewModel ব্যবহার করবেন না। নিম্নলিখিত স্থানগুলিতে ViewModel ব্যবহার করা উচিত:
|
জোরালোভাবে সুপারিশ করা হচ্ছে | |
একটি UI অবস্থা প্রকাশ করুন। সুপারিশকৃত | ViewModel-এর উচিত
|
নিম্নলিখিত কোড স্নিপেটটিতে একটি ViewModel থেকে UI স্টেট কীভাবে প্রকাশ করতে হয় তার রূপরেখা দেওয়া হয়েছে:
@HiltViewModel
class BookmarksViewModel @Inject constructor(
newsRepository: NewsRepository
) : ViewModel() {
val feedState: StateFlow<NewsFeedUiState> =
newsRepository
.getNewsResourcesStream()
.mapToFeedState(savedNewsResourcesState)
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = NewsFeedUiState.Loading
)
// ...
}
জীবনচক্র
অ্যান্ড্রয়েড লাইফসাইকেল নিয়ে কাজ করার জন্য নিম্নলিখিত কিছু সেরা অনুশীলন রয়েছে:
সুপারিশ | বর্ণনা |
অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে লাইফসাইকেল মেথড ওভাররাইড করবেন না। জোরালোভাবে সুপারিশ করা হচ্ছে | অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে |
নিম্নলিখিত কোড স্নিপেটটি একটি নির্দিষ্ট লাইফসাইকেল স্টেট দেওয়া থাকলে কীভাবে অপারেশনগুলি সম্পাদন করতে হয় তার রূপরেখা দেয়:
class MyFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
// ...
}
override fun onPause(owner: LifecycleOwner) {
// ...
}
}
}
}