सिद्धांत और Jetpack Compose को लागू करना
इस पेज पर, आर्किटेक्चर के सबसे सही तरीके और सुझाव दिए गए हैं. इन सिद्धांतों को अपनाकर, अपने ऐप्लिकेशन की क्वालिटी, मज़बूती, और स्केलेबिलिटी को बेहतर बनाएं. इनसे, ऐप्लिकेशन का रखरखाव और उसकी जांच करना भी आसान हो जाता है.
यूज़र इंटरफ़ेस (यूआई) लेयर
यूज़र इंटरफ़ेस (यूआई) लेयर का काम, स्क्रीन पर ऐप्लिकेशन का डेटा दिखाना है. साथ ही, यह उपयोगकर्ता के इंटरैक्शन का मुख्य पॉइंट है. यूज़र इंटरफ़ेस (यूआई) लेयर के लिए, यहां कुछ सबसे सही तरीके दिए गए हैं:
- आपको रिपॉज़िटरी बनानी चाहिए, भले ही उनमें सिर्फ़ एक डेटा सोर्स हो.
- छोटे ऐप्लिकेशन में, डेटा लेयर टाइप को
dataपैकेज या मॉड्यूल में रखा जा सकता है.
सुझाव |
ब्यौरा |
एक दिशा में डेटा फ़्लो (यूडीएफ़) का पालन करें. हमारा सुझाव है कि आप इसे भेजें |
एकतरफ़ा डेटा फ़्लो (यूडीएफ़) के सिद्धांतों का पालन करें. इसमें ViewModels, ऑब्ज़र्वर पैटर्न का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) की स्थिति को दिखाते हैं और मेथड कॉल के ज़रिए यूज़र इंटरफ़ेस (यूआई) से कार्रवाइयां पाते हैं. |
अगर आपके ऐप्लिकेशन पर AAC ViewModels के फ़ायदे लागू होते हैं, तो उनका इस्तेमाल करें. हमारा सुझाव है कि आप इसे भेजें |
AAC ViewModels का इस्तेमाल करके, कारोबार के लॉजिक को मैनेज करें. साथ ही, ऐप्लिकेशन का डेटा फ़ेच करके, यूज़र इंटरफ़ेस (यूआई) की स्थिति को यूज़र इंटरफ़ेस (यूआई) पर दिखाएं. |
लाइफ़साइकल की जानकारी रखने वाले यूज़र इंटरफ़ेस की स्थिति से जुड़ा डेटा इकट्ठा करने की सुविधा का इस्तेमाल करें. हमारा सुझाव है कि आप इसे भेजें |
लाइफ़साइकल के बारे में जानकारी रखने वाले सही को-रूटीन बिल्डर,
|
ViewModel से यूज़र इंटरफ़ेस (यूआई) को इवेंट न भेजें. हमारा सुझाव है कि आप इसे भेजें |
इवेंट को ViewModel में तुरंत प्रोसेस करें. साथ ही, इवेंट को हैंडल करने के नतीजे के साथ स्थिति को अपडेट करें. यूज़र इंटरफ़ेस (यूआई) इवेंट के बारे में यहां ज़्यादा जानें. |
एक गतिविधि वाले ऐप्लिकेशन का इस्तेमाल करें. सुझाए गए |
अगर आपके ऐप्लिकेशन में एक से ज़्यादा स्क्रीन हैं, तो स्क्रीन के बीच नेविगेट करने के लिए नेविगेशन फ़्रैगमेंट का इस्तेमाल करें. साथ ही, अपने ऐप्लिकेशन को डीप लिंक करें. |
यहां दिए गए स्निपेट में, लाइफ़साइकल के बारे में जानकारी रखने वाले तरीके से यूज़र इंटरफ़ेस (यूआई) की स्थिति को इकट्ठा करने का तरीका बताया गया है:
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
}
}
}
}
}
ViewModel
ViewModels, यूज़र इंटरफ़ेस (यूआई) की स्थिति और डेटा लेयर का ऐक्सेस देने के लिए ज़िम्मेदार होते हैं. यहां ViewModels के लिए कुछ सबसे सही तरीके दिए गए हैं:
सुझाव |
ब्यौरा |
ViewModels को Android लाइफ़साइकल के बारे में पता नहीं होना चाहिए. हमारा सुझाव है कि आप इसे भेजें |
ViewModels को लाइफ़साइकल से जुड़े किसी भी टाइप का रेफ़रंस नहीं रखना चाहिए. |
कोरूटीन और फ़्लो का इस्तेमाल करें. हमारा सुझाव है कि आप इसे भेजें |
ViewModel, डेटा या डोमेन लेयर के साथ इन तरीकों से इंटरैक्ट करता है:
|
स्क्रीन लेवल पर ViewModels का इस्तेमाल करें. हमारा सुझाव है कि आप इसे भेजें |
यूज़र इंटरफ़ेस (यूआई) के दोबारा इस्तेमाल किए जा सकने वाले हिस्सों में ViewModels का इस्तेमाल न करें. आपको ViewModels का इस्तेमाल इनमें करना चाहिए:
|
हमारा सुझाव है कि आप इसे भेजें |
|
यूज़र इंटरफ़ेस (यूआई) की स्थिति को दिखाना. सुझाए गए |
ViewModels को यूज़र इंटरफ़ेस (यूआई) के लिए डेटा को
|
यहां दिए गए स्निपेट में, ViewModel से यूज़र इंटरफ़ेस (यूआई) की स्थिति को दिखाने का तरीका बताया गया है:
@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
)
// ...
}
लाइफ़साइकल
Android लाइफ़साइकल के साथ काम करने के कुछ सबसे सही तरीके यहां दिए गए हैं:
सुझाव |
ब्यौरा |
गतिविधियों या फ़्रैगमेंट में लाइफ़साइकल के तरीकों को न बदलें. हमारा सुझाव है कि आप इसे भेजें |
ऐक्टिविटी या फ़्रैगमेंट में, लाइफ़साइकल के तरीकों को न बदलें. जैसे, |
यहां दिए गए स्निपेट में, किसी लाइफ़साइकल की स्थिति के हिसाब से कार्रवाइयां करने का तरीका बताया गया है:
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) {
// ...
}
}
}
}