در یکی از پروژهها یک تصمیم کوچک گرفتیم:
برای افزایش سرعت توسعه، Validationها را از سمت Backend به Frontend منتقل کنیم.
در لحظه همه چیز منطقی بود.UI سریعتر بازخورد میداد.API سادهتر شد.تیم Frontend هم راضی بود.
اما چند ماه بعد، همان تصمیم کوچک خودش را در جای دیگری نشان داد.
چند کلاینت مختلف وجود داشت.موبایل.وب.سرویسهای داخلی.
و هرکدام بخشی از Validation را به شکل متفاوتی پیادهسازی کرده بودند.
نتیجه چه شد؟
یک منطق تجاری در چند جای مختلف تکرار شد.
و هیچکدام ۱۰۰٪ با دیگری هماهنگ نبود.
باگهایی ظاهر میشد که در یک کلاینت دیده میشد اما در دیگری نه.
و دیباگ کردن آنها به مرور سختتر شد.
نکته جالب این بود که تصمیم اولیه اشتباه نبود.
در آن مقطع حتی بهترین گزینه به نظر میرسید.
اما فرض اصلی آن تصمیم این بود:
«یک نقطه مرکزی برای اعمال منطق وجود ندارد.»
و همین فرض بعداً تغییر کرد.
در مهندسی نرمافزار، بسیاری از مشکلات از جایی شروع میشوند که یک تصمیم کوچک بدون توجه به پیامدهای توزیعشده گرفته میشود.
چون سیستمها فقط یک کدبیس نیستند.
یک اکوسیستم از کلاینتها، سرویسها و رفتارهای همزمان هستند.
شاید به همین دلیل است که طراحی خوب فقط درباره محل قرار گرفتن منطق نیست.
درباره این است که آن منطق در چند جا باید زندگی کند،
و چطور باید با تغییرات آینده کنار بیاید.
Post #680
285