از زمان ارائه نمرا و تستا ۳، یک مشکل کمکم دارد خودش را نشان میدهد و آن اینکه:
کاربران به دلخواه خود و یا با سفارش به برنامهنویسان، تغییرات دلخواهشان را روی کدهای سیستم اعمال میکنند. این موضوع زمانی به معضل تبدیل میشود که ما بخواهیم یک آپدیت جدید برای سیستم ارائه کنیم!
تصور کنید مثلاً یک مشتری سفارش داده است که ما در بخش آزمونها یک امکان جدید به تستای ایشان اضافه کنیم و ما هم این کار را برای او انجام میدهیم و چند روز بعد، به دلایل مختلف (مثلاً رفع یک مشکل و یا اضافه کردن یک امکان به تستای همه مشتریها) یک آپدیت ارائه میکنیم و این یعنی باید چندین فایل جایگزین قبلیها شود. خوب، حالا آن مشتری که فایلهایش را خاص خودش تغییر داده است، باید چه کار کند؟ اگر آپدیت را نصب کند، تمام تغییرت سفارشیشده از بین میرود. اگر نصب نکند، مشکلات رفع نمیشود!
این معضل در تمام پروژههای برنامهنویسی که به صورت عمومی عرضه میشود وجود دارد. حتی در ویندوز و سیستم عاملهای گوشیها.
روشهای برخورد با این مشکل؟
- روش WordPress: جداسازی هسته از پوسته:
از آنجا که اکثر اوقات تغییرات کاربران در پوسته انجام میشود (مثلاً میخواهند ظاهر صفحه اول سیستم تغییر کند) میتوان مانند وردپرس و خیلی سیستمهای دیگر، هسته را از پوسته جدا کرد. در این شرایط شما مطمئن هستید که کاربران در هسته تغییر ایجاد نمیکنند، پس خیلی راحت هر بار هسته را آپدیت میکنید و مشکل خاصی وجود نخواهد داشت.
اما اگر یک کاربر به هر حال بخواهد تغییرات اساسی در سیستم بدهد، باز هم مجبور میشود در هسته دست ببرد که در این حالت وردپرس مفهوم Plugin را مطرح کرده است. پلاگاینها میتوانند هر تغییری در حیطه خودشان بدهند اما هرگز امکان تغییر در هسته را ندارند. مثلاً میتوانند یک جدول به دیتابیس اضافه کنند اما نمیتوانند جداول اصلی سیستم را حذف کنند یا تغییر دهند.
این روش طبیعتاً بهترین روش است اما معایبی هم دارد:
- پیادهسازی این ایده بسیار سخت است. باید هسته آنقدر قدرتمند طراحی شده باشد که هرگز نیاز به تغییر توسط کاربر برای انجام کارهایش نداشته باشد.
- به هر حال، باز هم گاهی برخی تغییرات از عهده پلاگاین خارج است و باید نهایتاً دست در هسته برد.
- روش Apple در iOS: کلاً دسترسی به هسته، ممنوع باشد و کاربران محدود شوند:
میتوان مثل Apple که در iOS این کار را کرده است، دسترسی کاربران به هسته سیستم را ممنوع کرد تا همیشه مطمئن بود که کدهای هستهی کاربر دستکاری نشده و با خیال راحت آپدیت عرضه کرد و مطمئن بود که تمام کاربران هم با خیال راحت سیستم را آپدیت میکنند.
چند روز پیش، اپل کنفرانس WWDC2013 را برگزار کرد. اگر آن سمینار را دیده باشید، تیمکوک رئیس اپل این نمودار را نشان داد:
این نمودار نشان میدهد که ۹۳ درصد کاربران اپل از آخرین نسخه سیستم عامل iOS استفاده میکنند این در حالی است که فقط ۳۳ درصد کاربران آندروید بهروز هستند و از آخرین نسخه استفاده میکنند.
این دقیقاً همین معضلی است که همه برنامهنویسان با آن مواجه هستند!
اگر بخواهیم مثل آندروید، دسترسی به هسته را باز بگذارید، کاربران و شرکتهای مختلف هر تغییری خواستند در هسته میدهند و این، آزادی بیشتری برای آنها فراهم میکند اما عیبش این است که وقتی آپدیت جدید آمد، طبیعتاً نمیشود به همین راحتیها آنرا نصب کرد چون باید قید تمام سفارشیسازیها را زد.
و اگر بخواهیم مثل اپل، دسترسی به هسته را ببندیم که هیچ کس نتواند در آن تغییر ایجاد کند، خوبیاش این است که همه با خیال راحت آپدیتهای جدید را نصب میکنند و عیبش این است که کاربران نمیتوانند تغییرات دلخواهی که گاهی با تغییر یک خط کد انجام میشود را انجام دهند!
از طرفی، در پروژههای تحت وب مثل تستا و نمرا و وردپرس و امثالهم اصلاً امکان بستن دسترسی به هسته وجود ندارد!
- روش دیگر: ارائه Change Log
یکی دیگر از روشهای برخورد با این مشکل این است که برای کسانی که هسته را تغییر ندادهاند، آپدیت رسمی عرضه کرد که با خیال راحت آپدیت را نصب کنند و از امکانات و تغییرات بهره ببرند اما در کنار آن، یک Change Log هم ارائه کرد. Change Log را «لیست تغییرات» ترجمه کنیم. یعنی تیم پشتیبان پروژه باید یک جا بنویسد که چه تغییراتی در سیستم داده است؟ مثلاً باید بنویسید در فایل x.php در خط y فلان کد به کد z تغییر کرده است. در این صورت، کسانی که هسته سیستم را تغییر دادهاند باید خودشان یکی یکی تغییرات جدید را اعمال کنند.
این مطلب را بیشتر برای این نوشتم که یک لیست داشته باشیم که بتوانیم یک Trade Off (سبک سنگین) بین گزینههای پیش رویمان انجام دهیم و یکی را برای آیندهی تستا و نمرا و دیگر سیستمها انتخاب کنیم.
اگر از دوستان برنامهنویس، کسی مقالهای در این زمینه (خارجی بهتر) خوانده و یا ایدهای دارد لطفاً در بخش نظرات ما را در جریان بگذارد.
موفق باشید؛
حمید رضا نیرومند