Birden çok platformu hedefleyen uygulamalar geliştirmek için hangi yaklaşım izlenecek?


9

Birden çok platformu hedefleyen uygulamalar için temel olarak iki geliştirme yaklaşımı görüyorum.

  • JAVA benzeri bir geliştirme platformuna gidin. Bir kod çözümüne sahip olun ve ara çalışma zamanının farklı platformları işlemesine izin verin. Herhangi bir platformda bir şeyler ters giderse, kodu biraz değiştirin. Ama herkes için aynı kalsın.

  • Çekirdek mantık ve kullanıcı arabirimini ayıran modüler kod oluşturun. Aynı temel kütüphaneleri çağıracak ilgili platformlar için ayrı kullanıcı arayüzleri geliştirin. Uygulamayı hedef platformların her biri için ayrı ayrı oluşturun.

Peki hangisini takip edecek? Biliyorum, cevap " Ona bağlı " ile başlayacak . Ancak bu yaklaşımlar ve bunlardan herhangi birini seçmek için düşünülmesi gereken faktörler hakkındaki görüşlerinizi duymak istiyorum.


2
Bu soruya gelince, "buna bağlıdır" kullanmadan cevap vermenin bir yolu yoktur. Aklınızdaki gerçek platformlar gibi birçok faktöre bağlıdır, tek başına masaüstü uygulaması mı planlıyorsunuz veya bazı web hizmetlerini kullanmayı mı planlıyorsunuz, kullanıcı arayüzü için planlarınız nelerdir (her platform için aynı veya çeşitli?) Ve yakında. Qt veya Gtk geliştirme modelinin ilk model için düşüp düşmediğini düşünüyor musunuz? Net ve Mono ne olacak? Devam edeyim mi...?
Paweł Dyda

@Gulshan Üzgünüm, açık bir soru - bunun bir web uygulaması olamamasının ve / veya Adobe Air gibi bir şeyle yapılmamasının bir nedeni var mı?
jellyfishtree

Bu site daha öznel sorular ve cevaplar içindir, ancak kabul nedenleri de olabilir. Sadece birlikte oynadığınızı hissettiriyor. Yanıtlanmamış soruları değil, son zamanlarda gönderilen soruları arama eğilimindeyim.
JeffO

Yanıtlar:


3

Mevcut Oracle / Apache / Google kavgaları bir yana, bu amaçla JVM'yi yenmek hala zor. Çoğu platformda gerçekten çok kaliteli, evrensel ve aralarından seçim yapabileceğiniz çok sayıda diliniz var (Java, Clojure, Scala vb.). Tek bir makine mimarisini (VM) hedeflemenize ve belirli son kullanıcı donanımı hakkında çok fazla endişelenmenize izin vermez.

Bununla birlikte, bunun için uygun olmayabileceği belirli uygulama türleri vardır: ağır grafik / video işleme gibi düşük seviyeli ağ akla gelir.


2

HTML5 için gidin. HTML5 tarayıcısı olan herhangi bir platform uygulamanızı çalıştırabilir. HTML5 henüz büyük bir süre için hazır olmasa da, Web uygulaması yaklaşımıdır.


2
Tam özellikli HTML5 tarayıcıları yoktur.
Craig

2

Audacity ses editöründe çapraz platform kütüphanemiz olarak wxWidgets kullanıyoruz. C kütüphanelerine bağlanmamız gerektiğinden ve hız ve düşük seviyeli erişime ihtiyacımız olduğundan JVM yaklaşımı bizim için işe yaramaz. GUI kodu tüm platformlarda% 95 aynıdır. Küçük varyasyonlar için #ifdefs kullanıyoruz. Bununla birlikte, üç platformun her birinde (Mac, Windows Linux) çalışan bir geliştiriciye sahip olmanın gerekli olduğunu düşünüyoruz, çünkü çapraz platform kütüphanesini kullanarak bile bir makinede bir değişikliğin diğerinde işleri kırması çok kolay.

