بهنام خدا
چند سال پیش بود که به سفارش یکی از مشتریانم کار بر روی یک پروژه بهنام کنترل و مدیریت خوراک دام را شروع کردم. آن زمان هنوز asp.net core به بلوغ نرسیده بود و تازه در ابتدای مسیر توسعه بود و خیلی توجه من را به خودش جلب نکرده بود. آن زمان پروژه را با asp.net mvc5 شروع کردم. پروژه در اختیار مشتریان قرار گرفت و چند بروزرسانی اساسی نیز دریافت کرد. اما با گذشت زمان asp.net core به یک چارچوب کامل تبدیل شد و من پروژههای بعدیم را با استفاده از این چارچوب پیادهسازی کردم.
حدود یک ماه پیش همان مشتری درخواستهای جدیدی برای من ارسال کرد و خواست که برنامهی کنترل و مدیریت خوراک دام بروز شود. بررسیهایی انجام دادم و جوانب را سنجدیم و پیشنهاد دادم که چارچوب asp.net mvc5 را کنار بگذاریم و به asp.net core mvc مهاجرت کنیم. در آینده تمام تجربیات خودم را در این مسیر به دوستان به اشتراک خواهم گذاشت.
چرایی مهاجرت از asp.net به asp.net core
برای گرفتن هر تصمیمی باید دلایل مناسبی داشتهباشیم. بالخصوص اگر لازم باشد که دیگری را قانع کنیم و مهمتر از آن سرمایه جذب کنیم. اما در این پروژه عامل دیگری نیز سختی انتخاب را دو چندان کرده بود. این عامل چیزی نبود جز سختی مسیر و انسان از سختی فراری است. حالا چه شد که من با خودم کنار آمدم و این سختی را پذیرفتم؟ در زیر دلایلم را بیان میکنم. حتماً مدنظر دارید که من از ویژگیهای asp.net core یا معایب asp.net صحبت نمیکنم. ممکن است این دلایل شما را برای این مهاجرت قانع نکند.
۱- سختی کار کردن با چارچوبهای مختلف
بهدلیل کار کردن در فضایی که باید در چندین سیستمعامل برنامهنویسی میکردم و زبانهای برنامهنویسی مختلف را استفاده میکردم، هر کدام از این برنامهها نیز چارچوب خود را داشتند. بسیار سخت بود که برای طراحی وب با زبان برنامهنویسی #C از دو چارچوب استفاده کنم. ذهنم برای تنظیمات و استفاده از چارچوب asp.net بسیار خسته میشد. (خوب سادگی چارچوب asp.net core را دوست داشتم)
۲- تزریق وابستگی
اگر بخواهید که معماری مناسبی برای نرمافزارتان در نظر بگیرید باید ابزاری برای تزریق وابستگی داشتهباشید. این ابزار به صورت پیشفرض در asp.net وجود ندارد. ولی افزونههایی برای اینکار ایجاد شدهاست. من تجربهی کار کردن با این افزونهها را دارم، انصافاً پیادهسازی سخت و زمانبری دارد. در مقابل معماری asp.net core به گونهایست که تزریق وابستگی را به صورت پیشفرض پشتیبانی میکند و پیادهسازی آن مثل آب خوردن است.
۳- مدیریت فایلهای ایستا و کتابخانههای سمت کاربر
asp.net ابزاری برای مدیریت کتابخانههای سمت کاربر و فایلهای ایستا ندارد حتی در پوشههای پیشفرض جایی برای آنها در نظر گرفته نشدهاست. و من طبق تجربه ابزارهای دیگری همانند webpack را به صورت همزمان برای این کار استفاده میکردم. انصافاً کار سختی بودی و دانش سربار بسیاری لازم داشت.در مقابل asp.net core به صورت پیشفرض پوشهای بهنام wwwroot دارد که فایلهای استاتیک در آن قرار دارد. همچنین ابزار libman را برای مدیریت کتابخانههای سمت کاربر ارائه کردهاست.
۴- مستندات قوی
شاید برای شما هم پیش آمده باشد که بخواهید روش انجام کاری را در یک چارچوب به صورت اصولی بدانید و خود را به استفاده از مستندات رسمی ملزم بدانید. حال اگر این مستندات بهصورت مناسب سازماندهی نشدهباشد و یا بدتر آن مستنداتی وجود نداشتهباشد چه خواهید کرد؟ asp.net core به دلیل آنکه از ابتدا به صورت opensource توسعه یافتهاست، مستندات قابل استفاده برای کاربر بهعنوان یکی از محصولات در هر مرحله توسعه داده شدهاست و درحال حاضر جامع و شامل است و تمام نیازهای یک کاربر را پوشش میدهد.
۵- معماری تمیز
بعد از مدتی کار کردن در زمینه نرمافزار و استفاده از معماریهای مختلفی همچون mvc، mvvm و غیره. با معماری تمیز آشنا شدم. بحث در مورد این معماری خود نیازمند مطالب جدایی میباشد. اما استفاده از این معماری اجتناب ناپذیر است. با جستجو در اینترنت مطالبی که مرتبط با asp.net و این معماری باشد نیافتم. اما مطالب مفیدی در این زمینه مرتبط با asp.net core وجود دارد.
۶- آینده زیستبوم ماکروسافت
توسعهدهندگانی همچون من که از ابزارهای ماکروسافت برای توسعه استفاده میکنند باید آینده فناوری در این سازمان را بدانند. ماکروسافت چندی هست که به توسعه چارچوب core اهتمام دارد. ابزارها و ویژگیهای مختلفی نیز برای آن ارائه کردهاست. تکنولوژیهای آیندهی این سازمان مبتنی بر چارچوب dotnet core خواهد بود و هر نرمافزاری برای توسعه و حضور در بازار باید از این قاعده پیروی کند.
شاید چارچوب dotnet core آنقدر ویژگیهای جذابی برای توسعهدهنده دارد که حرکت به سوی آن را اجتناب ناپذیر میکند، اما ارتقاء دادن نرمافزار موجود با چارچوب asp.net mvc به چارچوب asp.net core کاری پر ریسک و سختی است. در ادامهی این مطالب به شرح این مسیر پر فراز و نشیب خواهم پرداخت.