SORU
24 NİSAN 2011, Pazar


Zaman uyumsuz programlama en iyi uygulamalar

Son zamanlarda 8,000-10,000 kod satırları oldu kabaca olan ilk Android uygulamamı yazdım. Sürekli normal tasarım desenleri kullanımı engelleyen tek şey zaman uyumsuz çağrı (açılış diyaloglar, faaliyetler, vb.) android ağır kullanın. Bu nedenle, benim kod çok hızlı bir şekilde"", ve ben sonunda sevmediğim için bazı derslere bakmaya başladı. spagetti gibi bakmaya başladı

Herkes tavsiye ederim bu gibi sistemler için özel tasarım desenleri veya programlama yöntemleri var mı? Yönetilebilir zaman uyumsuz kod yazmak için herhangi bir öneriniz var mı?

CEVAP
25 NİSAN 2011, PAZARTESİ


  • Global değişkenler kullanmak

Eğer Intent.putExtra() basit aramalar ile kodunuzu karışıklık ve her benzersiz bu şeyler yönetmek Activity Eğer uygulama içinde global değişkenler kullanmak zorundasın. Uygulama hayatta olduğu sürece gereken Application ve mağaza veri uzatın. Aslında, use this excellent answer uygulamak için. Bu faaliyetler arasında bağımlılıkları tamamen ortadan kalkıyor. Örneğin, bir "" uygulama uygulama yaşam döngüsü - bu sadece bunun için mükemmel bir araçtır sırasında. username gerekir ki Intent.putExtra() kirli aramaları gerek.

  • Stilleri kullanın

İlk Android uygulaması yaparken ortak bir hata genellikle sadece XML görünümlerini yazmaya başlayın. XML dosyaları (sorunsuz ve çok hızlı) kodu çok sayıda satıra kadar gidecek. Burada sadece belirli bir davranışı uygulamak için style öznitelik kullanmak bir çözüm olabilir. Örneğin, bu kod parçası göz önünde bulundurun:

values/styles.xml:

<style name="TitleText">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">#000</item>
    <item name="android:textStyle">bold</item>   
</style>

layout/main.xml:

Eğer varsa, şimdi, hadi, TextViews ve ikisi de aynı davranışı olmalıdır iki, onları TitleText tarzı kullanmak demek. Örnek kod:

<!--- ... -->
<TextView
   android:id="@ id/textview_one"
   style="@style/TitleText" 
/>

<TextView
   android:id="@ id/textview_two" 
   style="@style/TitleText" 
/>
<!--- ... -->

Basit ve kod yinelenen gerek yok. Eğer gerçekten daha fazla bu konu üzerinde görünmesini istiyorsanız, lütfen Layout Tricks: Creating Reusable UI Components bak.

  • Dizeleri kullanın

Bu nokta, ama önemli bir söz olduğunu düşünüyorum kısa. Geliştiriciler yapabilecek başka bir hata atlamak içinstrings.xmlve sadece UI iletileri (ve öznitelik adları) içinde kod yazma ihtiyacı olacaktır). Uygulamanız korumak için daha kolay hale getirmek için; sadece mesajları tanımlamak ve niteliklerinistrings.xmldosya.

  • Ve küresel aracı bir sınıf oluşturun

İlk başvurumda yazdığım zaman sadece (ve çoğaltılamaz) ben gereken yere yöntemleri yazdı. Sonuç? Çeşitli etkinlikler arasında aynı davranışları vardı bu yöntem çok. Öğrendiklerini aracı bir sınıf yapmak. Örneğin, diyelim faaliyetlerinin tüm web isteklerini yapmak zorunda söyle. Bu durumda, skip 16* *gerçek içinde onları tanımlamak ve statik bir yöntem yapmak için. Örnek kod:

public final class Tools {

    private Tools() {
    }

    public static final void sendData(String url, 
              String user, String pass) {
        // URLConnections, HttpClients, etc...
    }

}

Şimdi, sadece bu kod veri göndermek gerekiyor Activity sunucu doğru senin: aşağıda kullanabilirsiniz

Tools.sendData("www.www.www", "user", "pass");

Ancak, ne demek istediğimi anladınız. Bu "" . desen kullanın ^em>gerekkodunuzu berbat sizi koruyacaktır.

  • Kullanıcı uygulama ile etkileşim için gereken özel sınıflar davranışlarını açıklayalım

Bu muhtemelen en yararlı noktasıdır. Sadece tanımlamak için "kullanıcı uygulama ile etkileşim gerekiyor" diyelim ki sen bir Menu, hangi davranışları çok uzun açısından hatları, neden saklıyoruz Menu'nin hesaplamalarında aynı sınıf mı? Her küçük parça Activity sınıf kodu acıklı bir parça uzun olacak - kod gibi "spagetti". Örneğin, bu gibi bir şey yerine:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item;
    item = menu.findItem(R.id.menu_id_one);
    if (aBooleanVariable) {
        item.setEnabled(true);
    } else {
        item.setEnabled(false);
    }
    // More code...
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem i) {
    // Code, calculations...
    // ...
    // ...
    return super.onOptionsItemSelected(i);
}

böyle bir şey için yeniden tasarlamak

private MyCustomMenuInstance mMenuInstance;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        
    setContentView(R.layout.main);

    mMenuInstance = new MyCustomMenuInstance();
}  

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    mMenuInstance.onPrepareOptionsMenu(menu);
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem i) {
    mMenuInstance.onOptionsItemSelected(i);
    return super.onOptionsItemSelected(i);
}

, 25**: örneğin

public class MyCustomMenuInstance { 

    // Member fields..

    public MyCustomMenuInstance() {
        // Init stuff.
    }

    public void onPrepareOptionsMenu(Menu menu) {
        // Do things..
        // Maybe you want to modify a variable in the Activity 
        // class? Well, pass an instance as an argument and create
        // a method for it in your Activity class.
    }

    public void onOptionsItemSelected(MenuItem i) {
        // Do things..
        // Maybe you want to modify a variable in the Activity 
        // class? Well, pass an instance as an argument and create
        // a method for it in your Activity class.
    }

}

Bunun nereye gittiğini görüyorsunuz. Liste uzun olduğu pek çok şey için bu geçerli olabilir, *27 örneğin, *, onCreateOptionsMenu**28, . Daha "uygulamalar" Google bazı örnek uygulamalar here görebilirsiniz. en iyi öğrenin Güzel ve doğru bir şekilde uygulanan, onlar için bak.

Son bir söz; kodunuzu, özellikle doğru bir şekilde mantıklı bir şekilde ve değişkenleri ve yöntemleri adı temiz kalsın. Her zaman, her zaman kodunuzu nerede olduğunu öğrenin - bu çok önemli.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • friendz.net

    friendz.net

    29 EKİM 2010
  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009