İhtiyacınız olan performansı elde edebiliyorsanız JVM'ye gidin. Eğer yapamıyorsanız, QT veya wxWidgets kullanın ve güzel görünmesi için daha az iş olduğundan wxWidgets üzerinden QT öneririm.


1
+1 "her platformda bir geliştiricinin çalışması için gereklidir". Tek seferde yalnızca bir platform için geliştirirseniz, platformlar arası projeler hızla tek bir platform haline gelir.
AShelly

2

Gerçek zamanlı bir geliştirici olarak, 2'ye benzer bir seçeneği başarıyla kullandım - çekirdek mantık tarafından kullanılan ortak bir API ile platforma özgü ayrı modüller. Ancak, yaptığım hiçbir şeyin bir UI'si yoktu - ağ oluşturma, ses, veri akışı - bu durumda platforma özgü düşük seviye donanım arayüzüdür.

Bunu birkaç nedenden dolayı yaptım:

1) Her platformda optimum performans elde etmek için

2) Sadece 1 platformda sunulan özelliklerden yararlanmak

3) (J) Bazı platformlar için VM'ler yoktu (gömülü sistemler, oyun konsolları ...)


2

Sizin için neyin önemli olduğuna bağlıdır :)

Yaklaşık 10 yıl önce bir platformlar arası Mac / Windows uygulaması için bu seçimle karşı karşıya kaldığımızda, çeşitli çapraz platform seçeneklerine - Java, Qt, wxWidgets vb.) İyi baktık. kullanıcı arayüzü bizim için gerçekten önemliydi ve "platformlar arası" uygulamaların tümü tehlikeye atıldı. Mermi ısırdık ve her platform için özel bir kullanıcı arayüzü (Mac için PowerPlant ve Windows'ta MFC ile yazılmış) ile kendi platformlar arası çekirdeğimizi oluşturduk. Zamanla bu konuda oldukça iyiyiz ve "çapraz platform" kısmı kullanıcı arayüzünden ödün vermeden kalınlaştı.

Şimdi yeni bir proje için bu karara tekrar bakıyoruz. Şimdi seçeneklere baktığımda, muhtemelen Qt ile giderdim - ücretsiz ve gerçekten güzel olgunlaşıyor gibi görünüyor. Java bir seçenek olabilir, ancak performans isabetini gerçekten alamayız (3D görüntü işleme yapıyoruz).

Kullanıcı arayüzü sizin için gerçekten önemliyse, Qt gibi bir şey kullansanız da kendi başınıza döndürürseniz, her platformda doğru görünen şeyleri elde etmek için oldukça fazla zaman harcamanız gerektiğinden şüpheleniyorum. Kullanıcıların daha az cilalı bir kullanıcı arayüzünü daha fazla kabul edebileceği dahili veya uzman bir uygulama için, iyi olabilir!


1

Herkes Java'nın “çapraz platform” olması gibi diller hakkında büyük bir tartışma yaratır, ancak gerçekten konuştukları şey bir kez derleyip her yerde çalışabilmenizdir. Java (veya C # / mono) gibi bir dilde bile, bazı alanlarda işletim sistemine özgü ayrıntılarla başa çıkmak için soyutlama katmanlarına ihtiyacınız olacaktır.

C ++ ve aslında çoğu dil çapraz platformdur, her platformu hedeflemek için derlemeniz yeterlidir.

Anahtar, araçlar / diller yerine süreçtir:

  1. Tüm hedef platformlar için birim testlerini oluşturan ve çalıştıran entegre bir oluşturma işleminiz olduğundan emin olun .
  2. Kodu geliştirmeden önce her geliştiricinin tüm hedef platformlarda test edildiğinden emin olun - Bu, geliştiricinin uygun sayıda makineye / vms'ye erişebildiğinden emin olmak anlamına gelir.
  3. İyi soyut. Yerli API'leri çağıran her şeyi soyutlayın. Bu çağrıları saran kütüphaneler yazın.
  4. Sadece en düşük ortak paydaya hitap eden oldukça basit formlar arayüzünün ötesinde bir şey yapıyorsanız, GUI kodunun platformlar arası olmadığını kabul edin. GUI / sunum katmanınızı soyutlayın ve her platform için ayrı ayrı kodlayın. Evet, düz uygulamalar için iyi olan çapraz platform GUI araç setleri vardır, ancak daha gelişmiş bir şey yapıyorsanız, yerel platform yeteneklerini kodlamak isteyeceksiniz.

Hangi dil / araç seti / çerçeve kullanırsanız kullanın, bu adımlar aynıdır.


1

Web'den Yararlanın!

Ciddi, paranın karşılığını en patlama istiyorsanız, bir web uygulaması yazın.

Neden?

  • Web istemcileri genellikle çok fazla PC gücü gerektirmez.
  • Web istemcileri HER YERDE. Sadece PC / MAC / Linux değil, telefonlarda, mobil cihazlarda ve daha fazlasında.
  • Kullanıcılar için indirmek için ekstra bir şey yok! (Tipik olarak, süslü bir şey istemiyorsanız ve Flash veya Silverlight kullanmıyorsanız)
  • Tüm ortak bileşenler sunucu tarafındadır ve Java, .NET, PHP veya mevcut bileşenlerin bir demetini oluşturabilir. Müşteri umursamaz!

Bahsettiğiniz iki yaklaşım bile çok benzer. Web tarayıcısı, temeldeki birden çok mimari için HTML oluşturur. Benzer şekilde, JVM, Java kodunu temeldeki donanım için anlamlı bir şekilde yorumlar. Ancak web'in daha geniş bir müşteri tabanı var!


0

Mono ile oldukça şanslıydım . Windows makineleri için Linux makineleri için yaptığım kodun aynısını yazabilirim ve çoğunlukla her ikisinde de çalışır. Ve C # ve Winforms'da zaten bildiğim becerileri kullanabilirim.


Hangi kullanıcı arayüzünü kullanıyorsunuz, yoksa sunucu tabanlı uygulamalar için mi kastediyorsunuz? Meraklıyım çünkü Winforms kullanarak çalışan bir uygulamam var ve Mono'ya taşındım ve güzel, ama "gerçek" winformlar gibi olmak için BÜYÜK bir iş alacaktı. Belki GTK # daha iyidir? MonoDevelop güzel, ama belki biraz tıknaz.
Dan Rosenstark

Mono ile her iki yaklaşım da takip edilebilir. Yar gibi, hangisini takip ediyorsunuz ve neden? Soru bu.
Gulshan

Evet, platformlar arasında mükemmel form sadakati aradığınızı fark etmedim. Bunu GTK # ile alabilirsiniz, ancak bunu "güzel" pahasına alacaksınız, çünkü bunun gibi ortak bir araç takımı "en düşük ortak payda" için gitmek zorundadır. StartClass0830 ile anlaşmaya meyilliyim: HTML5 çok iş olurdu, ancak bununla gerçekten harika platformlar arası şeyler yapabilirsiniz.
Robert Harvey

0

Önce bir kavram kanıtı yapın.

Oldukça karmaşık bir uygulama ise, bir kavram kanıtını ortaya çıkarmak, hangi dil özelliklerine ihtiyacınız olduğu ve çerçeve veya üçüncü taraf kitaplıklarından yararlanmak için hangi alanlara ihtiyacınız olacağına dair bir fikir verecektir.

İhtiyacınız olan dil özellikleri ve kütüphaneler, hangi dili seçeceğinizi (ve böylece platformlar arası desteğe nasıl yaklaşacağınızı) belirleyecektir.


0

Bir masaüstü uygulamasıyla başlayarak, 15 yıl önce Java'nın henüz bebeklik döneminde olduğu ve bu tür uygulamaları oluşturmaya hazır olmadığı bir sistem oluşturdum. C ++ 'da bir çekirdeğe ihtiyacım olduğunu biliyordum ve başlangıçta çapraz platform olacak şekilde tasarladım, boyut türleri (örneğin int veya long yerine int32) dahil, böylece Mac, Windows ve UNIX (Linux öncesi) üzerinde çalışabilir gün).

