# جهة البرنامج

الجهتان الأمامية والخلفية هما جانبان لكل برنامج من برامج الحاسوب. تفصل العلاقة بين طبقة العرض (الجهة الأمامية)، وطبقة الوصول إلى البيانات (الجهة الخلفية) في البرنامج، أو ما يسمى البنية التحتية المادية أو الكيان المادي. في نموذج الخادم والعميل، يعتبر العميل عادة الواجهة الأمامية، وعادة ما يعتبر الخادم الجهة الخلفية، حتى عندما يتم تنفيذ بعض أعمال العرض فعلا على الملقم.

## المقدمة

في هندسة البرمجيات، قد يكون هناك العديد من الطبقات بين الجهاز والمستخدم النهائي. يمكن التحدث عن كل منها بأنها لها واجهة أمامية ونهاية خلفية. الواجهة عبارة عن لوحة تجريدية، حيث تعمل على تبسيط المكون الأساسي من خلال توفير واجهة سهلة الاستخدام، بينما يتعامل الجزء الخلفي عادةً مع منطق الأعمال وتخزين البيانات.
في مجال الاتصالات، يمكن اعتبار الواجهة بمثابة جهاز أو خدمة، في حين أن الجزء الخلفي هو البنية التحتية التي تدعم توفير الخدمة.
قاعدة الإبهام هي أن جانب العميل (أو "الواجهة الأمامية") هو أي مكون يتم معالجته بواسطة المستخدم. جانب الخادم (أو "النهاية الخلفية") هو الكود الموجود عادةً على الخادم، وغالبًا ما يتم إزالته فعليًا من المستخدم.

## تعريفات البرمجيات

في أنظمة إدارة المحتوى، قد تشير المصطلحات الأمامية والخلفية إلى وجهات نظر المستخدم النهائي التي تواجه CMS والآراء الإدارية، على التوالي. في تركيب الكلام، تشير النهاية الأمامية إلى جزء من نظام التوليف الذي يحول نص الإدخال إلى تمثيل صوتي رمزي، وتحول النهاية الخلفية التمثيل الصوتي الرمزي إلى أصوات فعلية. بالنسبة للأنظمة الفرعية الرئيسية للكمبيوتر، تعد إدارة الملفات الرسومية بمثابة واجهة أمامية لنظام ملفات الكمبيوتر، وواجهة shell مع نظام التشغيل. تواجه الواجهة الأمامية المستخدم، بينما تقوم الواجهة الخلفية بتشغيل برامج نظام التشغيل استجابةً لذلك. في برامج التحويل البرمجي، تقوم الواجهة الأمامية بترجمة شفرة مصدر برمجة الكمبيوتر إلى تمثيل وسيط، وتعمل الواجهة الخلفية مع التمثيل الوسيط لإنتاج رمز بلغة إخراج الكمبيوتر. عادةً ما يتم تحسين الواجهة الخلفية لإنتاج رمز يعمل بشكل أسرع. يمكن للفرق الأمامي / الخلفي أن يفصل بين قسم المحلل اللغوي الذي يتعامل مع شفرة المصدر والطرف الخلفي الذي يولد الكود ويحسنه. تقدم بعض التصميمات، مثل GCC، خيارات بين نهايات أمامية متعددة (تحليل لغات المصدر المختلفة) أو نهايات خلفية (إنشاء كود لمعالجات هدف مختلفة). يتطلب استخدام واجهة سطر الأوامر (CLI) الحصول على مصطلحات خاصة وحفظ الأوامر، وبالتالي فإن واجهة المستخدم الرسومية (GUI) تعمل كبيئة سطح مكتب أمامية بدلاً من ذلك.

### تطوير الويب كمثال

هناك طريقة أخرى لفهم الفرق بين الاثنين وهي فهم المعرفة المطلوبة من مطور برامج الواجهة الأمامية. تركز القائمة أدناه على تطوير الويب كمثال.

#### كلاهما

* أدوات التحكم في الإصدار مثل غيت هاب أو سورس فورج أو ميركوريال
* أدوات وبروتوكولات نقل الملفات مثل بروتوكول نقل الملفات أو rsync

#### تركز الواجهة الأمامية

* اللغات الترميزية ولغات الويب مثل لغة ترميز النص الفائق وأوراق الأنماط المتتالية وجافا سكريبت والمكتبات المساعدة شائعة الاستخدام في تلك اللغات مثل Sass أو جي كويري
* معالجة طلب غير متزامن وأجاكس
* تطبيقات ذات صفحة واحدة (مع أطارات عمل مثل React أو أنجولار جي إس أو Vue.js)
* أداءالويب (أول الطلاء ذي مغزى، وقت التفاعل، 60 حركة وتفاعلات FPS، استخدام الذاكرة، إلخ)
* استجابة تصميم الويب
* مشكلات توافق المستعرضات وطرق معالجتها
* اختبار شامل من خلال متصفح headless browser
* أنشئ نظامًا تلقائيًا لتحويل ملفات جافا سكريبت وحزمها، وتقليل حجم الصور ... باستخدام أدوات مثل Webpack أو Gulp.js
* محرك البحث الأمثل
* صعوبة الوصول
* الاستخدام الأساسي لأدوات تحرير الصور مثل برنامج جنو لمعالجة الصور أو أدوبي فوتوشوب
* واجهة البصرية

#### تركز الخلفية

* لغات البرمجة النصية مثل نود.جي إس أو بي إتش بي أو بايثون أو ياقوت أو بيرل أو Compiled languages مثل C أو جافا أو غو
* أطر اختبار تلقائية للغة المستخدمة
* الوصول إلى بيانات التطبيق
* منطق تطبيق الأعمال
* إدارة قواعد البيانات
* قابلية التوسع
* توافر عالية
* المخاوف الأمنية والتوثيق والترخيص
* معمارية البرمجيات
* تحويل البيانات
* طرق النسخ الاحتياطي والبرمجيات
لاحظ أن كلتا المواضع، على الرغم من إمكانية العمل على منتج واحد، لديها مجموعة مميزة للغاية من المهارات.

## تعريفات الأجهزة

في حوسبة الشبكة، يمكن أن تشير الواجهة الأمامية إلى أي جهاز يعمل على تحسين حركة مرور الشبكة أو حمايتها. يُطلق عليه اسم الجهاز للواجهة الأمامية للتطبيق لأنه يتم وضعه على الواجهة أو الحدود الخارجية للشبكة. تمر حركة مرور الشبكة عبر الأجهزة الأمامية قبل الدخول إلى الشبكة.
في تصميم المعالج، سيكون تصميم الواجهة الأمامية هو الوصف الأولي لسلوك الدائرة في لغة وصف الأجهزة مثل Verilog، في حين أن التصميم الخلفي سيكون عملية تعيين هذا السلوك إلى الترانزستورات المادية عند الموت.

## انظر ايضاً

* تطوير الشبكة الأمامية
* نموذج الخادم - العميل
* البرمجة المعيارية
* نمط المراقب
* إجراء اتصال عن بعد
* واجهة برمجة التطبيقات API