ปัจจัยใดที่ควรพิจารณาเมื่อเลือกรันไทม์ / ภาษาสำหรับแอพพลิเคชันเดสก์ท็อป Windows


10

ผู้ใช้ของฉันทุกคนมี Windows บางคนใช้ Linux หรือ Mac แต่หากใช้โดยทั่วไปจะสามารถใช้บางอย่างเช่น Mono, Wine, Parallels หรือดูอัลบูต

ทีมพัฒนาของฉัน (รวมถึงตัวฉันเอง) มีประสบการณ์มากมายทั้งในการเขียนแอปพลิเคชัน Swing ใน Java และ Windows Forms ใน C # "กว้างขวาง" หมายถึงเราได้พัฒนาและส่งมอบแอปพลิเคชันสามรายการทั้งในช่วงเวลาทำงาน แอปพลิเคชันเป็นแอปพลิเคชันการวิเคราะห์ทางเทคนิคดังนั้นจึงไม่ค่อยมีการโต้ตอบกับฐานข้อมูล แต่เน้นหนักใน UI ที่กำหนดเองและขนาดชุดข้อมูล

เรากำลังมาถึงจุดที่เราต้องการตัดสินใจอย่างแท้จริงว่าจะให้แพลตฟอร์มใดให้ความสำคัญต่อจากนี้ไปเพราะมันจะกลายเป็นภาระที่ให้การสนับสนุนทั้งคู่ (ถ้าคุณทำงานใน Swing มาครึ่งปีแล้ว เพื่อทำความคุ้นเคยกับ Windows Forms อีกครั้งและวิธีอื่น ๆ ) และเราต้องการให้ทุกคนในทีมของเรามีความสามารถในการทำงานกับแอปพลิเคชันทั้งหมดของเรา

  • โดยทั่วไปแล้ว Windows Forms จะใช้งานได้น้อยลงในการสร้างแอปพลิเคชัน Windows ที่เป็นที่รู้จัก ไม่มีการควบคุมสกินและการปรับแต่งที่กำหนดเองในจาวาในช่วงหลายปีที่ผ่านมา ในขณะเดียวกันเราไม่เคยมีลูกค้าที่ไม่สามารถใช้แอปพลิเคชัน Swing ได้
  • Java เคยมีระบบนิเวศที่สมบูรณ์ยิ่งขึ้นในแง่ของห้องสมุดและเครื่องมือสร้างอัตโนมัติ แต่มันเปลี่ยนไปอย่างรวดเร็ว (Java ไม่ลดลงมันเป็นมากกว่าที่. NET กำลังติดตาม)
  • สำหรับกรณีที่หายากที่ต้องการหลายแพลตฟอร์ม Java ชนะ. NET ลงมือ Mono นั้นยอดเยี่ยม แต่ก็ยังใช้ได้มากกว่า Java

ถ้าเราเลือก. NET เราสามารถเริ่มโฟกัสที่ WPF แต่เริ่มใช้ F # หากเราเลือก Java เราสามารถเริ่มต้นมุ่งเน้นไปที่ RCP แต่ก็เริ่มใช้ Scala ได้เช่นกัน

มีใครต้องตัดสินใจคล้ายกันไหม? ถ้าเป็นอย่างนั้นมันคืออะไรและอะไรที่มีอิทธิพลกับคุณมากที่สุด? สิ่งที่ฉันกังวลมากที่สุด?

(โปรดทราบว่า: มีคำถามที่คล้ายกันบางประการเกี่ยวกับโปรแกรมเมอร์อยู่แล้ว แต่พวกเขาก็ไม่มีความคิดสร้างสรรค์หรืออยู่ในมุมที่ต่างออกไป)


2
จากส่วนสำคัญของการอ่านฉันเชื่อว่าชื่อคำถามควรเป็น"ฉันควรคำนึงถึงปัจจัยอะไรบ้างเมื่อเลือกรันไทม์ / ภาษาสำหรับแอปพลิเคชัน Windows Desktop" เน้นที่การตัดสินใจด้านคำถามของคุณ นั่นง่ายกว่าที่จะตอบและติดเชื้อน้อยกว่า "ฉันควรใช้อะไรดี" - คำถามประเภทนี้ชื่อดูเหมือนจะบอกเป็นนัย
Spoike

@Spoike จุดที่ดีฉันอัปเดตชื่อ (ทำให้สั้นลงเล็กน้อย)
Deckard

1
อาจจะเป็นลิงค์นี้มีบางอย่างเกี่ยวกับอนาคตของ Windows ซึ่งเป็นสิ่งสำคัญมากสำหรับคุณ IMHO- zdnet.com/blog/microsoft/…
Gulshan

