تخطَّ إلى المحتوى

تطوير تطبيقات الويب

تطوير تطبيقات Next.js

تطبيقات Next.js تُبنى من الصفر على App Router - مكتوبة بأنواع صريحة من طرفها إلى طرفها، سريعة وفق ميزانية محدّدة، ومبنيّة بحيث تكون سنة التطوير الثانية أرخص من الأولى.

معظم مشاريع Next.js تفشل ببطء. الإصدار الأول يخرج في موعده ويبدو جيدًا. ثم يتضخّم الحزمة، وينتشر use client صعودًا في الشجرة، وتتحوّل كل صفحة إلى ديناميكية في صمت، وبعد ثمانية عشر شهرًا يتجادل الفريق حول إعادة كتابة كل شيء.

هذا التآكل معماريّ بطبيعته، ويمكن تفاديه. ولا واحد من القرارات المسبّبة له صعبٌ لحظة اتّخاذه - إنما تُتّخذ دون أن ينتبه أحد إلى أن ثمّة قرارًا يُتّخذ أصلًا.

ما الذي نبنيه

نتولّى التطبيقات الجديدة التي تكون فيها استراتيجية العرض مهمّة فعلًا: واجهات التجارة الإلكترونية، وأسطح منتجات SaaS، ومنصّات التوثيق، والمواقع التسويقية متعدّدة المناطق، وأنظمة المحتوى التي يجب أن تخدم آلاف المسارات دون أن تستغرق عملية البناء ساعة كاملة.

وحيث يكون للمشروع شكل خاص به، له صفحة خاصة به: التجارة الإلكترونية فيها كتالوج وسلّة بعُمرَي تخزين مؤقت مختلفين على الشاشة نفسها، وSaaS فيه أسطح مُوثَّقة الدخول لا يكاد شيء فيها يكون ثابتًا، والمؤسسات تضيف الدخول الموحّد وإقامة البيانات ومتطلّبات الشراء فوق ذلك كلّه. وهذه الصفحة هي العمل المشترك بينها.

كيف تُتّخذ القرارات المعمارية

تُختار استراتيجية العرض لكل مسار على حدة، لا للمشروع ككل، وتُدوَّن قبل بدء التنفيذ:

  • ثابتة لكل ما يتغيّر محتواه عند النشر لا عند كل طلب: الصفحات التسويقية، والتوثيق، والمدوّنة.
  • إعادة تحقّق تدريجية للمحتوى الذي يتغيّر وفق إيقاعه الخاص، مع ربط وسوم إعادة التحقّق بـ webhook نظام إدارة المحتوى بدل مهلة زمنية ثابتة.
  • ديناميكية ومتدفّقة للأسطح التي تختلف فعلًا بين طلب وآخر: لوحات التحكّم، وسلال الشراء، وكل ما يقع خلف المصادقة، مع رسم حدود Suspense بحيث يظهر الهيكل فورًا وتصل البيانات البطيئة لاحقًا.

نتعامل مع الحدّ الفاصل بين العميل والخادم بوصفه قرارًا تصميميًا موثّقًا. فـ Server Components هي الوضع الافتراضي، وuse client قرار مقصود ومُراجَع يتوقّف عند أصغر ورقة تفاعلية بدل أن يتسلّق إلى تخطيط كامل.

يبدو ذلك تفضيلًا في الأسلوب حتى تُسعّروه. توجيه use client على تخطيط يُرسل ذلك التخطيط وأبناءه وتبعياتهم إلى كل زائر على كل مسار تحته. والتوجيه نفسه على القائمة المنسدلة الوحيدة التي تحتاج حالة يُرسل بضعة كيلوبايتات. الشيفرة واحدة؛ والموضع هو التكلفة كلّها.

طبقة البيانات تُقرَّر في الوقت نفسه

استراتيجية العرض بلا معنى ما لم يُعرَف من أين تأتي البيانات وكم يُسمح لها أن تكون قديمة. لذلك تُحدَّدان معًا، لكل سطح: النظام المصدر، والشكل الذي تأخذه بعد عبورها إلى التطبيق، ومن يُسمح له بالقراءة، وما الذي يُبطلها.

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

كيف يسير المشروع

على مراحل، تنتهي كل واحدة بشيء منشور تستطيعون استخدامه.

  1. النطاق والمعمارية. جرد المسارات، وقرار العرض لكل مسار، ومصادر البيانات، وقائمة عمليات الربط، وقواعد الحدود. هذه المرحلة تُحدّد كلفة كل مرحلة بعدها، وهي تُنتج وثيقة لا عرضًا تقديميًا.
  2. العمود الفقري. التوجيه، والتخطيطات، وطبقة البيانات، والمصادقة إن وُجدت، وأوّليات المكوّنات، وتكامل مستمر بميزانية مُطبَّقة سلفًا. لا شيء بصريّ مكتمل؛ وكل شيء بنيويّ مكتمل.
  3. الأسطح، بترتيب الأولوية. مبنيّة على الأعراف التي وُضعت في المرحلة الثانية، يُراجعها مهندسوكم إن كانوا لديكم، وتُنشر في نهاية كل دورة بدل أن تُكدَّس لإطلاق واحد.
  4. التمتين والتسليم. أداء مقيس على الميزانية لا على درجة، وإتاحة مفحوصة على مستوى المكوّن، ومذكّرة معمارية مكتوبة، وجولة شرح لكل سطح مع من سيرثه.

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

ما الذي يُحرّك التقدير