İyi bir platformlar arası kullanıcı arayüzü ortamı aramaya çalıştığımda, XVT dahil olmak üzere birkaç tane vardı. XVT için eğitimden geçtim ve gerçek bir uygulama oluşturmaya başladığımda, platformda (Mac'ten başlayarak) temiz, doğal bir görünüm ve his oluşturamayacağımı fark ettim. Bu fikirden vazgeçtim ve taşınabilir çekirdeğin üzerine yerel bir Mac (PowerPlant) kullanıcı arayüzü oluşturdum.

Birkaç yıl sonra Windows'a geçtik (MFC'de kullanıcı arayüzü). İkinci kez bir kullanıcı arayüzü oluşturmak daha hızlıydı, bir Mac ve Windows kullanıcı arayüzünü kısa bir süre paralel olarak tuttuk ve daha sonra Windows'a geçtik. Çekirdek daha sonra sunucu tabanlı hesaplamalar yapmamıza izin vermek için UNIX ve Linux'un çeşitli tatlarına taşındı. Çekirdek 64-bit hazır hale getirirken bazı ayarlarla iyi bir bağlantı noktası yaptı.

Şimdi bir Mac kullanmaya geri döndüm ve Mac'e geri dönebilmeyi diliyorum, ancak uygulamanın boyutu ve karmaşıklığı bunu zor bir seçim haline getiriyor. Bu uygulamanın çoğunun bir masaüstü uygulaması olması hala mantıklı - bir CAD ortamı gibi. Ancak, UI'yi platforma özgü bir C / C ++ dilinde oluşturmak (ve MFC tabanlı bir UI'yi korumaya devam etmek yerine), birden çok platformda çalışabilmesi için Java'daki tüm yığını yeniden yazmaya eğilimliyim.

Java olmayan bir çekirdeği çalıştırmak için hala nedenler olabilir, örneğin C ++ bizim yaptığımız gibi. Ama bunun gerçekten gerekli olup olmadığını görmek için erken performans testleri yapmak isterdim. Ve web hizmetleri aracılığıyla çekirdeğe bağlı bir web uygulaması olarak inşa edip edemeyeceğimi görmek için kullanıcı arayüzüme dikkatle bakacağım, böylece bir dizi müşterim olabilir - masaüstü uygulamaları, mobil uygulamalar, web uygulamaları, vb. C veya C ++ 'da bir parçaya ihtiyacım olursa, Java katmanı altında yazılabilir mi? Yoksa bir web servisi olarak mı?

Başka bir düşünce - uygulamanız ne kadar sürecek? Ne kadar karmaşık olacak? Bununla ilgili herhangi bir fikriniz varsa, kullandığınız UI kitaplıklarının uzun ömürlü olabileceğini ve zaman içinde insanların onları korumasına yardımcı olma yeteneğinizi göz önünde bulundurun. Bunu şimdi düşünmek zor olabilir ama düşünmeye değer.

- Alex


JVM'nin çalışma zamanı kitaplığı geriye dönük uyumluluğu açısından çok kararlı olduğu kanıtlanmıştır. Bu senaryo için çok uygun olurdu ...

0

Bir web uygulaması yapabilirseniz, bir web uygulaması yapın. ExtJS gibi araç kitlerini kullanarak , iyi görünümlü GUI benzeri çapraz tarayıcı uyumlu kullanıcı arayüzleri yapmak nispeten kolaydır.

Aksi takdirde, Java veya QT + C ++ veya C + Wx herkes için tek bir kaynağa sahip olmak olası seçeneklerdir.

Uygulamanın her hedef platformda yerel görünmesini ve hissetmesini istiyorsanız ikinci yaklaşımınız uygundur. Yerel Mac uygulamaları, yerel Windows uygulamalarından farklı görünüyor ve hissediyor, sadece başka bir kaplama ve tuş takımı kullanmak bunu kapsamak için yeterli olmayacak.

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.