SORU
8 Mart 2011, Salı


Clojure Java yeniden

Sadece şirketim tarafından (kod 50,000 tek satır) büyücek bir Java uygulaması (bir web uygulaması ve sunucu uygulamalarını JSP kullanarak) Clojure içinde yeniden yazmak için istendi. Başka biri için dikkat etmeliyim ne gibi ipuçları var?

Hem Java hem de Clojure gayet iyi biliyorum, bunu unutmayın lütfen.

Güncelleme

Yeniden yaptım ve üretime geçti. Oldukça garip yeniden kendi olarak yapıldı o kadar hızlı yaklaşık 6 hafta geçirdim. İşlevsellik bir sürü hala ihtiyaç yoktu çünkü Clojure gibi 3000 hatları bitti. Sistem ve istedikleri şeyleri yaparak onun mutlu olduklarını duydum. Tek dezavantajı adam sistem bakımı Clojure sıfırdan öğrenmek zorunda, ve çığlıklar atarak sürüklendi. Onu geçen gün.. komik : gerçi şimdi Lisp) sevdiğini söyleyen bir telefon aldım

Ayrıca, iyi bir söz Vaadin için verebilirim. Kullanarak Vaadin muhtemelen muhasebesi için olduğu kadar zamandan tasarruf ve kısa kod olarak Clojure.. Vaadin hala üst web çerçeve var, şimdiye kadar kullanılan, ancak şimdi öğreniyorum ClojureScript öfke! (Bu iki Vaadin ve ClojureScript başlık altında Google GUI çerçevelerini kullanın) dikkat edin

CEVAP
8 Mart 2011, Salı


"Öteleme sorunu" muhtemelen Clojure / fonksiyonel programlama paradigma için Java / OOP metodolojisi gidiyor. en büyük

Nesneler içinde, değişken devlet yerine özellikle, "" açıkça kesilebilir devlet ayrı ve saf (- yan etkisi ücretsiz) fonksiyonları geliştirmektir. Clojure yolu Muhtemelen bu zaten biliyorum :-)

Her neyse, bu felsefe eğilimi neden doğru bir şey bir "aşağıdan yukarıya" kalkınma stil nerede odak ilk çabaları binanın tam set araçları için sorunlarını çözmeyecek, sonunda tak onları birlikte sonunda. Bu böyle bir şey olabilir

  1. Anahtar veri yapıları tanımlamak ve onları Clojure göster ya da kaydı tanımlar değişmez dönüşüm. Değişmez haritaları yuva çok korkmayın - Clojure kalıcı veri yapıları için çok verimli teşekkürler. this video daha fazla bilgi için izlemeye değer.

  2. Bu değişmez yapılar üzerinde çalışan saf, iş mantığı yönelik fonksiyonları küçük kitaplıkları geliştirmek ("Alışveriş sepetine öğe eklemek"). ör: Gerek yok bütün bu seferde madem kolay eklemek daha sonra, ama yardımcı olur musunuz bir kaç erken kolaylaştırmak için test ve ispat eden veri yapılarıdır çalışma..... ya bu nokta aslında çok faydalı bir şey etkileşimli ÇOĞALTMA de yazmaya başlayabilirsiniz

  3. Ayrı olarak bu yapılar veritabanı veya ağ ya da eski Java gerektiğinde kod/kalıcı veri erişim rutinleri geliştirmek. Bu çok ayrı tutmanın sebebi kalıcılık mantığı ile "iş mantığı" fonksiyonları, bağlanmak istemiyorum. Ayrıca çok kolay gibi herhangi bir Java kalıcılık kodu sarmak için değil ama bunun için ClojureQL bakmak isteyebilirsiniz.

  4. Tüm yukarıda kapsayan birim testleri (clojure.test*) yazın. Bu özellikle önemli bir dinamik dil gibi Clojure beri) gerek yok fazla bir güvenlik ağı statik tür denetlemesi ve b) yardımcı olur emin olmak için bu alt düzey oluşturur çalışan çok önce inşa çok üstünde

  5. Clojure referans türleri (vars, hakemlerle, ajanlar ve atomlar) kullanmak istediğiniz her bölümü yönetmek için değişken düzeyli uygulama devlet karar. Onlar benzer bir şekilde çalışır, ancak farklı işlem/eşzamanlılık semantik yapmak için çalışıyoruz ne bağlı olarak. Hakem muhtemelen varsayılan seçenek olacak - "" işlem herhangi bir kod sararak bir davranışa (dosync ...) STM blok. normal uygulamak için izin verir

  6. Seçme hakkı genel web çerçeve - Clojure var epeyce zaten ama ben ... şiddetle tavsiye Ring - bakın bu mükemmel video "One Ring To Bind Them" artı ya da Fleet Enlive Hiccup bağlı şablon felsefe. Daha sonra bu Sunum Katmanı yazmak için kullanın (fonksiyonlar gibi "uygun bir HTML parçasını içine bu alışveriş sepeti") çevirmek

  7. Son olarak, uygulama yukarıdaki araçları kullanarak yazma. Eğer yukarıdaki adımları doğru yaptıysanız, o zaman bu aslında çok küçük demirbaş ile çeşitli bileşenleri uygun bileşimi ile tüm uygulama inşa etmek mümkün olacak, çünkü bu kolay kısmı olacak.

Bu genel olarak kodunuzu bağımlılıkları sırasını teşkil ettiğinden sorun saldırırdım o sıra kabaca, ve dolayısıyla bir "yukarı" geliştirme çabası. alt için uygundur Ama iyi çevik / yinelemeli tarzı tabii ki muhtemelen gerektiği gibi öne erken kanıtlanabilir end bir ürün için kendinizi iterek ve sonra önceki adımları geri atlama işlevselliğini genişletmek için oldukça sık bulmak ya da yeniden Düzenle.

p.s. Eğer yukarıdaki yöntemi takip ederseniz, kaç Java 50.000 hatları işlevselliğini maçı alır duymak beni çok heyecanlandırır

GüncellemeBu yazı ilk olarak/kütüphaneler ortaya çıkmıştır fazladan birkaç araç yazıldığından bu yana "kontrol gerekir" kategori:

  • Noir Yüzük üstüne inşa web çerçeve.
  • Korma - SQL veritabanlarına erişmek için çok güzel bir DSL.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Trulia

    Trulia

    29 Kasım 2006