جودة الإنتاج تبدأ من الحدود
الـBackend الجاهز للإنتاج هو نظام يبقى سلوكه مفهومًا عند البيانات غير الصحيحة والطلبات المتزامنة وفشل الاعتماديات والترحيلات وضغط التشغيل. اختيار الـFramework أقل أهمية من العقود الصريحة وانتقالات الحالة المضبوطة والاستمرارية ومسارات الفشل القابلة للمراقبة.
طبقات لكل منها مسؤولية
- كود النقل يفسر HTTP ولا يجب أن يملك سياسة العمل.
- Application Services تنسق حالات الاستخدام والمعاملات بينما تحمي طبقة Domain القواعد الثابتة.
- Repositories تخفي تفاصيل التخزين من دون أن تتحول إلى مكان لقواعد العمل.
- Adapters تعزل عقود البريد والدفع والأنظمة الأساسية والتخزين عن التطبيق.
- Structured Logs وMetrics وTracing وHealth Checks وAudit Events جزء من التنفيذ نفسه.
رحلة طلب كتابة داخل Backend
كل حد يضيق المسؤولية: تحقق من النقل، فوّض حالة الاستخدام، طبّق قواعد المجال، احفظ ذريًا، ثم نفذ الآثار الجانبية بشكل مضبوط.
طلب كتابة بمسؤوليات واضحة
كل حد يضيق المسؤولية: تحقق من النقل، فوّض حالة الاستخدام، طبّق قواعد المجال، احفظ ذريًا، ثم نفذ الآثار الجانبية بشكل مضبوط.
تصميم تحديث حساب بشكل آمن
اجعل Application Service واحدة تملك المعاملة
حالة الاستخدام تنسق عمل المجال وتترك تحويل HTTP خارجها.
await db.transaction(async (tx) => {
const customer = await customers.getForUpdate(tx, customerId);
customer.changeRiskLevel(nextLevel);
await customers.save(tx, customer);
await audit.append(tx, { action: 'customer.risk.changed', customerId });
});روائح Backend التي تتنبأ بالحوادث
قائمة جاهزية الإصدار
- حدد حدود حالات الاستخدام وملكية Transaction.
- أبق قواعد Domain مستقلة عن HTTP وORM.
- صنف أخطاء العمل والتحقق والتفويض والاعتماديات والأخطاء الداخلية.
- اجعل الآثار الخارجية مقاومة للفشل وIdempotent.
- سلّم Logs وMetrics وMigrations وHealth Checks وRunbooks مع الميزة.
