SORU
2 ŞUBAT 2011, ÇARŞAMBA


Sunucu bir Strateji önbellek veri için istemci (iOS) üzerinde temel Veri

Arka uç ile iletişimde olan birçok iOS yazdım. Hemen hemen her zaman, önbellek sorguları için HTTP önbellek kullandım ve yanıt verileri (JSON) objective-C nesneleri ayrıştırmak. Bu yeni proje için, Çekirdek Veri bir yaklaşım mantıklı olurdu merak ediyorum.

Düşündüğüm şey şu:

İOS istemci sunucuya istekte ve CoreData modelleri için JSON nesneleri ayrıştırmak.

Her zaman yeni bir nesneye ihtiyacım var, doğrudan sunucu alma yerine, ayrıştırmak eğer ben zaten bu istek yapıp yapmadığını görmek için CoreData. Bu nesne var ve süresi yok, nesne getirilen kullanıyorum.

Nesne yok veya süresi doldu ancak, Bazı önbelleğe alma mantığı burada da geçerli olacaktır), sunucu nesnesini getir ve CoreData buna göre güncellemek istiyorum.

Böyle bir mimariye sahip aşağıdaki ile yardımcı olabilir: 1. Arka uç için gereksiz kaçının 2. Çevrimdışı tarama için tam destek (hala veri çekirdeğinde ... ... VERİTABANI ile ilişkisel sorgu yapabilirsiniz) izin verir

Şimdi burada Tanrılar için: benim sorum

  1. Bu biraz uç mantığı ikinci kez (Sunucu CoreData) kodu gerektirir, ama bu overkill olduğunu biliyorum?
  2. Altında tahmin ettim herhangi bir sınırlama?
  3. Başka bir fikrin var mı?

CEVAP
3 ŞUBAT 2011, PERŞEMBE


Eğer iOS kayıtlı bir geliştirici iseniz, WWDC 2010 Seansları için erişimi olmalıdır. Bu seanslardan biri neden bahsettiğini biraz kapalı: "Oturumu 117, Sunucu tabanlı bir Kullanıcı Deneyimi Binası". 0* *gerekir.

Bir akıllı kombinasyonu REST / JSON / Çekirdek Veri çalışır gibi bir cazibe ve bir yemek planlıyorsanız yeniden kodunuzu, ama gerektirir bilgi için HTTP (ve bilgi ile ilgili Temel Veriler, isterseniz uygulamalarınızı gerçekleştirmek için iyi ve güvenli).

