2010-12-01 26 views
6

Bazen, bazen bazen bazen uzaktan XML JSON yerel yükleme verilerini içeren birkaç proje üzerinde çalışıyoruz. Benim sahip olduğum problem, geliştirme hızının ve çeşitli müşterilerin değişen zihinlerinin, tasarımlarımın çok katı olduğunu ve onların daha esnek olmalarını istediğimdir. Veri yükleme için tekrar kullanılabilir bir çözüm düşünmeye çalışıyorum ve birçoğunuzun aynı problemi yaşadığını hayal ettiğimden bazı tavsiyelerde bulunmak istiyorum. Ben yapmak istiyorum neTasarım desen/veri yükleme çözümü

respectivly parse() ve LoadData() yöntemleri var tip Ayrıştırıcı ve Yükleyici üyesi değişkenleri vardır jenerik LoadingOperation soyut sınıf yaratmaktır. sınıflandırılır Ayrıştırıcı ve Yükleyici i yüklenecek her şey için LoadingOperation genişleten yeni bir sınıf istiyorum arayüzleri ve bunlar böyle bir şey ile vb XmlParser ve JSONParser, LocalLoader ve RemoteLoader olabilir uygulamak sınıflardır hava, yerel bir XML dosyası veya uzak JSON, ya da her neyse. sorundur

spesifik Ayrıştırıcı uygulama LoadingOperation sınıfın polimorfik davranış bozmadan özel veri türlerini döndüremez olmasıdır. Ben jenerik ile karıştırmasını ve ilan alt sınıfları LoadingOperation ait

class SpecificLoader extends LoadingOperation<CustomDataType> 

benzeri ve Ayrıştırıcı sınıfları ile benzer şeyler yapıyor, ama bu biraz garip görünüyor edilmiştir.

kimse yanlış yaptığını ne im/daha iyi performans gösteriyor olabilir üzerinde herhangi bir öneriniz var mı. Ben ... (tabii o kadar değişiyor should not gerçeğini! Görmezden) özelliklerde değişiklik hızlı bir şekilde tepki edebilmek ve kod vb mantıksal ayırımı olması herhangi bir yardım için

teşekkür istiyorum!

düzenleme: soru da O gerçekten talepleri çok çabuk değişiyor kadar usulca mümkün olduğunca az kod ile yazılan bir şey istiyorum bana geliyor buraya link text

+1

Farklı kaynaklardan gelen aynı verileri ele alıyor musunuz? Yani Aynı iş modeli nesnelerini bu verilerle mi dolduruyorsunuz? Aksi halde, tüm yaklaşımın mantıklı olduğunu sanmıyorum ... – Jules

+0

iyi düşünmek yerel veri/web servisleri ile uğraşmak için tekrarlanan bir model olabilir ve bunlar (kısa dev zamanlara ve prototiplere sahip küçük mobil uygulamalar) genellikle sadece yerel veri vb. Her proje için bazen değişebilir kaynaklardan gelen veriler aynıdır, ancak farklı projeler için kesinlikle farklı veri ve modellerdir! :) – Dori

+0

Üzgünüz, bunun nasıl çalışması gerektiğini görmüyorum. Ayrıştırma, iş mantığınızı izleyen verileri işliyor ve görünüşe göre bu mantık ve veri değişiyor, bu nedenle belirli bir noktada belirli yöntemlere ihtiyacınız var. Bu belirli dönüşümü yapana kadar katman üzerinde katman oluşturma hiçbir işe yaramayacaktır. Bana mantıklı olan tek soyutlama katmanı, ayrıştırıcı özelliklerini değiştirirseniz, böylece sadece yüksek düzeyli bir myObject çağrısı alırsınız: loadData(); veya loadData (myObject);, böylece gerçek ayrıştırıcı uygulamasını hızlı bir şekilde değiştirebilirsiniz. – Jules

cevap

1

istedi. İşte ben arka uç için PHP kullandığım bir projeyi nasıl yapıyorum. Veri tabanından veri almak ve müşteriye geri dönmek için sql ve json kullanıyorum.

Tipik Her sonuç, satır için her sütun bu sütun için sonuç olarak bir değere sahip bir anahtar halini harita haline satır dönüştürmek, veri tabanında bir seçme yapmak. Bu harita listesi daha sonra jenerik bir json rutini ile json'a dönüştürülür ve json sunucudan gönderilir.

Böyle bir kurulum sunucudan istemciye bazı verileri taşımak için son derece kolaydır ama:

  • Sen hazırda/xml/remoting kullanarak alabilir gevşek tip güvenliği.
  • Müşterileriniz sıkıca veritabanı şemaya birleştirilmiştir.
  • hızlı kötü veri al ve taşımak için olsa öyle.
  • Daha fazla veri almak için sorguyu değiştirirseniz, yeni verileri kullanmaları gerekmedikçe istemcilerin yeniden derlenmesine gerek yoktur.

bu PHP'de yapmam nasıl göründüğünü bir fikir vermek için:

benim veri erişim nesnede

:

function getAllPortal() { 
    $sql = "select firstname, lastname, U.* from person, portal_user U where id=person order by firstname, lastname"; 
    $prep = $this->db->prepare($sql); 
    return $prep->execute(); 
} 

Ve http hizmetinde

(dinlenme bazlı) kodu:

$accPerson = new AccountPerson($db); 
    echo json_encode($accPerson->getAllPortal()); 

Bunu Java'da yapmak için muhtemelen bir harita listesinde (veya taşımak istediğiniz diğer bazı kolay yapılarda) veri elde etmek için bir çerçeve yapmalısınız. müşterilere). PHP'de bir tane hazırladım, bu da hazırlanmış ifadelerin kullanılmasına izin veriyor.

(eğer yukarıdaki gibi yapmazsanız bile) size düşünebiliriz diğer bazı hususlar olabilir:

katmanları kaçının. Mümkün olduğunca az var. Hazırda Beklet'i kullanırsanız, onu kucaklayın. Nesneleri doğrudan sorgunuzda kullanın ve json'a dönüştürün ve gönderin. Katmanlar, birkaç kişi (veya müşterilerin) verilerinizi kullanması gerektiğinde kodunuzu sağlamlaştırırlar - kodunuzun hızlı değişmesini istemez hale getirirler. Katmanları ne zaman yapacağınızı ve ne zaman yapmamayı öğrenmek hiledir ve olabildiğince uzun süre direnir. Katmanları yazmak zaman alır.

Taşımanız için XML'e veya daha iyi JSON'a gidin. Xml ve/veya serileştirme gibi değişikliklere karşı pojoslara giden bir şemaya gitmeyin. Pojos iş mantığı için harika, ancak veri aktarımı için çok zor. Müşteriniz yeterince zayıfsa, json'unuzu tekrar nesnelere serpiştirmeyin. JSON'ı doğrudan kullanın. Yine, katmanlarda olduğu gibi, püf noktası, pojoların ne zaman iş değeri verdiğini ve ne zaman yapıldığını bilmektir. Katmanlarda olduğu gibi, değeri görene kadar o işe koyulmaya karşı koy. Desperizatörlerin yazılması/bakımı zaman alır.