كيف تختار الحلول المناسب لبرمجة مشاريع جافا؟

السلام عليكم،

من المعلوم في جافا أن هناك حلول كثيرة متشابهة لكل نوع من المشاريع، وقد يرد على المبرمج صعوبة الاختيار بين هذه الحلول لتقاربها، فماذا تختار لكلٍّ من أنواع المشاريع الآتية:

تطبيقات مكتبية: واجهات AWT، Swing,SWT (JFace), JavaFX

اطار تطوير مواقع: Spring, Grails, Play, JSF

إذا اخترت JSF فماذا أضفت: Primefaces, RichFaces, ICEFaces, OpenFaces, ADF أو غير ذلك

كيف اتصلت بقاعدة البيانات: JDBC, Hibernate, ORMLite...

كيف ترتب - حسب الأهمية- المعايير التي تقوم على أساسها بالاختيار، مثال:

1- مفتوح المصدر ومجاني

2- مستوى الدعم التقني المتوفر

3- سهولة التعلم والاستخدام

4- الشعبية الواسعة والمجتمع المتجاوب

أم غير ذلك...

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

عن نفسي:

Swing للتطبيقات المكتبية، هي أكثر استقرارا ومرفقة مع جافا إضافة إلى وجود الدعم الكافي من المصادر والدروس والأمثلة، اخترتها بعد أن جربت SWT/JFace لأحد المشاريع فكانت النتيجة تطبيق ذو واجهة طبيعية Native غير أن ذلك كان متعبا، أضف إلى ذلك أنك تحتاج إلى بعض تعديلات إذا كنت توزع على عدة أنظمة، وحجم المشروع صار أضخم. ربما لاحقا انتقل إلى JavaFX -كما تنصح بذلك Oracle نفسها- لكن اعتقد أن الوقت لا يزال مبكرا بعض الشيء لذلك.

لبرمجة المواقع أو تطبيقات ويب -هنا تتعقد الأمور أكثر-، والسبب هو دوما كثرة الاختيارات، في الواقع لا توجد هناك أية مشكلة، فكل الحلول -تقريبا- جيدة وتصلح لكثيرة من المشاريع -وبعضها أجود من غيرها- ، غاية ما في الأمر أننا نبحث عن أحسن إنتاجية بأقل تكلفة. اخترت التشكيلة JSF+Primefaces بعدما تنازلت عن Spring لأني وجدتها مكلفة مقارنة بما تقدمه من خلال مبدأ Dependcy Injection والإضافات، أعتقد أنها تصلح في حالة العمل على مشاريع كثيرة في آن واحد -وهو الحال في بعض الشركات والمجموعات التي تتكدس عليها المشاريع في وقت ضيق. لماذا JSF2 -وإن كان البعض يعتبرها "قديمة" نوعا ما- لأنها مبنية على معايير/مواصفات Specifications وبالتالي فهي توفر خيارات كثيرة Implementations وتضمن لها هذه المعايير زمنا من الاستقرار وتحميها من التعديلات السريعة من إصدار لآخر. بخصوص مكونات JSF جربت ICEFaces وRichFaces ووجدت Primefaces تتفوق بكثير من المميزات والجميع يؤكد ذلك:

ربما أجرب Grails لاحقا بحثا عن المزيد من الإنتاجية.

أتصل بقاعدة البيانات مستخدما ORMLite كطبقة خفيفة ومرنة وسهلة الاستخدام، تسمح بإرسال استعلامات مباشرة إذا اقتضى الأمر، جربت سابقا Hibernate فوجدتها متعبة وتضيف طبقة ملفات إعدادات XML سميكة تزيد من النفقات، أيضا جربت MyBatis في أحد المشاريع سابقا وهي كذلك تتطلب إعدادات كثيرة رغم أنها جِدّ مرنة.

أختار الحلول التي استخدمها بحسب عدة معايير وحسب كل مشروع، غير أني غالبا ما أميل إلى:

  • الحلول مفتوحة المصادر والمجانية

  • توفر الدعم التقني والوثائق والأمثلة وحجم المجتمع

  • تعدد الإمكانات والاستخدامات (أعتبر هذا معيار استراتيجي هام، خاصة منذ بروز برمجة الأجهزة الذكية)

  • خفة، كفاءة وسرعة الاستخدام وخاصة الصيانة

بالمقابل أعتقد أنه لا بد من التنازل عن بعض المعايير على حساب معايير أخرى، خاصة وأن الاختيارات متقاربة غالبا، فمثلا:

  • أتسامح مع الحلول التي ليست جذابة الأشكال -لا أهتم لكثرة القوالب styles, themes, templates...

  • بعض الحلول لا تملك إضافات plugins على المحررات وبيئات التطوير (أو تملك إضافات هشة يفضل الاستغناء عنها) أفضّل الكتابة باليد غالبا

  • الشهرة ليست دائما معيارا مهما -وإن كانت تزيد من حجم المجتمع-فقد تشتهر بعض الحلول بأساليب دعائية

  • الأدوات والوسائل الإضافية التي -وإن كانت قد تزيد أحيانات من الإنتاجية- غير أنها ليست ضرورية.

  • أيضا قضية السهولة اعتقد أنها نسبية في حالات كثيرة، فالمرء إذا تعوّد على شيء فسيراه سهلا -وكل ما عداه صعب ومعقد-، ألسنا نقوم بأشياء يعتبرها الكثيرون صعبة جدا فقط لأنهم لم يدروسها. أعتقد أنه بالتعلم -مع الصبر- تصبح الأمور -التي كنا نراها معقدة- سهلة شيئا فشيئا بالتدريج...

إذا ذكرت حلول تستخدمها فاذكر السبب وراء اختيارك فربما يستفيد الجميع.

تطبيقات مكتبية: اختار Swing

اطار تطوير مواقع: اختار كيف اتصلت بقاعدة البيانات:Spring, Grails

كيف اتصلت بقاعدة البيانات: Hibernate

كيف ترتب - حسب الأهمية- المعايير التي تقوم على أساسها بالاختيار

اختار الامور التي اجيدها ولدي خبرة فيها, ولا اتطرق الى غيرها اﻻ اذا احتجت الى ذلك.

ممكن نعرف لماذا Swing؟

كيف اتصلت بقاعدة البيانات: Hibernate

هل جربت غيرها؟ كيف كانت النتيجة؟

اختار الامور التي اجيدها ولدي خبرة فيها, ولا اتطرق الى غيرها

تصرف حكيم، لكن...

اﻻ اذا احتجت الى ذلك.

كيف تعرف أنك تحتاج إلى ذلك؟ أليس بالتجربة؟ إذن سوف تجيدها ثم -قد- تصبح لديك بها خبرة، أليس كذلك؟

ممكن نعرف لماذا Swing؟

لانها هي التي اجيدها, واعتقد انها الافضل

هل جربت غيرها؟ كيف كانت النتيجة؟

كيف تعرف أنك تحتاج إلى ذلك؟ أليس بالتجربة؟

بلقرائة, اقرأ عن كل الامور, ولا اتعلمه واستخدمه اﻻ اذا شعرت انه يوفر علي الوقت والجهد.

4_2_1_3على الترتيب

نسيت أدوات البناء Maven, Ant, SBT, Gradle أيها تفضل ولِمَ؟

أنا لا أستخدم أيًّا منها، رغم كثرة انتشارها بين مبرمجي جافا، أفضل أن أُسيِّر المكتبات الإضافية بنفسي لأعرف ما الذي يحصل (عادة ما أبحث في المستودعات

وغيرها بعد المواقع الرسمية...)

قمت بكتابة هذا التعليق في موضوع جديد: