القواعد · فصل ٩

فيتشر عايزة داتا من فيتشر تانية

productId · entities · page composition · shared
🎯 الهدف: تختار مكان الداتا لما فيتشر محتاجة حاجة من فيتشر تانية، من غير اعتماد مباشر بينهم.
السيناريوالتصميم الأنسب
add-to-cart محتاجة productIdتستقبل الـ ID كـ input، وتستخدم entities/cart
add-to-wishlist محتاجة Productتعتمد على entities/product عند الحاجة
الهيدر محتاج عدد عناصر السلةيقرأ entities/cart عبر Query
الـ Checkout محتاج بيانات السلةيقرأ Cart ويستخدم Feature مستقلة لإتمام الطلب
Apply Coupon محتاجة إجمالي الطلبتتعامل مع مدخلات وبيانات الـ Checkout عبر واجهة واضحة، أو منطق Domain مناسب
Feature محتاجة تنفّذ Feature أخرىتجنّب الاعتماد المباشر. اجمعهما في Page أو Widget، أو أنشئ Use Case مشتركًا في مكان مناسب

مش كل منطق مشترك يتحط في shared. لو المنطق خاص بالـ Cart، مكانه الطبيعي entities/cart أو Slice مسؤولة عن الـ Cart، مش Utilities عامة لمجرد إعادة استخدامه.

مش لازم كل API endpoint يبقى جوه Entity. مكانه يتحدد حسب المسؤولية. الـ Checkout ممكن يكون Feature مستقلة لو هو فعل المستخدم الأساسي، بينما Order كيان له بياناته واستعلاماته الخاصة.

خلّصت الفصل لما

🧠 اختبر نفسك
١) منطق خاص بالسلة، أحطه في shared عشان أكتر من فيتشر تستخدمه؟
لأ. مكانه entities/cart أو شريحة مسؤولة عن السلة.
٢) Checkout يبقى Entity ولا Feature؟
Feature لو هو فعل المستخدم. Order هو الكيان اللي له بيانات واستعلامات.