MohammadReza Rahmatzadeh
MohammadReza Rahmatzadeh
خواندن ۲ دقیقه·۴ سال پیش

خلاصه کتاب Pragmatic Programmer. درس32

درس 32: Configuration

وقتی کد وابسته است به مقادیری که ممکنه بعد از لایو شدن اپلیکیشن، تغییرشون بدیم، این مقادیرو بیرون از کد نگه دارید. وقتی سیستم شما ممکنه توی محیطهای مختلف و برای مشتریهایی با نیازهای متفاوت لانچ بشه، این مدل متغیرها رو خارج از اپلیکیشن نگه میداریم. با این کار اپلیکیشن پارامترالایز میشه و راحت میتونیم توی محیط های مختلف خیلی راحت آداپت(adapt) و استفادش کنیم.

• Parameterize Your App Using External Configuration

معمولا چیزهایی که ممکنه توی کانفیگوریشن ها بزارید شامل:

- آدرس و اطلاعات لاگین سرویسهای خارجی مثل دیتابیسها، api ها و ...

- تنظیم سطح لاگینگ

- اطلاعات پورت و ای پی و نام کلاستری که اپ ازش استفاده میکنه

- ولیدیشن های مختص محیط اجرا

- برخی از پارامترهای عمومی و کلی برنامه مثل نرخ مالیات در بیزنس و ...

- کلیدهای لایسنس

و ...

به طور کلی هر چیزی که فکر میکنید ممکنه تغییر بکنه توی شرایط و محیطهای مختلف رو از کد در میاریم و میبریم توی کانفیگ ها.

STATIC CONFIGURATION

خیلی از فریمورک ها و اپلیکیشن های کاستوم، کانفیگوریشن ها رو در فایل تکست و دیتابیس نگهداری میکنند.(برخی در فایل و برخی در دیتابیس). عموما برای فایلهای تکست از فرمت های محبوب تر مثل YAML یا JOSN استفاده میشه. اگر تنظیمات مدلی هست که باید توسط مشتری تغییر پیدا کنه، مثل همون نرخ مالیات که مثال زدیم، این مدل تنظیم بهتره توی دیتابیس نگهداری بشه.

به هر سبکی که تنظیمات رو نگهداری کنیم، بایستی در لود اولیه برنامه، تنظیمات هم لود بشن و توی رفتار سیستم تاثیرشونو بزارن. ممکنه یک ساختار دیتای گلوبال براشون در نظر بگیرید، اما ما ترجیحمون به این نیست. راه بهتر اینه که تنظیمات رو پشت یک api رپ کنید. این باعث جداسازی(decoupling) کد، از جزئیات کانفیگوریشن میشه.

CONFIGURATION-AS-A-SERVICE

با اینکه روش قبل مرسوم و جا افتاده است، در اینجا میخایم روش متفاوتی رو مطرح کنیم. اینکه قطعی و مبرهنه که همچنان ما تنظیمات رو از کد برنامه جدا نگه میداریم، ولی بجای نگهداری توی file ، میخایم ببریمشون پشت یک service api . این روش یکسری مزیت داره:

- اپلیکیشن های مختلف میتونن تنظیمات رو با هم شیر(share) کنن، حتی با اعمال محدودیت و مجوز که باعث بشه هر اپلیکیشنی سطح خاصی از تنظیماتو ببینه

- تغییر دادن مقادیر تنظیمات منعطف تر میشه

- برای مدیریت و تغییر مقادیرشون میتونیم هر مدل UI ای رو طراحی کنیم

- باعث داینامیک شدن تنظیمات میشه

اخرین مورد، که میگه باعث داینامیک شدن تنظیمات میشه، در اپلیکیشن هایی که خیلی حساسیت بالایی دارند و همیشه باید up باشند، خیلی کمک میکنه، چون تغییر تنظیمات کاملا جدا شده است و راحت مدیریت میشه و سیستم نیازی به restart برای لود مجدد تنظیمات هم نداره.

DON’T WRITE DODO-CODE

بدون کانفیگوریشن های خارج از برنامه، کدتون نمیتونه خودشو با شرایط و نیازهای مختلف وفق بده و منعطف نخاهد بود، این خیلی بده. نه؟ قطعا چنین کدی توی دنیای واقعی سرانجامش مرگه. دودو یک پرنده بدون پرواز منقرض شده است که توی شرق ماداگاسکار در اقیانوس هند زندگی میکرده، که طی تغییرات زیستی جهان، نتونست سازگار باشه و به کل منقرض شد. نزارید کد و پروژه تون مثه دودو باشه.

دروس مرتبط: 9, 14, 16, 28

منبع کانال تلگرامی: https://t.me/pragmaticprogrammer_fa

pragmatic programmerprogrammermarshal
شاید از این پست‌ها خوشتان بیاید