Anahtar DİNLENME ve Çekirdek Veri anlamaktır.

  • REST Anlayış HTTP Yöntemleri anlayış demektir (GET, POST, PUT, DELETE, HEAD...?) ve Yanıt Kodları (2 XX, 3xx, 4xx, 5xx) ve Başlıklar (- Modified-Since Son Değişiklik,,, ... Etag)

  • Anlayış Temel Veri anlamına gelir bilmek bir tasarım Modeli, ilişkiler kurma, işleme zaman alıcı işlemleri (siler, ekler, güncelleştirmeleri ve nasıl şeyler oluyor arka planda böylece UI duyarlı tutar. Ve yerel olarak sorgu nasıl elbette sqlite (örn. sunucu tarafında eşdeğerleri sonra yenilerini oluşturmak) yerine nesneleri güncelleyebilirsiniz böylece önbelleğe kimliği için.

Eğer bahsettiğiniz görevler için yeniden kullanılabilir bir API uygulamak istiyorsanız, bu muhtemelen en kodlama yapacaksın nerede için DİNLENMEK ve Çekirdek Veri emin olun. (Mevcut API - ASIHttpRequest ağ tabaka (veya diğer) ve herhangi bir iyi JSON lib (örn. Ayrıştırma için SBJSON) iş yapacak.

Böyle bir API basit yapmak için anahtar sunucusu Dinlendirici bir Hizmet sunmak ve Kuruluşlar gerekli öznitelikleri (oluşturma tarihi, dateLastModified, vb.) holding var. yani oluşturabilirsiniz İstekleri (kolay ile ASİHttpRequest, GET, PUT, POST, DELETE) ve eklemek uygun Http Başlıklarını, örneğin Koşullu GET: İf-Modified-Since.

Eğer zaten rahat Çekirdek Veri ve idare JSON ve kolayca yapın HTTP İsteği işlemek ve Yanıtları (yine ASİHttpRequest yardımcı olur burada çok, ama başkaları da var, veya sopa alt düzey Apple NS-Sınıflar ve kendin yap), sonra tüm ihtiyacınız olduğunu belirlemek için doğru HTTP Başlıklarını isteklerinizi ve tanıtıcı Http Yanıt Kodları uygun (varsayarak Sunucu REST-ful).

Eğer birincil hedef olduğu için önlemek için yeniden güncelleme Çekirdek-varlıktan Veriler sunucu tarafında eşdeğer, sadece sahip olduğunuzdan emin olun "last-modified" özniteliği senin varlık ve koşullu ALMAK için sunucu (ayar "If-Modified-Since" Http-Başlık için varlıklar "last-modified" tarih. Sunucu Durum Kodu kaynak değiştirmediği takdirde. 304 (Değiştirilmiş) ile yanıt verir (sunucu REST-ful olduğunu varsayarsak). Eğer değişti sunucu kümesi "Last-Modified" Http-Başlık tarihi, son değişiklik yapılmış, yanıt Durum Kodu 200 ve teslim kaynağı vücut (örn. biçim JSON).

Bu yüzden, her zaman, soruna cevabım muhtemelen her zaman olduğu gibi 'değişiyor'. Bu çoğunlukla yeniden koymak istiyorum ne-yapmak-veri core/dinlenme katman bağlıdır.

Söyle numaraları: aldı beni 6 ay (boş zamanlarımda, bir hız 3-10 haftada saat) nerede benim olsun istedim, ve dürüst olmak gerekirse ben hala yeniden düzenleme, yeniden adlandırma, iş kolu özel kullanım durumları (iptal istekleri, yedeklerin vb) sağlar ve iyi ayarlanmış çağrı destek (erişilebilirlik, ağ katmanı, seri hale getirme, temel veri kaydetme...), . Ama oldukça temiz ve özenle hazırlanmış ve optimize edilmiş ve umarım benim işverenin genel ihtiyaçlarını (online-yerinde pazar birden çok iOS ile ilanlar için apps) uyar. O zaman öğrenme yaparak, test, optimize, ve sürekli benim API (İlk işlevi ekleyerek, geliştirmeye, sonra da radikal basitleştirilmesi ve tekrar hata ayıklama) hata ayıklama değiştirme dahil.

Eğer zaman-to-market ise öncelik, siz en iyisi basit ve pragmatik bir yaklaşım: Nevermind çalışmalarında sadece öğrendiklerini aklında, ve yeniden bir sonraki proje, yeniden ve sabitleme kodu orada burada. Sonunda, tüm deneyimlerin toplamı API NASIL çalıştığını ve sağladığı konusunda net bir vizyon ortaya çıkabilir. Eğer orada henüz, proje bütçesinin bir parçası yapmak, ve sadece 3 yılında Taraf istikrarlı olarak yeniden denemek için çalışırken ellerini tutmak için değil API dışarıda.

Uzun cevap için özür dilerim, genel bir API veya çerçeve bile bina gibi bir şeyin içine adım olduğunu hissettim. Bu işler zaman, bilgi, temizlik ve uzun vadeli bir taahhüt alır, ve çoğu zaman, onları asla bitirmek için zaman kaybı.

Eğer sadece belirli bir önbelleğe alma senaryoları işlemek için app çevrimdışı kullanım sağlar ve ağ trafiğini en aza indirmek istiyorsanız, o zaman tabii ki sadece bu özellikleri uygulayabilirsiniz. Sadece modifiye-eğer beri istek başlıklarını, son değiştirilme başlıkları veya etags incelemek ve bu bilgileri persistet kalıcı tutmak küme daha sonra isteklerini bu Bilgi yeniden böylece varlıklar. Tabii ki de önbellekleme (ısrarla) resim gibi kaynakları yerel olarak, aynı HTTP başlıklarını kullanmanızı tavsiye ediyorum.

Eğer lüks değiştirme (REST-ful şekilde) sunucu tarafı hizmet, o zaman sorun yok, verdiğiniz uygulamaya (deneyim, sen-ebilmek kurtarmak kadar 3/4 ağ/ayrıştırma kod iOS tarafında ise hizmeti davranır (döndürür uygun HTTP durum kodları, önler kontroller için nil, numara dönüşümleri, dizeleri, tarihler, sağlamak, arama-kimlik yerine örtülü dizeleri vb...).

Yoksa o lüks, o zaman da bu hizmeti en azından REST-ful (yardımcı olan bir sürü), veya düzeltmek zorundasın şeyler istemci tarafı (karın ağrısı, sık sık).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • Tom Megalis

    Tom Megalis

    18 NİSAN 2006
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007