گام اول دات‌نت کور

نظر به اینکه در حال یادگیری دات‌نت کور هستم. اینجا شاید مکان جالبی باشد که با شما به اشتراک بگذارم هر آنچه در این رابطه میخوانم را:در mvc core ماکروسافت میگه در nuget همه‌ی رفرنس‌ها کتابخانه‌هاش را گذاشته و جهت استفاده باید فقط کانفیگ کرد. برخلاف اپلیکیشن‌های وب قبلی که خیلی چیزها از پیش آماده بود. جهت کانفیگ کردن پکیج‌هایی که میخواهیم در پروژه استفاده کنیم در startup.cs کانفیگ میکنیم.دات‌نت استاندارد که در واقع، حاوی تعریف صرف هست، این تضمین را میدهد که dll تولیدی در همه‌ی کتابخانه‌ها قابل استفاده باشد. جهت قابل استفاده کد نوشته شده در پلتفرم‌های مختلف. (درونی‌ترین قسمت پیاز، همان entityهای ما هستند که با هیچ‌جا ارتباطی ندارند.)برای خواندن از دیتابیس از الگوی repository استفاده میکنیم. و قراردادهای مربوط به دسترسی به دیتا را در فولدر خودش مینویسیم.در پروژه‌ی بزرگ ممکن است end pointهای مختلفی داشته باشیم. وب، وب‌سرویس از این جمله هستند. و برای تنظیمات ابتدایی برنامه نظیر IoC یک پروژه‌ی بوت‌استرپر در نظر میگیرند.اولین قدم در کانفیگ startup تنظیم سرویس‌هاست. برای اینکه تنظیمات وابستگی‌مون مشخص باشه.میا‌ن‌افزارها جهت ساخت پایپ‌لاین بکار برده میشود و جهت هندل کردن درخواست واصله هستند. که به‌ترتیب اجرا میشوند. و مثلا اینجا در آخرین میان‌افزار، میگوید از MVC استفاده کند. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseDeveloperExceptionPage(); app.UseStatusCodePages(); app.UseStaticFiles(); app.UseMvcWithDefaultRoute(); } همینکه اسم فایل به contorller ختم شود کنترل‌ها قابل شناسایی میشود. علت ارث‌بری چیز دیگریست. و در واقع پیاده‌سازی contextDatea هستند که کار را راحت‌تر میکنند جهت بررسی اطلاعات request ارسالی.برای using کردن namespaceها در Viewها میتونیم از _ViewImports.cshtml استفاده کنیم. که ساختار سلسله‌مراتبی هم دارند. در هر فولدری از ویو میتواند باشد.در EF معمولی چون فقط با sql server کار میکرد، شما فقط کافی بود کانکشن استرینگ بهش میدادی. ولی تو EF core باید option از بیرون معرفی کنیم و داخل context بهش تزریق کنیم. چون فقط دیگه با sql server کار نمیکنه.از نصب هرگونه فریم‌ورکی در داخل پروژه entity خوداری میکنیم که مستقل عمل کند و وابستگی نداشته باشد. بنابراین از data annotation نمیتوانیم استفاده کنیم. با تغییر کدها و پیاده‌سازیمون تغییری در UI ایجاد نمیشود و فقط وابستگی را تعویض میکنیم. برنامه‌نویسان جهت حذف وابستگی‌ها که اشیاء در هم گره میخورند و مدیریت تغییرات در آن سخت میشود، را با طراحی Dependency Container برطرف کردند. بدین صورت که، اگر شی‌ای به وهله‌ای از شی دیگر نیاز داشت، به این کانتینر میگوید و او آن وهله را تحویلش میدهد(اینجکت کردن). در واقع وابستگی‌ها در کانتینرها تعریف میشوند. جهت استفاده از DI باید از تایپ‌ها Abstract استفاده کرد که نیاز به وهله‌سازی نداشته باشند و از تعریف concreate آنها خودداری کرد. به روش تزریق سازنده، DI خودش موقع وهله سازی، وابستگی را پاس دهد. چون وابستگی‌ها را دارد مدیریت میکند. تفاوت AddTransient و AddScope و AddSingelton به ترتیب: ساخت تک به تک وهله‌ها - ساخت یک وهله و استفاده در درخواست دیگر - ساخت یک وهله برای کل برنامه. اصل DIP یا Dependency Inversion Principle یکی از اصول SOLID است و به معکوس سازی وابستگی اشاره دارد. یکی از اروش‌‌های رسیدن به این مهم استفاده از تزریق کردن وابستگی‌هاست.معماری پیازیدر درونی‌ترین لایه (لاجیک) ما نباید از هیچ وابستگی و پکیجی استفاده کنیم.در ابتدا، مستقیم با تکنولوژی کار نمیکنیم و فقط با تعریف interface کار را پیش میبریم و هر جا نیاز بود از آن واسط استفاده میکنیم. بعدا از بیرون پیاده‌سازی مورد نظر را inject میکنیم.لایه های داخلی رابط(Interface) ها را تعریف می کند و لایه های بیرونی تر رابط ها را پیاده سازی می کند.مهمترین دلیل برای ایجاد چنین معماری, نیازمندی به ساختاری است تا قابلیت نگهداری برنامه های تحت وب در دراز مدت را فراهم نماید, این نکته با رعایت اصل SOP(Separation Of Concerns) در سرتاسر سیستم بدست می آید.این معماری برای برنامه های تحت وب ساده و کوچک اصلا مناسب نیست