ليس إطار العمل. ما يُحدّد مدّة مشروع Next.js هو ما يُحدّد مدّة أي مشروع، ومعرفة أيّ هذه البنود ينطبق عليكم أنفع من سعر يوم عمل:

  • كم نظامًا عليه أن يُحادث. نظام إدارة محتوى واحد أسبوع. أما نظام محتوى ونظام تخطيط موارد ومزوّد مدفوعات ونقطة SOAP قديمة لم يوثّقها أحد، فذلك مشروع آخر.
  • هل نموذج المحتوى موجود. البناء على نموذج ما زال محلّ جدال هو أضمن طريقة لبناء الشاشة نفسها ثلاث مرات.
  • كم من السطح مُوثَّق الدخول. الأسطح المُوثَّقة لا يمكن تقديمها بشكل ثابت، فتكلفة تسريعها واختبارها أعلى.
  • هل يوجد نظام تصميم أم يُخترع أثناء العمل. كلاهما مقبول؛ وليسا المجهود نفسه.
  • كم لغة، وهل هي ترجمات حقيقية أم الصفحة نفسها بعَلَم مختلف. التوجيه متعدّد اللغات يُغيّر بنية الروابط، وهذا ليس قرارًا متأخّرًا.

ما الذي يُسلَّم معه

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

هذه المذكّرة الأخيرة هي ما يهمّ في السنة الثانية. إنها الفرق بين قاعدة شيفرة يُوسّعها فريقك وقاعدة شيفرة يستبدلها.

متى تكون هذه الصيغة خاطئة

إن كان لديكم مهندسون أكفاء وكانت الفجوة معمارية لا في الطاقة الاستيعابية، فالذي تريدونه هو التطوير على App Router: نضع نحن الحدّ ونموذج التخزين المؤقت وبنية المسارات، ويبني فريقكم فوقها، وتبقى المعرفة في بيتكم.

وإن كان التطبيق موجودًا أصلًا والمشكلة أنه صار صعب التغيير، فذلك ترحيل وإنقاذ، وهو يبدأ بالقراءة لا بالكتابة.

وإن لم تكونوا متأكّدين أيّهما حالتكم، فإن تدقيقًا يجيب عن ذلك في أسبوعين، بكلفة جزء يسير من كلفة الاختيار الخاطئ.

النطاق والشروط

نموذج التعاقد
نطاق محدّد يُتفق عليه كتابةً قبل بدء العمل. وليس أجرًا يوميًا مقابل قائمة مفتوحة.
السعر والمدة
يُحدَّدان لكل مشروع بعد تحديد النطاق، ويُعرضان معًا قبل بناء أي شيء.
ما نحتاجه منك
شخص واحد يملك اعتماد القرارات، ووصول إلى مستودعك ونظام تتبّع المهام لديك.
غير مشمول
كل ما يقع خارج النطاق المتفق عليه. فيصير نطاقًا مستقلًا لا أمر تغيير.
تكاليف الأطراف الثالثة
الاستضافة والتراخيص ورسوم الواجهات البرمجية واشتراكات الخدمات السحابية تتعاقد عليها وتدفعها أنت.
الفوترة
⁦Codefacture Yazılım A.Ş.⁩، تركيا. باليورو أو الدولار أو الجنيه الإسترليني عبر حوالة بنكية، دون ضريبة قيمة مضافة تركية على الخدمات المصدَّرة.

الأسئلة الشائعة

هل يستطيع مهندسونا العمل إلى جانبكم؟
نعم، وفي معظم المشاريع ينبغي ذلك. مراجعاتهم هي الطريق الذي تنتقل عبره الأعراف. وحيث يكون فريقكم قادرًا أصلًا وتكون الفجوة معمارية لا في الطاقة الاستيعابية، فالصيغة المناسبة هي التطوير على App Router: نضع نحن النموذج ويبني فريقكم فوقه.
ماذا يحدث حين ينتهي المشروع؟
تحصلون على المستودع، والمذكّرة المعمارية التي تشرح سبب عرض كل مسار بالطريقة التي يُعرض بها، وإعداد التكامل المستمر بما فيه ميزانية الأداء، وجلسة تسليم لكل سطح. وإن أردتم بقاءنا للصيانة فذلك اتفاق منفصل، لا تبعيّة نبنيها عمدًا.
هل تتولّون مشروعًا أُنجز نصفه؟
غالبًا نعم - لكن ذلك ترحيل وإنقاذ لا هذه الخدمة، وهو يبدأ بقراءة قاعدة الشيفرة لا بالكتابة فيها. وجرد المسارات الناتج عن ذلك ملك لكم، سواء استمرّ العمل معنا أم لا.
هل تعملون بـ App Router أم Pages Router؟
‏App Router في كل مشروع جديد. نحن نصون قواعد شيفرة مبنيّة على Pages Router ونُرحّلها، لكننا لا نبدأ بها مشاريع جديدة: نموذج العرض وبدائيّات التخزين المؤقّت ودعم البثّ المتدفّق في App Router هي الوجهة الفعلية لإطار العمل.
كم يستغرق المشروع النموذجي؟
لا يوجد مشروع نموذجي؛ الأمر يعتمد على النطاق، وأي رقم قبل أن نرى مشروعكم سيكون تخمينًا. عدد الواجهات، وحجم البيانات خلفها، وعدد الأنظمة التي يلزم ربطها: هذه هي التي تحدّد المدّة، لا إطار العمل. نحدّد النطاق معكم أولًا، ثم نعمل على مراحل ثابتة، وفي نهاية كل مرحلة نشر قابل للاستخدام.
لمن تعود ملكية الشيفرة؟
لك، منذ أول commit. نعمل داخل مستودعك أو نُسلّم مستودعنا بتاريخ git كاملًا.
اتصل بنا+1 848 272 7583واتساب+90 850 308 5436البريدinfo@codefacture.comصفحة التواصل