Bu sayfada, Mimari ile ilgili çeşitli en iyi uygulamalar ve öneriler sunulmaktadır. Uygulamanızın kalitesini, dayanıklılığını ve ölçeklenebilirliğini iyileştirmek için bu özellikleri kullanın. Ayrıca uygulamanızı yönetmeyi ve test etmeyi kolaylaştırır.
Aşağıdaki en iyi uygulamalar konuya göre gruplandırılmıştır. Her birinin projeyi ekibin tavsiyede ne kadar önemli olduğunu gösterir. Öncelik listesi aşağıdaki gibidir:
- Kesinlikle önerilir: Bu uygulamayı, politika ile çelişmediği sürece uygulamalısınız. temelden anlamak önemlidir.
- Önerilir: Bu uygulama büyük olasılıkla uygulamanızı iyileştirebilir.
- İsteğe bağlı: Bu yöntemle uygulamanızı belirli durumlarda iyileştirebilirsiniz.
Katmanlı mimari
Önerdiğimiz katmanlı mimari, endişelerin ayrılmasını destekler. Google veri modellerinden kullanıcı arayüzünü yönlendirir, tek doğruluk ilkesi ile uyumludur, tek yönlü veri akışı ilkelerine uyar. İşte size en iyi en iyi uygulamaları paylaşacağız:
Öneri | Açıklama |
---|---|
Açıkça tanımlanmış bir veri katmanı kullanın.
Kesinlikle önerilir |
Veri katmanı, uygulama verilerini uygulamanın geri kalanına gösterir ve uygulamanızın iş mantığının büyük çoğunluğunu içerir.
|
Açıkça tanımlanmış bir kullanıcı arayüzü katmanı kullanın.
Kesinlikle önerilir |
Kullanıcı arayüzü katmanı, uygulama verilerini ekranda gösterir ve kullanıcı etkileşiminin birincil noktası olarak işlev görür.
|
Veri katmanı, uygulama verilerini bir depo kullanarak göstermelidir.
Kesinlikle önerilir |
Kullanıcı arayüzü katmanındaki composable, etkinlikler veya ViewModeller gibi bileşenler, doğrudan bir veri kaynağıyla etkileşime geçmemelidir. Veri kaynaklarına örnek olarak şunlar verilebilir:
|
Eş yordamları ve akışları kullanın.
Kesinlikle önerilir |
Katmanlar arasında iletişim kurmak için eş yordamları ve akışları kullanabilirsiniz.
Diğer eş yordamlarla ilgili en iyi uygulamaları burada bulabilirsiniz. |
Alan katmanı kullanın.
Büyük uygulamalarda önerilir |
Birden çok ViewModel'de veri katmanıyla etkileşime geçen iş mantığını yeniden kullanmanız gerekiyorsa veya belirli bir ViewModel'in iş mantığı karmaşıklığını basitleştirmek istiyorsanız bir alan katmanı (kullanım alanları) kullanın |
kullanıcı arayüzü katmanı
Kullanıcı arayüzü katmanının rolü, uygulama verilerini ekranda görüntülemektir. ve kullanıcı etkileşiminin temel noktası olarak işlev görür. Aşağıda bazı en iyi uygulamaları görebilirsiniz: kullanıcı arayüzü katmanı için:
Öneri | Açıklama |
---|---|
Tek Yönlü Veri Akışı (UDF) yöntemini izleyin.
Kesinlikle önerilir |
ViewModel'lerin gözlemci kalıbını kullanarak kullanıcı arayüzü durumunu gösterdiği ve yöntem çağrıları aracılığıyla kullanıcı arayüzünden işlemler aldığı Tek Yönlü Veri Akışı (UDF) ilkelerini uygulayın. |
Avantajları uygulamanız için de geçerliyse AAC ViewModels'i kullanın.
Kesinlikle önerilir |
İş mantığını işlemek için AAC ViewModelleri'ni kullanın ve kullanıcı arayüzü durumunu kullanıcı arayüzüne (Oluşturma veya Android Görünümleri) göstermek için uygulama verilerini getirin.
ViewModel ile ilgili diğer en iyi uygulamaları burada bulabilirsiniz. ViewModels'in avantajlarını buradan inceleyebilirsiniz. |
Yaşam döngüsüne duyarlı kullanıcı arayüzü durumu koleksiyonu kullanın.
Kesinlikle önerilir |
Yaşam döngüsüne duyarlı uygun eş yordam oluşturucuyu kullanarak kullanıcı arayüzünden kullanıcı arayüzü durumunu toplayın: View sisteminde repeatOnLifecycle ve Jetpack Compose'da collectAsStateWithLifecycle .
|
ViewModel'den kullanıcı arayüzüne etkinlik göndermeyin.
Kesinlikle önerilir |
Etkinliği ViewModel'de hemen işleme ve etkinliğin işlenmesinin sonucunda bir durum güncellemesine neden olma. Kullanıcı arayüzü etkinlikleri hakkında daha fazla bilgiyi burada bulabilirsiniz. |
Tek bir etkinlik uygulaması kullanın.
Önerilen |
Ekranlar arasında gezinmek ve uygulamanızın birden fazla ekranı varsa uygulamanıza derin bağlantı vermek için gezinme parçaları veya gezinme önerileri özelliğini kullanın. |
Jetpack Compose'u kullanın.
Önerilen |
Telefonlar, tabletler, katlanabilir cihazlar ve Wear OS için yeni uygulamalar geliştirmek üzere Jetpack Compose'u kullanın. |
Aşağıdaki snippet'te, yaşam döngüsüne duyarlı bir kullanıcı arayüzü durumunun nasıl toplanacağı açıklanmaktadır. şekilde:
Görüntüleme sayısı
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
}
}
}
}
}
Oluştur
@Composable
fun MyScreen(
viewModel: MyViewModel = viewModel()
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
}
ViewModel
ViewModels, kullanıcı arayüzü durumunu sağlamak ve veri katmanından yararlanın. ViewModel'ler için en iyi uygulamalardan bazıları şunlardır:
Öneri | Açıklama |
---|---|
ViewModel'ler, Android yaşam döngüsünden bağımsız olmalıdır.
Kesinlikle önerilir |
ViewModel'ler, yaşam döngüsü ile ilgili herhangi bir türe referans içermemelidir. Bağımlılık olarak Activity, Fragment, Context veya Resources geçirmeyin.
ViewModel'de bir öğe için Context özelliği gerekiyorsa bunun doğru katmanda olup olmadığını kesinlikle değerlendirmeniz gerekir. |
Eş yordamları ve akışları kullanın.
Kesinlikle önerilir |
ViewModel, aşağıdakileri kullanarak veri veya alan adı katmanlarıyla etkileşime girer:
|
ViewModel'leri ekran düzeyinde kullanın.
Kesinlikle önerilir |
ViewModel'leri yeniden kullanılabilir kullanıcı arayüzü parçalarında kullanmayın. ViewModelleri'ni şurada kullanmalısınız:
|
Yeniden kullanılabilir kullanıcı arayüzü bileşenlerinde düz durum tutucu sınıfları kullanın.
Kesinlikle önerilir |
Yeniden kullanılabilir kullanıcı arayüzü bileşenlerindeki karmaşıklığı yönetmek için düz durum tutucu sınıfları kullanın. Bu sayede devlet kaldırılabilir ve dışarıdan kontrol edilebilir. |
AndroidViewModel kullanmayın.
Önerilen |
AndroidViewModel yerine ViewModel sınıfını kullanın. ViewModel'de Application sınıfı kullanılmamalıdır. Bunun yerine bağımlılığı kullanıcı arayüzüne veya veri katmanına taşıyın. |
Bir kullanıcı arayüzü durumunu gösterin.
Önerilen |
ViewModels, verileri uiState adlı tek bir özellik üzerinden kullanıcı arayüzüne sunmalıdır. Kullanıcı arayüzünde alakasız birden fazla veri parçası gösteriliyorsa sanal makine birden fazla kullanıcı arayüzü durumu özelliğini gösterebilir.
|
Aşağıdaki snippet'te, bir ViewModel'den kullanıcı arayüzü durumunun nasıl gösterileceği ana hatlarıyla açıklanmaktadır:
@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
)
// ...
}
Yaşam döngüsü
Aşağıda, Android ile hakkında daha fazla bilgi edinin.
Öneri | Açıklama |
---|---|
Etkinlikler veya Parçalar'daki yaşam döngüsü yöntemlerini geçersiz kılmayın.
Kesinlikle önerilir |
Etkinlikler veya Parçalar'da onResume gibi yaşam döngüsü yöntemlerini geçersiz kılmayın. Bunun yerine LifecycleObserver alanını kullanın. Yaşam döngüsü belirli bir Lifecycle.State değerine ulaştığında uygulamanın iş yapması gerekiyorsa repeatOnLifecycle API'yi kullanın. |
Aşağıdaki snippet'te, belirli bir değerde işlemlerin nasıl gerçekleştirileceği Yaşam döngüsü durumu:
Görüntüleme sayısı
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) {
// ...
}
}
}
}
Oluştur
@Composable
fun MyApp() {
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner, ...) {
val lifecycleObserver = object : DefaultLifecycleObserver {
override fun onStop(owner: LifecycleOwner) {
// ...
}
}
lifecycleOwner.lifecycle.addObserver(lifecycleObserver)
onDispose {
lifecycleOwner.lifecycle.removeObserver(lifecycleObserver)
}
}
}
Bağımlılıkları yönetme
Bağımlılıkları yönetirken gözlemlemeniz gereken birkaç en iyi uygulama vardır kontrol edin:
Öneri | Açıklama |
---|---|
Bağımlılık yerleştirme özelliğini kullanın.
Kesinlikle önerilir |
Bağımlılık yerleştirme en iyi uygulamalarını kullanın. Mümkün olduğunda ağırlıklı olarak oluşturucu ekleme. |
Gerektiğinde bir bileşeni kapsama alın.
Kesinlikle önerilir |
Tür, paylaşılması gereken değişken veriler içerdiğinde veya türün başlatılması pahalıysa ve uygulamada yaygın olarak kullanılıyorsa bağımlılık kapsayıcısını kapsama alın. |
Hilt'ı kullanın.
Önerilen |
Basit uygulamalarda Hilt'ı veya manuel bağımlılık ekleme'yi kullanın. Projeniz yeterince karmaşıksa Hilt'ı kullanın. Örneğin, şunlar için:
|
Test
Aşağıda test ile ilgili en iyi uygulamalardan bazıları verilmiştir:
Öneri | Açıklama |
---|---|
Neleri test edeceğinizi öğrenin.
Kesinlikle önerilir |
Proje genel olarak bir hello dünya uygulaması kadar basit değilse projeyi en azından şunları kullanarak test etmelisiniz:
|
Alay etmek yerine sahteleri tercih et.
Kesinlikle önerilir |
Daha fazla bilgi için Android dokümanlarında iki kez test kullanma başlıklı makaleye bakın. |
StateFlows'u test edin.
Kesinlikle önerilir |
StateFlow test edilirken:
|
Daha fazla bilgi için Android DAC kılavuzunda neleri test edebilirsiniz? başlıklı makaleye göz atın.
Modeller
Uygulamalarınızda model geliştirirken aşağıdaki en iyi uygulamaları dikkate almalısınız:
Öneri | Açıklama |
---|---|
Karmaşık uygulamalarda katman başına bir model oluşturma.
Önerilen |
Karmaşık uygulamalarda, anlamlı olduğunda farklı katmanlar veya bileşenlerde yeni modeller oluşturun. Aşağıdaki örnekleri göz önünde bulundurun:
|
Adlandırma kuralları
Kod tabanınızı adlandırırken aşağıdaki en iyi uygulamalara dikkat etmeniz gerekir:
Öneri | Açıklama |
---|---|
Adlandırma yöntemleri.
İsteğe bağlı |
Yöntemler fiil deyimi olmalıdır. Örneğin, makePayment() . |
Adlandırma özellikleri.
İsteğe bağlı |
Özellikler bir isim kelime öbeği olmalıdır. Örneğin, inProgressTopicSelection . |
Veri akışlarını adlandırma.
İsteğe bağlı |
Bir sınıf bir Akış akışını, LiveData'yı veya başka bir akışı gösterdiğinde adlandırma kuralı get{model}Stream() şeklindedir. Örneğin, getAuthorStream(): Flow<Author>
İşlev, model listesi döndürürse model adı çoğul olmalıdır: getAuthorsStream(): Flow<List<Author>> |
Adlandırma arayüzleri uygulamaları.
İsteğe bağlı |
Arayüz uygulamalarında kullanılan adlar anlamlı olmalıdır. Daha iyi bir ad bulunamazsa önek olarak Default ekleyin. Örneğin, bir NewsRepository arayüzü için OfflineFirstNewsRepository veya InMemoryNewsRepository kullanabilirsiniz. İyi bir ad bulamıyorsanız, şunu kullanın: DefaultNewsRepository .
Sahte uygulamalar, FakeAuthorsRepository örneğinde olduğu gibi Fake ön ekiyle başlamalıdır. |