การบังคับให้ผู้ใช้ Mac ติดตั้ง Wine และเรียกใช้แอพ Windows เหมือนกับการทรมาน
rightfold

คำตอบ:


7

เราไปหา Java (Swing) บวกกับชิ้นส่วนพื้นเมืองผ่าน JNI ในขณะที่ความต้องการเชิงพาณิชย์สำหรับความหลากหลายทางธุรกิจอาจลดลงในวันนี้สถานการณ์อาจแตกต่างกันไปใน 5 ปีและวงจรชีวิตของแอพ ไฟล์ต้นฉบับลงวันที่ 1991) อย่างที่คุณเขียน, Java ทุบตี. NET ลงมือในสภาพแวดล้อมที่ไม่ใช่ Windows และถ้าเราจำเป็นต้องเปลี่ยนจาก Windows มันเป็นเพียงเรื่องของการรวบรวมชิ้นส่วนพื้นเมืองบางส่วนอาจปรับแต่งรูปลักษณ์ GUI และตรวจสอบว่า ทุกอย่างทำงานได้

หากคุณแน่ใจว่าคุณเป็น Windows เท่านั้นและแอปของคุณจะมีชีวิตอยู่เพียงไม่กี่ปีอาจเป็นที่ต้องการของ. NET ซึ่งจะมีลักษณะและมีลักษณะเหมือนแอพทั่วไปมากขึ้นเพราะเป็นเช่นนั้น แต่เป็นการลงทุนระยะยาวฉันวางใจ Java มากขึ้น สวิงอาจดูน้อยกว่าที่สมบูรณ์แบบเล็กน้อยเวลาเริ่มต้นอาจนานกว่านั้นทุกอย่างค่อนข้างดีย่อยเนื่องจากเลเยอร์ abstraction ที่มีหลายแพลตฟอร์ม แต่อย่างน้อยมันก็แค่ "ใช้งานได้"


2
แอป. NET เป็นแอพ Windows ดั้งเดิมมากกว่า Java อย่างไร
Rei Miyasaka

@Rei: ใน. NET Framework นั้นมีให้สำหรับ Windows เท่านั้น แน่นอนว่ามีขาวดำ แต่มันก็ล้าหลังอยู่เสมอและในอนาคตอนาคตของมันก็คือไม่แน่นอน
Tamás Szelei

1
@ Tamásนั่นเป็นเรื่องที่แตกต่างอย่างสิ้นเชิงและไม่สำคัญ นอกเหนือจากรหัสหลายไบต์แรกใน. exes ที่พิมพ์ "โปรแกรมนี้ไม่สามารถเรียกใช้ในโหมด DOS ได้" โปรแกรมยังคงเป็นรหัสไบต์ทั้งหมด ไลบรารี Java นั้นเป็นภาษาดั้งเดิมของ Windows เช่นเดียวกับ. NET แม้ว่าจะมีการย้อนกลับอาจไม่เป็นจริงเนื่องจากขาดการนำไปใช้งาน
Rei Miyasaka

4

สิ่งที่คุณอาจต้องพิจารณาคือโครงการ IKVM ที่อนุญาตให้คุณใช้รหัส Java ในโลก. NET จากนั้นคุณสามารถได้รับประโยชน์จากแบ็กเอนด์ Java ในขณะที่ - สำหรับความเข้าใจของฉัน - คุณสามารถมี frontlayer บางใน Swing หรือ WinForms

http://www.ikvm.net/

ฉันได้ยินมาว่ามีคนอื่นใช้สิ่งนี้เพื่อใช้ไลบรารีการเชื่อมต่อโอเพนซอร์สที่เขียนด้วยภาษาจาวาจาก. NET แทนที่จะต้องใช้เวอร์ชัน.


3

มีทรัพยากรใน MSDN ที่อาจเป็นประโยชน์กับคุณเป็น: http://msdn.microsoft.com/en-us/gg715299.aspx

หากคุณไปที่ด้านล่างของหน้าคุณจะพบเอกสารสีขาวจำนวนมากที่เปรียบเทียบ Java และ. NET conceptually แน่นอนเนื่องจากอยู่ใน MSDN มันมีอคติต่อ. NET แต่ทรัพยากรยังคงมีประโยชน์มาก


1

ฉันเคยคิดมาบ้างแล้วและฉันก็พบว่าคำตอบนั้นขึ้นอยู่กับประเภทของโครงการและสิ่งที่คุณคาดหวังได้

