توسط admin | گروه برنامه نویسی BLAZOR | 1405/05/02
نظرات 0
اگر قصد دارید وارد دنیای برنامهنویسی شوید و مسیر حرفهای خود را در اکوسیستم مایکروسافت ادامه دهید، یکی از جذابترین و قدرتمندترین مسیرها، تبدیل شدن به یک برنامهنویس Full-Stack مبتنی بر .NET است.
در این مسیر، برای توسعه بکاند با C#، ASP.NET Core، SQL Server و Entity Framework Core کار میکنید و برای توسعه رابط کاربری نیز میتوانید از Blazor استفاده کنید. نتیجه این مسیر آن است که بتوانید تقریباً تمام اجزای یک نرمافزار تحت وب واقعی را از طراحی پایگاه داده تا ساخت API، رابط کاربری، احراز هویت، گزارشگیری و استقرار نهایی پیادهسازی کنید.
اما سؤال مهم بسیاری از علاقهمندان این است: از کجا باید شروع کنیم و چه چیزهایی را به چه ترتیبی یاد بگیریم؟
زمان تقریبی: برای فردی که بهطور منظم تمرین میکند، رسیدن از سطح مبتدی به سطح قابل قبول برای ورود اولیه به بازار کار معمولاً حدود ۶ تا ۱۲ ماه زمان نیاز دارد. این زمان به سابقه قبلی، میزان تمرین روزانه و کیفیت پروژههایی که انجام میدهید بستگی دارد.
یکی از بزرگترین اشتباهات افراد تازهکار این است که تصور میکنند باید از روز اول Visual Studio را باز کنند و مستقیماً وارد ASP.NET Core یا Blazor شوند. در حالی که قبل از یادگیری هر فریمورکی، باید ابتدا ذهن برنامهنویسی خود را شکل دهید.
برنامهنویسی صرفاً نوشتن دستورهای C# نیست. برنامهنویسی یعنی بتوانید یک مسئله واقعی را به چند مسئله کوچکتر تبدیل کنید و برای هر قسمت راهحل منطقی پیدا کنید.
فرض کنید فروشگاهی قانونی دارد که اگر مبلغ خرید مشتری بیش از ۵ میلیون تومان باشد، ۱۰ درصد تخفیف دریافت کند.
یک برنامهنویس باید مسئله را به این مراحل تقسیم کند:
این مثال ساده دقیقاً همان چیزی است که بعدها در پروژههای بزرگتر اتفاق میافتد؛ فقط قوانین و شرایط پیچیدهتر میشوند.
Git چیزی نیست که یادگیری آن را به پایان مسیر موکول کنید. بهتر است حتی پروژههای تمرینی کوچک خود را نیز با Git مدیریت کنید.
مثلاً وقتی قابلیت «ثبتنام کاربران» را توسعه میدهید، میتوانید یک Branch مجزا برای آن ایجاد کنید و پس از تکمیل و تست، تغییرات را با شاخه اصلی ادغام کنید.
قبل از اینکه Web API بسازید باید بدانید وقتی کاربر آدرس یک سایت را وارد میکند چه اتفاقی میافتد.
با این مفاهیم آشنا شوید:
برای مثال، دریافت لیست محصولات معمولاً با GET، ایجاد محصول جدید با POST و حذف محصول با DELETE انجام میشود.
خروجی مرحله اول: باید بتوانید مسائل ساده را تحلیل کنید، یک صفحه ابتدایی HTML/CSS بسازید، مفهوم Client و Server را بفهمید و پروژههای خود را با Git مدیریت کنید.
پس از یادگیری مفاهیم پایه، باید وارد زبان اصلی اکوسیستم .NET یعنی C# شوید. اشتباه بزرگی است که C# را سطحی بخوانید و سریع وارد ASP.NET Core شوید.
هرچه پایه C# شما قویتر باشد، یادگیری ASP.NET Core، Blazor، Entity Framework Core و معماری نرمافزار سادهتر خواهد شد.
یکی از مهمترین قسمتهای C#، برنامهنویسی شیءگرا است. باید مفاهیم زیر را نه فقط حفظ، بلکه در پروژه واقعی درک کنید:
فرض کنید یک فروشگاه اینترنتی داریم. میتوانیم کلاسی به نام Product داشته باشیم که دارای شناسه، نام، قیمت و موجودی باشد. همچنین کلاسهایی مانند Customer، Order و Payment خواهیم داشت.
هدف OOP این است که سیستم نرمافزاری را تا حد امکان بر اساس مفاهیم واقعی و مسئولیتهای مشخص مدلسازی کنیم.
LINQ یکی از مهمترین قابلیتهایی است که در پروژههای .NET دائماً از آن استفاده خواهید کرد.
فرض کنید هزار محصول داریم و میخواهیم فقط محصولاتی را نمایش دهیم که:
با LINQ میتوان این عملیات را بسیار خوانا انجام داد. بنابراین متدهای زیر را جدی تمرین کنید:
در برنامههای وب، بسیاری از عملیات مانند خواندن اطلاعات از دیتابیس، دسترسی به فایل و فراخوانی APIهای خارجی زمانبر هستند.
مفاهیم Task، async و await کمک میکنند برنامه بتواند این عملیات را به شکل بهینهتری مدیریت کند.
این موضوع در ASP.NET Core بسیار مهم است و تقریباً در تمام پروژههای واقعی با متدهایی مانند موارد زیر مواجه خواهید شد:
یک برنامه Console برای مدیریت فروشگاه بسازید که امکانات زیر را داشته باشد:
خروجی مرحله دوم: باید بتوانید بدون وابستگی دائمی به آموزش، یک برنامه C# متوسط را طراحی کنید و مفاهیم OOP، LINQ، Collections و Async/Await را در عمل به کار ببرید.
تقریباً هیچ نرمافزار تجاری جدی بدون داده وجود ندارد. کاربران، محصولات، سفارشها، پیامها، تراکنشها، گزارشها و تنظیمات سیستم باید در یک ساختار قابل اعتماد ذخیره شوند.
در اکوسیستم مایکروسافت، SQL Server یکی از مهمترین پایگاههای داده رابطهای است.
فرض کنید یک فروشگاه اینترنتی داریم. میتوانیم جداول اصلی زیر را داشته باشیم:
نباید همه اطلاعات را داخل یک جدول عظیم ذخیره کنیم. باید ارتباط بین موجودیتها را طراحی کنیم.
CRUD شامل چهار عملیات اصلی است:
باید بتوانید دستورات اصلی SQL را بنویسید:
فرض کنید میخواهید گزارشی نمایش دهید که شماره سفارش، نام مشتری، تاریخ سفارش و مبلغ را نشان دهد.
اطلاعات مشتری در جدول Users و اطلاعات سفارش در Orders قرار گرفته است. برای ترکیب این اطلاعات باید از JOIN استفاده کنید.
تصور کنید جدول تراکنشهای شما میلیونها رکورد دارد و کاربران دائماً بر اساس تاریخ یا شناسه مشتری جستجو میکنند.
Index مناسب میتواند سرعت جستجو را به شکل چشمگیری افزایش دهد؛ اما ساخت Index بیهدف نیز میتواند هزینه عملیات Insert و Update را بالا ببرد.
پس از اینکه SQL را یاد گرفتید، وارد Entity Framework Core شوید.
مفاهیم مهم EF Core عبارتاند از:
نکته بسیار مهم: Entity Framework Core جایگزین یادگیری SQL نیست. یک برنامهنویس حرفهای باید بداند ORM چه Queryای تولید میکند و آن Query چه تأثیری روی دیتابیس دارد.
در این مرحله وارد بخش بسیار مهم مسیر یعنی ASP.NET Core میشویم.
ASP.NET Core برای ساخت Web API، وباپلیکیشن، سرویسهای سازمانی و سیستمهای Cloud-Based مورد استفاده قرار میگیرد.
فرض کنید Blazor باید لیست محصولات را دریافت کند. یک Endpoint میتواند به این صورت باشد:
اما ساخت API فقط ایجاد چند Controller نیست. باید طراحی RESTful، Status Codeها، Validation و امنیت را نیز درک کنید.
Dependency Injection یکی از مهمترین مفاهیم ASP.NET Core است.
فرض کنید ProductController برای انجام عملیات مربوط به محصولات به ProductService نیاز دارد. بهتر است Controller مستقیماً ProductService را ایجاد نکند، بلکه آن را از سیستم Dependency Injection دریافت کند.
Lifetimeهای مهم را بشناسید:
انتخاب اشتباه Lifetime میتواند در پروژههای واقعی مشکلات جدی ایجاد کند.
Authentication یعنی مشخص کنیم کاربر چه کسی است و Authorization یعنی مشخص کنیم آن کاربر اجازه انجام چه کاری را دارد.
فرض کنید سیستم سه نقش دارد:
مشتری نباید بتواند وارد بخش مدیریت کاربران شود. مدیر نیز ممکن است برخی دسترسیها را داشته باشد، اما اجازه تغییر تنظیمات حیاتی را نداشته باشد.
موضوعات مهم عبارتاند از:
هرگز نباید به دادهای که از کاربر دریافت میشود اعتماد کنید.
برای مثال در ثبت کاربر باید بررسی شود:
همچنین باید یک ساختار مناسب برای مدیریت Exceptionها و نمایش پاسخ استاندارد به Client داشته باشید.
در محیط Production نمیتوان برای پیدا کردن خطا فقط به Debugger وابسته بود.
Logging باید اتفاقاتی مانند موارد زیر را ثبت کند:
Swagger/OpenAPI نیز مستندسازی و تست APIها را بسیار سادهتر میکند.
خروجی این مرحله: باید بتوانید یک Web API واقعی شامل CRUD، Authentication، Authorization، Validation، Logging، SQL Server، EF Core و Swagger بسازید.
بعد از ساخت بکاند، به رابط کاربری نیاز داریم. در اکوسیستم .NET، Blazor امکان ساخت رابطهای کاربری مدرن را با استفاده از C# فراهم میکند.
یک برنامه Blazor از Componentهای مختلف تشکیل میشود.
برای مثال:
هر Component بهتر است مسئولیت مشخصی داشته باشد و قابلیت استفاده مجدد نیز تا حد امکان در طراحی آن رعایت شود.
صفحات سیستم میتوانند Routeهای مختلف داشته باشند:
Layout نیز برای بخشهای مشترکی مانند Header، Sidebar، Menu و Footer استفاده میشود.
در پروژههای واقعی با فرمهای زیادی سروکار داریم:
در Blazor میتوانید از EditForm و سیستم Validation استفاده کنید، اما نکته مهم این است که Validation سمت Client هرگز جایگزین Validation سمت Server نیست.
در این مرحله Back-End و Front-End به یکدیگر متصل میشوند.
مثلاً Blazor با HttpClient درخواست زیر را ارسال میکند:
GET /api/products
API اطلاعات را بهصورت JSON برمیگرداند و Blazor آن را در Table یا Card نمایش میدهد.
فرض کنید کاربر محصولی را به سبد خرید اضافه کرده و بین چند صفحه حرکت میکند. اطلاعات سبد خرید نباید با هر Navigation از بین برود.
همین مسئله برای اطلاعات کاربر Login شده نیز وجود دارد.
بنابراین باید روشهای مدیریت State را یاد بگیرید.
حتی اگر Blazor استفاده میکنید، JavaScript کاملاً از زندگی شما حذف نمیشود.
گاهی برای استفاده از ابزارهایی مانند موارد زیر به JavaScript Interop نیاز دارید:
تا اینجا میتوانید نرمافزار بسازید؛ اما حالا باید یاد بگیرید چگونه نرمافزاری بسازید که بعد از چند سال نیز قابل نگهداری باشد.
پنج اصل SOLID عبارتاند از:
قرار نیست این اسامی را فقط حفظ کنید. باید بفهمید چه مشکلی را حل میکنند.
مثلاً اگر UserService هم کاربر ثبت کند، هم ایمیل بفرستد، هم PDF تولید کند، هم پرداخت انجام دهد و هم Log بنویسد، به احتمال زیاد بیش از حد مسئولیت گرفته است.
در معماریهای حرفهای معمولاً مسئولیتها از یکدیگر جدا میشوند.
یک ساختار رایج میتواند شامل موارد زیر باشد:
Domain شامل مفاهیم اصلی کسبوکار است. Application شامل Use Caseها است. Infrastructure جزئیاتی مانند دیتابیس، ایمیل و فایل را مدیریت میکند و Presentation رابط API یا UI را ارائه میدهد.
نکته: صرفاً ساختن چهار Class Library و نامگذاری آنها به Domain و Application و Infrastructure به معنای پیادهسازی Clean Architecture نیست. مهمترین مسئله، جهت وابستگیها و مسئولیت هر لایه است.
برخی Patternهای مهم عبارتاند از:
Pattern را نباید به زور وارد پروژه کرد. ابتدا باید مسئلهای واقعی وجود داشته باشد و سپس Pattern مناسب را انتخاب کنید.
Entityهای دیتابیس را نباید همیشه مستقیماً برای Client ارسال کنید.
مثلاً User Entity ممکن است شامل PasswordHash و اطلاعات داخلی امنیتی باشد. در حالی که UserDto فقط میتواند شامل اطلاعات زیر باشد:
دو نوع تست بسیار مهم عبارتاند از:
برای مثال میتوانید الگوریتم محاسبه تخفیف سفارش را Unit Test کنید و سپس فرآیند ثبت سفارش از API تا دیتابیس را Integration Test کنید.
پروژهای که فقط روی کامپیوتر برنامهنویس اجرا شود، هنوز محصول واقعی نیست.
باید یاد بگیرید نرمافزار چگونه Build، Test، Deploy و Monitor میشود.
با Postman میتوانید APIها را مستقل از Front-End آزمایش کنید.
Docker کمک میکند محیط اجرای نرمافزار استاندارد و قابل انتقالتر باشد.
برای مثال یک پروژه میتواند شامل Containerهای زیر باشد:
با Docker Compose میتوان این سرویسها را با تنظیمات مشخص کنار یکدیگر اجرا کرد.
در یک تیم حرفهای نباید هر بار یک نفر بهصورت دستی فایلها را روی سرور Copy کند.
یک Pipeline میتواند مراحل زیر را انجام دهد:
ابزارهایی مانند موارد زیر در این زمینه کاربرد دارند:
در بسیاری از سازمانهای مبتنی بر فناوری مایکروسافت، IIS همچنان اهمیت زیادی دارد.
در Azure نیز برای شروع لازم نیست صدها سرویس را یاد بگیرید.
ابتدا این موارد کافی هستند:
این مرحله شاید مهمترین بخش تمام نقشه راه باشد.
ممکن است فردی ۵۰۰ ساعت فیلم آموزشی دیده باشد، اما وقتی یک Solution خالی در Visual Studio باز میکند نداند پروژه را از کجا شروع کند.
دلیل آن مشخص است:
تماشای برنامهنویسی با برنامهنویسی کردن متفاوت است.
یک To-Do Application یا Blog بسازید.
مثلاً To-Do شما قابلیتهای زیر را داشته باشد:
حالا یکی از پروژههای زیر را انتخاب کنید:
در این پروژه قابلیتهای حرفهایتری اضافه کنید:
پروژه سوم باید چیزی باشد که بتوانید با افتخار در رزومه و Portfolio خود نمایش دهید.
برای مثال یک سیستم مدیریت فروش کامل شامل:
Repositoryهای شما باید مرتب باشند و برای پروژههای مهم README مناسب بنویسید.
README بهتر است شامل موارد زیر باشد:
بهجای اینکه فقط بنویسید:
«ASP.NET Core بلدم.»
بهتر است بنویسید:
«یک سامانه Full-Stack مدیریت فروش با ASP.NET Core، Blazor، SQL Server، Entity Framework Core و JWT Authentication طراحی و روی سرور Deploy کردهام.»
این جمله نشان میدهد فناوری را فقط مطالعه نکردهاید، بلکه با آن محصول ساختهاید.
در پایان این مسیر باید بتوانید:
خیر. یکی از باورهای اشتباه در صنعت نرمافزار این است که برنامهنویس بعد از چند سال حتماً باید مدیریت را انتخاب کند.
مسیر فنی میتواند به شکل زیر ادامه پیدا کند:
در مقابل، مسیر مدیریتی ممکن است شامل موارد زیر باشد:
یک برنامهنویس بسیار حرفهای ممکن است هیچ علاقهای به مدیریت افراد، جلسات متعدد، بودجه و برنامهریزی منابع نداشته باشد و ترجیح دهد در مسیر فنی پیشرفت کند.
این انتخاب نهتنها اشتباه نیست، بلکه در بسیاری از شرکتهای حرفهای دنیا، مسیر فنی و مدیریتی دو مسیر رشد مستقل محسوب میشوند.
اگر روزانه حدود سه ساعت برای یادگیری زمان دارید، میتوانید برنامه خود را به این شکل تقسیم کنید:
اگر زمان بیشتری دارید، بهتر است زمان اضافه را به پروژه اختصاص دهید، نه اینکه فقط ویدئوهای بیشتری تماشا کنید.
لازم نیست همزمان React، Angular، Vue، Blazor، Java، Python، Node.js و .NET را یاد بگیرید.
ابتدا روی یک Stack متمرکز شوید:
Tutorial Hell زمانی اتفاق میافتد که فرد دائماً دوره آموزشی میبیند اما خودش پروژهای از صفر نمیسازد.
نشانه واضح آن این است که وقتی مدرس کدنویسی میکند همه چیز ساده به نظر میرسد، اما وقتی یک پروژه خالی باز میکنید نمیدانید از کجا شروع کنید.
راهحل: کمتر تماشا کنید و بیشتر کدنویسی کنید.
اولین To-Do App شما نیازی ندارد با Microservices، Kubernetes، Kafka، Event Sourcing و دهها Pattern طراحی شود.
ابتدا یاد بگیرید یک Modular Monolith یا Monolith تمیز و قابل نگهداری بسازید. سپس وقتی مسئله واقعی ایجاد شد، ابزار مناسب را انتخاب کنید.
استفاده از Google، Stack Overflow و ابزارهای هوش مصنوعی طبیعی است؛ اما هر کدی که وارد پروژه میکنید باید تا حد قابل قبول بدانید:
برای تبدیل شدن به یک برنامهنویس Full-Stack در اکوسیستم مایکروسافت لازم نیست از روز اول همه چیز را بدانید.
مسیر را مرحلهبهمرحله طی کنید:
اما مهمترین نکته تمام این مقاله را میتوان در یک جمله خلاصه کرد:
یک برنامهنویس حرفهای با تعداد دورههایی که دیده است شناخته نمیشود؛ بلکه با چیزهایی که میتواند از صفر تحلیل، طراحی، پیادهسازی، تست و Deploy کند شناخته میشود.
پروژه بسازید، اشتباه کنید، باگ ایجاد کنید، Debug کنید، دوباره طراحی کنید و چند ماه بعد به کد قدیمی خودتان برگردید.
همین تجربهها هستند که شما را از فردی که فقط Syntax یک زبان را میداند، به یک Software Developer و در ادامه یک Software Engineer حرفهای تبدیل میکنند.
کلید موفقیت:
نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.