Korat
البنية

إضافات يختار كل متجر تثبيتها بنفسه

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

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

عقد الوحدة

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

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

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

الوحدات الأساسية الأربع هي أنواع الأنشطة

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

ولأن هذه وحدات لا فروع داخل شاشة عملاقة واحدة، فإن شاشة المطبخ ومجموعات الخيارات في وحدة الطعام غير موجودة أصلًا لدى فندق — لا مخفيّة خلف مفتاح، ولا معطّلة، بل غائبة. فمساحة الواجهة التي يراها المتجر دالّة لما أعلن أنه هو.

سبع إضافات قابلة للتثبيت، وتعمل مع أي نوع

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

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

التثبيت والإزالة، لكل متجر على حدة

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

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

ما ليس عليه هذا بعد

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

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

لماذا وحدات لا مفاتيح ميزات

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

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

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

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

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

كل ما هنا من تطوير الطرف الأول: وحدات مثل الطابور ومواقف السيارات لم يكتبها مطوّر خارجي، ولذلك لا يوجد أصلًا مدخل يصل منه طرف ثالث إلى بيانات متجرك.

وأي موظف يرى الوحدة بعد تثبيتها تحدده الصلاحيات نفسها لكل شخص التي يقوم عليها مكان عملي.

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

هل أستطيع كتابة إضافة لـ Korat؟

ليس بعد. عقد الوحدات حقيقي والإضافات الأربع مكتوبة مقابله، لكن باب التقديم للأطراف الثالثة غير مفتوح — فلا بوابة مطوّرين ولا عملية مراجعة ولا حزمة تطوير منشورة.

والمتجر يقول ذلك داخل التطبيق بدل عرض رفّ فارغ يوحي بغير ذلك.

ماذا يحدث لبياناتي إذا أزلت إضافة؟

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

وبعد الإزالة لا تسهم الإضافة بمربّعات في اللوحة ولا بصلاحيات في محرّر الأدوار ولا بقسم على صفحتك العامة. وإن أعدت تثبيتها فسجلاتها ما زالت هناك.

هل عليّ اختيار نوع نشاط واحد إلى الأبد؟

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

أما الإضافات الأربع فلا علاقة لها بالنوع: أي نشاط يستطيع تثبيت أي منها.

كيف تصل صلاحيات الوحدات إلى محرّر الأدوار؟

تبني إضافة صلاحيات الفريق المحرّر بسؤال كل وحدة مثبَّتة عن القدرات التي تعلنها، بدل قراءة قائمة رئيسية يحرّرها إنسان.

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

هل تبدو الوحدات مختلفة عن بقية التطبيق؟

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

والمقصود أن تُقرأ الوحدة كجزء من التطبيق لا كأداة مضمَّنة لها آراؤها الخاصة في المسافات.

شاهد الوحدات وهي تعمل

أنشئ نشاطًا، واختر نوعه، وستبني اللوحة نفسها ممّا تدّعيه الوحدات من أنواع.