productdb.json: المصدر الوحيد للحقيقة لبيانات المنتج

يشرح هذا المقال كيف يعمل productdb كمصدر وحيد للحقيقة لجميع بيانات المنتج، حيث يحدد المكونات والميزات وقواعد التوافق وقائمة المواد في ملف مركزي واحد.

المشكلة: بيانات منتج مبعثرة

يمكن أن تتشتت بيانات المنتج عبر أنظمة متعددة:

  • نظام المخزون: تكاليف القطع ومستويات المخزون

  • نظام تخطيط موارد المؤسسة (ERP): قوائم المواد (BOMs) وبيانات التصنيع

  • الموقع الإلكتروني: أوصاف المنتج والمواصفات

  • المحاسبة: قواعد التسعير والتكاليف

عندما تكون البيانات مبعثرة، تنشأ أوجه عدم اتساق:

  • يظهر الموقع الإلكتروني ذاكرة وصول عشوائي (RAM) بسعة 16 جيجابايت، بينما يظهر نظام تخطيط موارد المؤسسة (ERP) سعة 8 جيجابايت

  • يستخدم التسعير بيانات تكلفة قديمة

  • تكون قوائم المواد (BOMs) غير متزامنة مع المنتجات الفعلية

  • لا تتطابق الميزات مع الواقع

نحتاج إلى مصدر وحيد للحقيقة يمكن لجميع الأنظمة الرجوع إليه.

الحل: productdb.json

productdb.json هو ملف JSON يحدد كل مكون وميزاته وقواعد التوافق ومكوناته الفرعية. تقوم جميع الأنظمة بتحميل هذا الملف عند بدء التشغيل.

يتم التحكم في إصدارات هذا الملف في Git، مما يضمن تتبع جميع التغييرات وإمكانية تدقيقها.

هيكل الملف

يتم تنظيم الملف حسب فئة المكون:

