Şu anda .NET ve Java arasındaki projeniz için ne seçersiniz? [kapalı]


13

Yeni bir projeye başlıyorsunuz ve aralarından seçim yapabileceğiniz bu iki teknolojiye sahipsiniz, Java ve .NET. Çalıştığınız proje, iki teknoloji arasında seçim yapmayı kolaylaştıracak özelliklere sahip değildir (örneğin, .NET buna ihtiyacım var ve Java yok) ve her ikisi de sizin için iyi çalışmalıdır (yalnızca siz tabii ki birine ihtiyacınız var). Dikkate almak:

  • Verim
  • Mevcut araçlar (üçüncü taraf araçlar bile)
  • Çapraz platform uyumluluğu
  • Kütüphaneler (özellikle 3. taraf kütüphaneler)
  • Maliyet (Oracle, Java'dan para kazanmaya çalışıyor gibi görünüyor)
  • Geliştirme süreci (En Kolay / En Hızlı)

Ayrıca Linux'un ana platformunuz olmadığını, ancak projenizi Linux / MacO'lara da taşımak istediğinizi unutmayın. Oracle ve Java topluluğunun etrafında dönen sorunu ve Mono ve Java'nın sınırlamalarını da kesinlikle aklınızda bulundurmalısınız. Her ikisinde de deneyime sahip kişilerin, seçecekleri neden ve nedenleri hakkında bir genel bakış ve kendi öznel görüşlerini vermeleri çok takdir edilecektir.

java  .net  mono 

Bu soruyu etkili bir şekilde cevaplamak için gereksinimler hakkında yeterli bilgi yoktur.
kırmızı kir

3
Mono bir acıdır (örn. Zaman alıcı). Temel bir WinForm tasarımcısı bile yok.
İş

@Job aslında MonoDevelop WinForms henüz açık kaynak olmadığından, GTK # için bir GUI tasarımcısı vardır.
Mahmoud Hossam

Evet, ama 3. taraf kütüphaneleri olan Mono nasıl? "Sadece çalışıyorlar mı?" Ve (belki de en önemlisi) Mono ile kullanırsanız satıcılar destek sağlıyor mu?
TMN

Yanıtlar:


26

En önemli (değiştir: teknik) karar:

  • Bu noktada, gelecekteki dağıtım platformunuz olarak Windows'u kullanmayı% 100 taahhüt edecek misiniz?

Hayır ise, Java ile gitmelisiniz.


Mono sonucu genellikle "Evet, .NET çapraz platformdur" demek için kullanılır. Bu iddia ne kadar geçerli? Mono'nun buna karşı geliştirdiğiniz bir seçenek IFF olmasıydı !

Sen olamaz .NET-uygulamalar kutunun dışında çalışmasını bekliyoruz.


@Basic bunun bir cevaptan çok bir yorum olduğunu söyledi. Kesin olmak gerekirse , listenin en üstüne çıkmak için bir soru olduğunu düşünüyorum , çünkü bu belki de .NET ile uğraşırken yapmanız gereken en önemli teknik karardır. Basic'in Mono'ya karşı test edeceğini söylediği gibi, bu yolun dışındadır ve Java ve .NET'in eşit derecede uygun olduğunu düşünürdüm. .NET ile çok az deneyimim var, ancak Java'da biraz.

  • Performans - Java oldukça iyi çalışır, ancak yine de biraz başlatma süresine sahiptir. Bunun nedeni, JVM'nin başlatıldığında sıfırdan başlaması ve çalışma zamanı kitaplığı jar dosyasının rasgele erişiminin diskten okunması gerektiğinde oldukça yavaş olmasıdır. Son Java 6'larda, çalışma zamanı kitaplığı jar dosyalarını disk önbelleğinde tutmaya çalışan bir arka plan işlemi vardır, böylece gerektiğinde erişim hızlıdır.

  • Mevcut araçlar. Çok sayıda araç mevcuttur ve yüksek kaliteli Açık Kaynak olarak kullanılabilecek çok şey vardır. IBM'in çok gelişmiş araçları var, ancak onlar için de biraz para alıyorlar. Java dünyasındaki en iyi parçaları bir araya getirerek ve nelerin kullanılabilir olduğunu görmek için bunları düşük bir maliyetle erişilebilir hale getiren MyEclipse'e bakmak isteyebilirsiniz. Netbeans'in çok hoş bir GUI editörü var. JDeveloper güzel bir Swing hata ayıklayıcıya sahiptir. Sun 6 JDK, zaten çalışan programları analiz edebilen güzel bir giriş seviyesi profilcisi olan VisualVM'ye sahiptir (ki bu bir katil özelliktir).

  • Çapraz platform uyumluluğu. Çok iyi, mükemmel eğilimi. JVM çok, çok güvenilir ve öngörülebilir. Sorunlar yalnızca işletim sistemi farklılıkları dosya ayırıcıları, dosya adı büyük / küçük harfe duyarlılığı ve menü davranışı gibi durumlarda ortaya çıkar.

  • Kütüphaneler. Orada birçok ve birçoğu serbestçe kullanılabilir ve kullanılabilir, ama öncelikle dışı JVM dillerde yazılmış kod çekmek için oldukça zor olduğu için Java ile yazılmış bulunmaktadır.

  • Maliyet. Java temel olarak serbestçe kullanılabilir. Oracle'ın belirttiği şey, büyük olasılıkla JRocket'ten gelen elektrikli aletlerin bir bedeli olacağı. Ayrıca verilen desteğin ("Java for Business") bir ücret karşılığında geldiğini unutmayın. X86 dışı platformlar ölmekte olan bir türdür, ancak IBM'in çok sayıda vardır ve IBM onlar için mükemmel bir Java uygulaması sağlar. Bu, işletim sisteminin bir parçası olarak fiyatlandırılır - büyük olasılıkla daha iyi benimsenmesi için.

  • Gelişme süreci. Java ile çok fazla zaman uygun teknolojiyi araştırmak, seçmek ve öğrenmek için harcanır, ancak bu yapıldığında, geliştirilmesi oldukça hızlı olan birçok teknoloji olduğunu düşünüyorum. Java EE'nin en son sürümü, en az PHP sayfaları kadar hızlı yüklenebilen Facelets kullanarak çok güçlü web sayfaları yazmanızı sağlar.

Java veya .NET konusunda yetenekli değilseniz , size ve kuruluşunuza en aşina olduğunuz teknolojiyi seçerek zamandan ve paradan tasarruf edeceğinizi düşünüyorum .


14
Windows'ta yazdığınız Java programının başka bir yerde çalışacağını kim garanti eder? Bu garantiyi kırmak için sadece tek bir JNI çağrısı gerekir. Aynı sorun CLI için de geçerlidir - çapraz olmayan bir form API'sı kullanırsanız taşınabilirliği kaybedersiniz. Böylece, taşınabilirlik garantisini verebilecek tek kişi, hangi çerçeveyi kullanırsanız kullanın, programcı sizsiniz.
Mark H

3
@ Thorbjørn, mevcut iklimde Oracle'a güvenir misiniz?
radekg

12
1 Thorbjorn sen değilse% 100 bunu Windows'un kararlı olduğunu söyledi çünkü gerektiğini sen değil, Java ile gitmek gerekir Java ile gitmek. Ve katılıyorum - evet, Mono bir yedek olarak var, ancak mevcut planlarınız Windows'a bağlı değilse, kendinizi acıtan kurtarın ve diğer platformlarda çalışması amaçlanan teknolojiyle devam edin. Bunu bir .NET geliştiricisi ve .NET meraklısı olarak söylüyorum.
Carson63000

4
Gerçekten denedim "mono-there-on-other" -downvoters herhangi olup olmadığını merak ediyordum ...

4
"Java temelde serbestçe kullanılabilir (...) elektrikli el aletleri pahasına olacak (...) uzatılmış destek de bir bedeli var" . Aynı .NET için de aynı, değil mi?
Konamiman

19

Tamam, bunu parçalamaya çalışalım:

Dikkate almak:

Performans Araçları mevcut (3. taraf araçlar bile)

Hem Java hem de .NET platformlarında çok sayıda iyi performans test aracı vardır, Java alanında çoğu senaryo için yeterli olan ücretsiz açık kaynak araçlarının olduğunu biliyorum. .NET tarafı için konuşamam.

Çapraz platform uyumluluğu

Java'nın burada bir avantajı vardır - .NET'in bazı platformlarda çalışmasını sağlamak için Mono (veya benzeri) projesi gereklidir. Mono'nun% 100 kurşun geçirmez ve performanslı olduğundan emin değilim, umarım bir başkası gelebilir.

Kütüphaneler (özellikle 3. taraf kütüphaneler)

Her ikisinin de güçlü desteği var. Başlangıçta Java eko-sistemi yol açar (tam anlamıyla aklınıza gelebilecek her şey için ücretsiz bir açık kaynak kitaplığı var) ama .NET'in kesinlikle nerede olduğunu yakaladığını söyleyebilirim (kalıcılık için NHiberante, birim testi için NUnit iki temel olanı belirtmek için + daha fazla bir metrik kamyon yükü olduğundan eminim).

Maliyet (Oracle, Java'dan para kazanmaya çalışıyor gibi görünüyor)

Tüm şirketler bir dereceye kadar para kazanmaya çalışırlar, ancak Java söz konusu olduğunda ifadenizin biraz yanıltıcı olduğunu düşünüyorum. Java, sürüm 6 (OpenJDK projesi) itibariyle açık kaynaklıydı ve Oracle, Java'nın Sun'ın yaptığından daha fazla para kazanma eğilimi göstermedi. Yani evet onlar App sunucuları ve uzantıları JVM (özellikle yönetim uzantıları) satmak, ama çekirdek Java kendisi? Hayır ve asla olmayacaklar (bu pek çok kez kamuya açıklanmıştır).

Bence hem MS hem de Oracle, repsepctive platformlarıyla dolaylı gelir nedeniyle büyük fayda sağlıyor.

Toplam Sahip Olma Maliyeti (TCO)? Bunu kanıtlamanın bir yolu olmadığı için bu tartışmaya bile girmeyeceğim (programlama sonuçta yaratıcı bir insan faaliyetidir). Ben şahsen, çoğu durumda yukarıdan aşağıya ücretsiz bir açık kaynak yığını kullanabileceğiniz için Java tabanlı sistemlerin daha düşük bir başlangıç ​​maliyetine sahip olduğunu düşünüyorum. Bununla birlikte, büyük işletmeler destek sözleşmelerine sahip olmayı tercih ederler, böylece söz konusu faydayı geçersiz kılabilir.

Geliştirme süreci (En Kolay / En Hızlı)

Ne yapmaya çalıştığınıza bağlı! Şahsen, C # 'ın şu anda Java üzerinde temel dilde bazı ekstra özelliklere sahip olmasına rağmen, oldukça eşit olduklarını iddia ediyorum. Ancak JVM'deki (Groovy, Scala, Clojure vb.) (Java ile birden fazla çalıştırılabilir) dilde istediğiniz dil özelliklerinin tümüne sahip olabilirsiniz.

.NET bir süre web ön uç 'şeyler' oluşturmak için belirgin bir avantajı vardı (eğer olacaksa Hızlı Uygulama Geliştirme), ama sanırım JEE6 ve / veya Bahar ve diğer web / uygulama çerçeveleri bu boşluğu hemen hemen kapattı.

Ayrıca Linux'un ana platformunuz olmadığını, ancak projenizi Linux / MacO'lara da taşımak istediğinizi unutmayın. Oracle ve Java topluluğunun etrafında dönen sorunu ve Mono ve Java'nın sınırlamalarını da kesinlikle aklınızda bulundurmalısınız. Her ikisinde de deneyime sahip kişilerin, seçecekleri neden ve nedenleri hakkında bir genel bakış ve kendi öznel görüşlerini vermeleri çok takdir edilecektir.

Linux, UNIX ve özellikle Mac OS'ye bağlantı kurmak istiyorsanız, yukarıda belirtildiği gibi Java'nın bir kenarı vardır.

Umarım yardımcı olur!


4

Puan listenizi göz önünde bulundurarak, bölünürüm ve gerçekten ne yapmam gerektiğine bağlı olur.

.Net bu yönler için kazanır:

  • Verim
  • Geliştirme süreci (En Kolay / En Hızlı)

Java bu yönler için kazanır:

  • Çapraz platform uyumluluğu
  • Kütüphaneler (özellikle 3. taraf kütüphaneler)

Bu yönler için bir çizim:

  • Maliyet (Oracle, Java'dan para kazanmaya çalışıyor gibi görünüyor)
  • Mevcut araçlar (üçüncü taraf araçlar bile)

Net, tüm amaç ve amaçlar için tek bir platform teknolojisi yığınıdır. Evet, Mono var, ancak Mono Windows uygulamasıyla% 100 uyumlu olana kadar gerçek bir çapraz platform deneyimi sunmuyor. Çapraz platform desteği için güvenebileceğiniz tek alt küme, Silverlight'a sığacak olan şeydir.

Bununla birlikte, .Net daha iyi algılanan performansa sahiptir (gerçek ölçümler TBD). Kullanıcının gözünde, algılanan performans önemli olan tek şeydir. Son 12+ yıldır Java'da geliştirdikten ve son zamanlarda .Net yaptıktan sonra, platformun gücünü takdir edebilirim.

Öte yandan Java, aralarından seçim yapabileceğiniz çok daha zengin bir IDE'ye sahiptir ve bu üstün IDE'lerin maliyeti .Net varyasyonunun maliyetinden çok daha düşüktür. Öte yandan, profesyonel J2EE motorlarının maliyeti, geliştirme ortamı maliyetlerini kolayca gölgede bırakır. Net'te nikel ve ölüme ölüme dair bir algıya sahibim. Java'da, büyük maliyetler için geçici çözümler vardır - bu, geliştiricilerin ayarlanmasıyla kolayca telafi edilebilir. IDE dışında, önemli olan araçlar (profil oluşturma, kapsama alanı, vb.) İçin maliyetler eşittir.

Sonunda gerçekten ihtiyaca bağlıdır . Yine de Windows'ta konuşlandırılacaksam, .Net bir beyin değildir. Yalnızca Windows mağazası olan müşterilerim var. Eğer Unix üzerinde konuşlandırıyor veya hetergen sistemleri desteklemem gerekiyorsa, Java beyinsizdir. Hatta radikal olabilirim ve karışık bir teknoloji yığını önerebilirim. Sonuçta, istemcinin sunucunun Unix olmasını istemesi, bunu masaüstünde çalıştırdığı anlamına gelmez. Her uygulama en iyi bir web uygulamasında yapılmaz.


4

Performans - Eşit

Her iki platform da neredeyse tüm uygulamalar için son derece iyi performans gösteriyor.

Bunları birbirinden ayırmak için çok fazla değil, ancak öznel deneyimim, Java'nın uzun süre çalışan uygulamalar için hafif bir kenara sahip olmasına rağmen, .Net uygulama başlatma süresi için daha hızlı.

Mevcut araçlar (3. taraf araçlar bile) - Tartışılabilir

İhtiyacınız olan araçlara ve neye aşina olduğunuza bağlıdır.

Net kesinlikle Microsoft tarafından sağlanan bazı harika araçlara sahiptir. Öte yandan, Java dünyasında eşit derecede iyi araçlar vardır, örneğin Eclipse, IntelliJ ortamlarının Netbeans'i.

Çapraz platform uyumluluğu - Java win

Net temel olarak Microsoft platformlarına (Windows, Xbox vb.) Bağlıdır. Microsoft dışındaki platformlar için tam uygulamalar kullanılamaz .

Mono güzel, ancak tüm .Net kitaplıklarını desteklemediği için size tam bir platformlar arası yetenek sağlamaz (örneğin, tüm Windows GUI öğelerinin düzgün çalışmasını bekleyemezsiniz, bu nedenle, GTK # gibi bir platformlar arası araç seti, uygulamanızı farklı platformlarda çalıştıramazsınız)

Java gerçekten taşınabilir. Sadece dil değil, daha da önemlisi tüm Java kütüphaneleri taşınabilir. Saf Java kitaplıklarına (örn. GUI için Swing) bağlı kalmanızı sağlayarak, kodunuz bir Java çalışma zamanı ortamınızın olduğu her yerde çalışır.

Kütüphaneler (özellikle 3. taraf kütüphaneler) - Java win

Muhtemelen Java platformunun en iyi gücü, kütüphanelerin, özellikle açık kaynak kütüphanelerin geniş ekosistemidir. Bazı örnekler:

  • Tüm Apache kütüphaneleri ve araçları
  • Geniş Eclipse ekosistemindeki tüm kütüphaneler
  • Google tarafından katkıda bulunan / sürdürülen tüm kütüphaneler
  • JBoss ve Red Hat tarafından sağlanan tüm ilgili kurumsal araçlar

Maliyet (Oracle Java'yı deniyor ve para kazanmaya çalışıyor gibi görünüyor) - Açık kaynak koda giderseniz Java kazanır, aksi halde Çift.

Ücretsiz ve sizi herhangi bir tescilli platforma bağlamayan% 100 açık kaynaklı bir Java yığınına sahip olabilirsiniz. Bu% 100 ücretsizdir.

Alternatif olarak, IntelliJ IDEA'yı satın alabilir, Windows'ta Java çalıştırabilir ve özel bir veritabanı kullanabilirsiniz; bu durumda, tipik bir Microsoft .NET yığını ile hemen hemen aynı maliyetlidir.

Geliştirme süreci (En Kolay / En Hızlı) - Tartışılabilir

Bu büyük olasılıkla, geliştiricilerinizin platforma atfedilenlerden ziyade her platformla ilgili deneyimlerine bağlıdır.

.Net, Windows'ta basit GUI uygulamaları için sizi çok verimli hale getirebilecek bazı harika araçlara sahiptir. Bu şaşırtıcı değil. Net geliştirme için "tatlı nokta".

Öte yandan, sunucu tarafı geliştirme için Java yığınını tercih ederim. Maven gibi araçlarla ve tüm sürekli dağıtım / entegrasyon yetenekleriyle, sağlam sunucu tarafı uygulamaları için çok etkili bir geliştirme süreci oluşturabilirsiniz.

Dil açısından C #, Java'ya göre bazı verimlilik avantajlarına sahiptir. Ancak diğer yandan, bugünlerde Java platformunda gelişiyorsanız, trend Java'nın kendisini değil, Scala, Groovy veya Clojure gibi yeni JVM dillerinden birini kullanmaktır - bunu yaparsanız çok daha üretken olacaksınız. C # veya Java'dan daha fazla.


3

.Ağ

Bu soruyu öznel veya flamebaiting olmadan cevaplamak zor (aşağı indirileceğim hissine sahibim), ancak .Net yükselişte bir dil ve Java, yasal konulardan ötürü daha az popüler olmanın yanı sıra şaşkın görünüyor.

Ayrıca .net günümüzde çok çekirdekli ve çok dilli (Parallel.net) ve asenkron programlama (reaktif uzantılar) için mükemmel bir desteğe sahip çok daha uyumlu ve modern bir dildir, onsuz yaşayamayacağım LINQ'dan bahsetmiyorum. Net ayrıca bir dizi ücretsiz araca sahiptir, ancak Visual Studio Express, Sql Server Express, Web Matrix vb.

Java'nın bazı çok platformlu faydaları olduğu doğrudur. Geleneksel uygulamalar veya arka uç bileşenleri için yapabilen mono vb.

Çapraz platform gerçekten önemliyse başka bir seçenek gitmek Silverlight, ben şahsen silverlight "uygulamaları" meraklı değilim ama en azından çalışır.

Çapraz platform ağrı noktasıdır, kendinize gerçekten gerekli olup olmadığını sorun, en azından bu noktada.


Net'i tercih etmek kötü bir şey değil. Aslında çok beğendim. Şüphesiz, Java şu anda bir kimlik kriziyle karşı karşıya, ki bu bir utanç - bu platformu da seviyorum. Java'nın çapraz platform (+1) için geliştirilmiş sicilini kabul ettiğiniz için memnunum. Bazı istemciler Unix dağıtımını gerektirirken, diğerleri Windows dağıtımını gerektirir. Java millet her iki platforma da hizmet verebilir. Dedi ki, orada sadece bir sürü Windows istemcisi var.
Berin Loritsch

1

Organizasyonumuzda, bu noktada Java'yı seçerdik. Bunun nedeni basit: Java ekibimiz .NET ekibimizden daha büyük, daha deneyimli ve daha iyi bir araç (mevcut sistemlerin bakımında herhangi bir büyük yeni projeyi üstlenecek kaynaklardan yoksun oldukları için yeterince bağlı olan) .
Bununla birlikte, .NET'i kullanmak için acil nedenler olsaydı (örneğin, müşteri gereksinimleri, bazı müşteriler büyük bir .NET yazılımı tabanına sahip olabilir ve yeni sistemlerinin bu tabana sığmasını, bakımın kendisinin devralmasını vb.) kendi halkımızı özgür bırakamayacağımız işi yapmak için müteahhit kiralayın.
Her iki teknolojiyi de bir müşteri üzerinde en iyi çıkarlarına karşı zorlamam ve bazı müşteriler sistemi kurmaları için gereken yatırımlar nedeniyle (iç organizasyonlarından dolayı) birbirinden daha fazla yararlanıyor (yine, zaten bir müşterimiz var çalışan bir dizi .NET uygulaması var ve bunları destekleyecek personele sahip, onları işe almaya ve yanda bir Java uygulaması çalıştırmak için donanım ve yazılım lisansları almaya zorlamayacağız ve elbette bunun tersi Aslında bize bir istek olarak geldiyse, bunu yapmamalarını tavsiye ederiz).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.