บางครั้งการสร้าง One Codebase เพื่อให้บริการทุกแพลตฟอร์มเป็นสิ่งที่ดี - คุณได้รับความสอดคล้องของ UI ในระดับหนึ่งโดยมีรหัสโดยรวมน้อยลง ฉันคิดว่าข้อดีและข้อเสียนั้นชัดเจนดังนั้นฉันจะข้ามไป

มีบางครั้งที่การเขียนโค๊ดฐาน 2 แบบนั้นดีกว่า ตัวอย่างเช่นหากการเขียนแอปของคุณใน WPF นั้นสวยงามสำหรับ. NET และเขียนไว้ว่า Cocoa นั้นสวยงามสำหรับ Mac OS รหัสผลลัพธ์อาจเล็กกว่าการใช้พูด Java หรือ Mono (ซึ่งไม่มี WPF) ในกรณีนี้คุณอาจได้ผลลัพธ์ที่ดีขึ้นโดยใช้รหัสน้อยลง

การพิจารณาขั้นสุดท้ายอาจทำให้แอปของคุณเป็นแอปพลิเคชัน HTML5 หรือแม้กระทั่งส่วนขยายของ Chrome แต่นั่นอาจเป็นฟิลด์ซ้ายเกินไป


1

คุณเคยพิจารณาSilverlightไหม? มันอาจเป็นทางเลือกที่ดีสำหรับการสร้างแอพพลิเคชั่น Windows Desktop (จาก SL4 +) และทำงานได้ดีบน Mac


SL เกือบจะตายแล้ว ..
klm_

Microsoft ไม่คิดอย่างนั้น โดยส่วนตัวฉันคิดว่า html5 เป็นตัวเลือกแรกสำหรับเว็บแอป แต่ SL ฝั่งไคลเอ็นต์อาจเป็น tecnology ที่ดี
ADIMO

ฉันจะใช้ HTML5 ด้วยเพราะรองรับโดย W3O Silverlight อยู่ในการแข่งขันกับ HTML5 และถ้ามันไม่ได้ทำช่องมันจะตายฉันคิดว่า
klm_

1

ในฐานะที่เป็นนักพัฒนา Java เต็มเวลาผมสามารถบอกคุณได้ว่าในขณะที่ข้ามแพลตฟอร์มกันเป็นที่น่าตื่นตาตื่นใจแต่ละคนและทุกบูรณาพื้นเมืองนรก

ฉันมักจะมีปัญหามากมายและบางครั้งก็ล้มเหลวบนพื้นดินนี้ คุณอาจไม่ต้องการมัน แต่บางครั้งฉันก็สะดุดและมักจะเจ็บ

  • การรวมเข้ากับ COM เป็นความเจ็บปวดและบางครั้งก็เป็นไปไม่ได้ที่ COM + (เสียเวลาหลายสัปดาห์พยายามที่จะให้มันทำงานร่วมกับ Windows Tablet API ได้)
  • การโต้ตอบกับฮาร์ดแวร์อาจส่งผลเสีย บางครั้ง API มีให้บริการในแพลตฟอร์มเดียวเท่านั้น (เช่นการรวมกล้อง / สแกนเนอร์)
  • การโต้ตอบกับแอปพลิเคชันในพื้นที่อาจทำให้คุณเจ็บปวดได้เช่นกัน ฉันพูดถึงอาการปวด COM หรือไม่? อีกวิธีหนึ่ง (ที่เราใช้จริง ๆ ) ก็คือการสร้างและเรียกใช้สคริปต์ VBS ที่เรียกใช้แอปพลิเคชัน Windows เช่น MapPoint หรือแอปแผนที่ที่เป็นกรรมสิทธิ์และป้อนข้อมูลด้วย
  • การรวมการติดตั้งและเดสก์ท็อป (ทางลัดตัวถอนการติดตั้งเมนูเริ่ม) อาจส่งผลเสียเช่นกัน เว็บสตาร์ทไม่น่าเชื่อถือมาก ทางเลือกอาจเสียค่าใช้จ่ายอย่างมากหรือขาดคุณสมบัติบางอย่าง (เช่นการกระจายการอัปเดต)

อย่าเข้าใจฉันผิด ฉันเป็นผู้พัฒนา Java และไม่ได้หมายถึงการจุดไฟ ฉันก็แค่บอกว่าถ้าคุณสงสัยว่าคุณจะต้องใด ๆ ข้างต้นก็สามารถทำร้ายและคุณอาจจะดีกว่ากับสุทธิ อย่างน้อยก็เป็นข้อโต้แย้งที่คุณควรคำนึงถึง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.