{
  "Chassis": { ... },
  "Board": { ... },
# ... (تفاصيل التنفيذ محذوفة)

تحتوي كل فئة على مكونات بخصائصها.

تعريف المكون

لكل مكون عدة خصائص:

الخصائص الأساسية

class: فئة المكون لمطابقة التوافق

"class": "THIN_MINI_ITX"

internal: الاسم الداخلي للمخزون والتصنيع

"internal": "Chassis, Treo"

external: الاسم الموجه للعميل للموقع الإلكتروني والتسويق

"external": "Thinvent® Treo Mini PC"

weight: الوزن الفعلي بالجرام

"weight": 590

قواعد التوافق (allows)

يحدد الحقل allows المكونات التي يمكن استخدامها معًا:

"allows": {
  "Board": [
    {"class": "THIN_MINI_ITX"}
# ... (تفاصيل التنفيذ محذوفة)

هذا يعني:

  • Board: فقط اللوحات الأم من فئة THIN_MINI_ITX متوافقة

  • Flash: فقط تخزين الفلاش من فئة m.2_SATA متوافق

  • Accessories: جميع الملحقات متوافقة

يمكن تحديد التوافق بواسطة:

بناءً على الفئة (ديناميكي):

{"class": "THIN_MINI_ITX"}

بناءً على معرف القطعة (صريح):

["N100", "N150", "i5-1335U"]

قائمة المواد (constituents)

يحدد الحقل constituents الأجزاء التي يتكون منها هذا المكون:

"constituents": [
  {
    "Category": "Custom",
# ... (تفاصيل التنفيذ محذوفة)

هذا يمكّن من:

  • حساب التكلفة: جمع تكاليف جميع المكونات الفرعية

  • التصنيع: إنشاء قوائم انتقاء للتجميع

  • المخزون: تتبع استخدام المكون

توفير الميزات (provides)

يحدد الحقل provides الميزات التي يقدمها هذا المكون:

"provides": {
  "Operating Temperature": "0°C ~ 40°C",
  "Operating Humidity": "20% ~ 80% RH, non condensing",
# ... (تفاصيل التنفيذ محذوفة)

يتم تجميع هذه الميزات عبر جميع المكونات في وحدة حفظ المخزون (SKU) لإنشاء المواصفات الكاملة للمنتج.

مثال: هيكل Treo

{
  "Treo": {
    "class": "THIN_MINI_ITX",
# ... (تفاصيل التنفيذ محذوفة)

مثال: لوحة N100

{
  "N100": {
    "class": "THIN_MINI_ITX",
# ... (تفاصيل التنفيذ محذوفة)

تحميل productdb.json

يتم تحميل الملف عند بدء تشغيل التطبيق:

import json

with open(PRODUCTDB_JSON_PATH, "r", encoding="utf-8") as productdb_file:
    productdb = json.load(productdb_file)

هذا ينشئ قاموسًا في الذاكرة:

productdb = {
    "Chassis": {
        "Treo": { ... },
# ... (تفاصيل التنفيذ محذوفة)

جميع الأكواد تشير إلى هذا القاموس للحصول على بيانات المنتج.

الوصول إلى بيانات المكون

الحصول على مكون حسب الفئة والمعرف

chassis = productdb["Chassis"]["Treo"]
board = productdb["Board"]["N100"]
ram = productdb["RAM"]["8"]

الحصول على الاسم الخارجي

name = productdb["Board"]["N100"]["external"]
# النتيجة: "Intel® N100 Processor"

الحصول على الميزات

features = productdb["Board"]["N100"]["provides"]
# النتيجة: {"Generation": "12th", "Series": "N", ...}

الحصول على المكونات الفرعية

constituents = productdb["Chassis"]["Treo"]["constituents"]
# النتيجة: [{"Category": "Custom", "PartID": "base_treo", "qty": 1}, ...]

التحقق من صحة وحدة حفظ المخزون (SKU)

نستخدم productdb.json للتحقق من صحة وحدات حفظ المخزون (SKUs):

def check_sku(sku:str) -> bool:
    parts = sku.split("-")
    mapped_parts = map_parts_to_fields(parts)
# ... (تفاصيل التنفيذ محذوفة)

انظر هيكل وحدة حفظ المخزون (SKU) للحصول على التفاصيل.

تجميع الميزات

نقوم بتجميع الميزات من جميع المكونات في وحدة حفظ المخزون (SKU):

def get_product_features(sku: str) -> dict:
    partids = sku.split("-")
    features = {}
# ... (تفاصيل التنفيذ محذوفة)

مثال:

SKU: Treo-N100-8-256-2H-W6-11P

الميزات:

- Form Factor: Mini PC (من Treo)

- Generation: 12th (من N100)

- Series: N (من N100)

- Cores: 4 (من N100)

- Main Memory: 8 (من 8)

- SSD Storage: 256 (من 256)

- HDMI: 2 (من 2H)

- Operating System: Windows 11 Pro (من 11P)

انظر استخراج الميزات للحصول على التفاصيل.

حساب التكلفة

نحسب تكلفة وحدة حفظ المخزون (SKU) عن طريق جمع تكاليف المكونات الفرعية:

def calculate_cost(item: dict, partid: str) -> tuple:
    if "constituents" in item:
        # عنصر مركب: جمع تكاليف المكونات الفرعية
# ... (تفاصيل التنفيذ محذوفة)

يتعامل هذا الحساب العودي مع المكونات الفرعية المتداخلة.

العناصر المركبة

بعض المكونات مركبة (مصنوعة من مكونات أخرى):

مثال: مجموعة لوحة المفاتيح + الفأرة

{
  "KM": {
    "internal": "Keyboard + Mouse",
# ... (تفاصيل التنفيذ محذوفة)

هذا يمكّن من:

  • إنشاء قائمة المواد (BOM): سرد جميع المكونات المطلوبة

  • حساب التكلفة: جمع تكاليف لوحة المفاتيح + الفأرة + جهاز الاستقبال

  • تتبع المخزون: تتبع استخدام المكون

تحديث productdb.json

التحرير اليدوي

يتم تحرير الملف يدويًا في محرر نصوص أو بيئة تطوير متكاملة (IDE). يتم حفظ التغييرات في Git:

git add PATH_TO_FILE/productdb.json
git commit -m "Add new N150 board configuration"
git push

التحقق من الصحة

بعد التحرير، تحقق من صحة بناء جملة JSON:

python -m json.tool PATH_TO_FILE/productdb.json > /dev/null

يتحقق هذا من أخطاء بناء الجملة.

النشر

بعد الدفع إلى Git، يتم نشر الملف إلى الإنتاج

يعيد التطبيق تحميل الملف عند إعادة التشغيل.

التكامل مع الأنظمة الأخرى

الموقع الإلكتروني

يستخدم الموقع الإلكتروني productdb.json لـ:

  • إنشاء صفحات المنتج

  • عرض المواصفات

  • تصفية المنتجات حسب الميزات

  • إنشاء جداول المقارنة

نظام تخطيط موارد المؤسسة (ERP)

يستخدم نظام تخطيط موارد المؤسسة (ERP) productdb.json لـ:

  • التحقق من صحة وحدات حفظ المخزون (SKUs)

  • إنشاء قوائم المواد (BOMs)

  • حساب التكاليف

  • تتبع المخزون

المحاسبة

تستخدم المحاسبة productdb.json لـ:

  • حساب تكاليف المنتج

  • إنشاء الفواتير

  • تتبع تكلفة البضائع المباعة (COGS)

خط أنابيب تحسين محركات البحث (SEO)

يستخدم خط أنابيب تحسين محركات البحث (SEO) productdb.json لـ:

انظر نظرة عامة على خط أنابيب تحسين محركات البحث (SEO) للحصول على التفاصيل.

فوائد المصدر الوحيد للحقيقة

1. الاتساق

جميع الأنظمة تستخدم نفس البيانات. لا توجد تناقضات.

2. القابلية للصيانة

قم بالتحديث مرة واحدة، وانشر في كل مكان. لا حاجة لتحديث أنظمة متعددة.

3. القابلية للتدقيق

يتم تتبع جميع التغييرات في Git. من السهل معرفة من قام بتغيير ماذا ومتى.

4. القابلية للاختبار

يمكن اختبار التغييرات في بيئة الاختبار قبل النشر للإنتاج.

5. البساطة

ملف واحد لفهمه. لا توجد مخططات قواعد بيانات معقدة أو واجهات برمجة تطبيقات (APIs).

6. الأداء

يوفر القاموس في الذاكرة بحثًا بوقت ثابت O(1). لا حاجة لاستعلامات قاعدة بيانات.

7. إمكانية النقل

تنسيق JSON قابل للقراءة البشرية ومستقل عن لغة البرمجة. من السهل تحليله بأي لغة.

القيود

1. التحرير اليدوي

التغييرات تتطلب تحريرًا يدويًا وحفظًا في Git. لا توجد واجهة مستخدم ويب للمستخدمين غير التقنيين.

2. إعادة التشغيل مطلوبة

يجب إعادة تشغيل التطبيق لتحميل التغييرات. لا يوجد إعادة تحميل فورية (hot-reload).

3. لا يوجد تحقق من الصحة الدلالية

يتم التحقق من صحة بناء جملة JSON، لكن التحقق من الصحة الدلالية (مثل "هل هذه القطعة موجودة؟") ليس تلقائيًا.

4. التزامن

تحرير عدة أشخاص في نفس الوقت قد يسبب تعارضات دمج.

المراجع

المفاهيم التقنية

مقالات ذات صلة

الملخص

productdb.json هو المصدر الوحيد للحقيقة لجميع بيانات المنتج:

الهيكل:

  • منظم حسب فئة المكون (الهيكل، اللوحة الأم، الذاكرة العشوائية، إلخ.)

  • لكل مكون خصائص (class, internal, external, weight)

  • قواعد التوافق (allows)

  • قائمة المواد (constituents)

  • توفير الميزات (provides)

الفوائد:

  • الاتساق عبر جميع الأنظمة

  • القابلية للصيانة (تحديث مرة واحدة)

  • القابلية للتدقيق (تتبع Git)

  • القابلية للاختبار (النشر في بيئة الاختبار)

  • البساطة (ملف واحد)

  • الأداء (بحث في الذاكرة بوقت ثابت O(1))

  • إمكانية النقل (تنسيق JSON)

حالات الاستخدام:

  • التحقق من صحة وحدة حفظ المخزون (SKU)

  • تجميع الميزات

  • حساب التكلفة

  • إنشاء قائمة المواد (BOM)

  • صفحات المنتج على الموقع الإلكتروني

  • استخراج الميزات لخط أنابيب تحسين محركات البحث (SEO)

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


← العودة إلى فهرس الوثائق