نگاهی دوباره به Razor Pages
تیم ASP Core تلاش زیادی می کند استفاده از Razor Pages را بجای MVC جا بندازد. الگوی MVC سالها از محبوبترین روشهای پیاده سازی سایت بوده است اما اشکالاتی هم دارد.
در الگوی MVC همیشه نیاز به کنترلر دارید. حتی وقتی می خواهید یک صفحه ی ساده "ارتباط با ما" نمایش دهید باید کنترلر و اکشن داشته باشید. همچنین مدل و ویو و کنترلر در فولدرهای مجزا نگه داری میشوند و مدیریت کردن پروژه در درازمدت سخت میشود. اگر بخواهید یک کنترلر را به همراه مدل و ویوهایش به یک پروژه ی دیگر منتقل کنید با دردسرهای زیادی روبرو هستید.
در Razor Pages دیگر کنترلر نداریم و اکشن ها می توانند درون فایل ویو یا در یک فایل همنام ویو (مانند کلاسهای Win Form) قرار گیرند. در الگوی MVC در واقع Controller اهمیت ندارد بلکه اکشن های درون کنترلر هستند که درخواستها را مدیریت می کنند. این دقیقا بخشی است که Razor Pages روی آن تاکید دارد.
وقتی از Razor Pages استفاده می کنید تمام قابلیتهای MVC را دارید. بخشی از MVC است و درون یک سرویس بارگذاری میشود. وقتی یک پروژه ی MVC در ASP Core ایجاد می کنید همزمان Razor Page هم به پروژه اضافه میشود. می توانید بخشی از سایت را MVC و بخش دیگر را با Razor Page طراحی کنید.
در Razor Page طراحی سایت بجای کنترلر روی صفحه تمرکز دارد. ابتدا صفحه ی HTML را ایجاد می کنید و سپس اکشن های آن را (اگر لازم داشت) می سازید. برای سایتهایی که صفحات زیادی دارند گزینه ی مناسبی است اما برای وب سرویس ها یا پروژه هایی که از AJAX زیاد استفاده می کنند کارایی ندارد.
مایکروسافت تاکید می کند که Razor Page فقط برای طراحی سایت های کوچک نیست و می توانید برای پیاده سازی هر سایتی از آن استفاده کنید. اما برنامه نویسان پر سابقه ی MVC هنوز با شک و تردید به این تکنولوژی نگاه می کنند.
تیم ASP Core تلاش زیادی می کند استفاده از Razor Pages را بجای MVC جا بندازد. الگوی MVC سالها از محبوبترین روشهای پیاده سازی سایت بوده است اما اشکالاتی هم دارد.
در الگوی MVC همیشه نیاز به کنترلر دارید. حتی وقتی می خواهید یک صفحه ی ساده "ارتباط با ما" نمایش دهید باید کنترلر و اکشن داشته باشید. همچنین مدل و ویو و کنترلر در فولدرهای مجزا نگه داری میشوند و مدیریت کردن پروژه در درازمدت سخت میشود. اگر بخواهید یک کنترلر را به همراه مدل و ویوهایش به یک پروژه ی دیگر منتقل کنید با دردسرهای زیادی روبرو هستید.
در Razor Pages دیگر کنترلر نداریم و اکشن ها می توانند درون فایل ویو یا در یک فایل همنام ویو (مانند کلاسهای Win Form) قرار گیرند. در الگوی MVC در واقع Controller اهمیت ندارد بلکه اکشن های درون کنترلر هستند که درخواستها را مدیریت می کنند. این دقیقا بخشی است که Razor Pages روی آن تاکید دارد.
وقتی از Razor Pages استفاده می کنید تمام قابلیتهای MVC را دارید. بخشی از MVC است و درون یک سرویس بارگذاری میشود. وقتی یک پروژه ی MVC در ASP Core ایجاد می کنید همزمان Razor Page هم به پروژه اضافه میشود. می توانید بخشی از سایت را MVC و بخش دیگر را با Razor Page طراحی کنید.
در Razor Page طراحی سایت بجای کنترلر روی صفحه تمرکز دارد. ابتدا صفحه ی HTML را ایجاد می کنید و سپس اکشن های آن را (اگر لازم داشت) می سازید. برای سایتهایی که صفحات زیادی دارند گزینه ی مناسبی است اما برای وب سرویس ها یا پروژه هایی که از AJAX زیاد استفاده می کنند کارایی ندارد.
مایکروسافت تاکید می کند که Razor Page فقط برای طراحی سایت های کوچک نیست و می توانید برای پیاده سازی هر سایتی از آن استفاده کنید. اما برنامه نویسان پر سابقه ی MVC هنوز با شک و تردید به این تکنولوژی نگاه می کنند.
چه سیستم عامل هایی از ASP Core پشتیبانی می کنند ؟
فریم ورک ASP Core با هدف پشتیبانی از چند سیستم عامل شروع شد. این پروژه آنقدر موفق بود که مایکروسافت تصمیم گرفت تیم ASP را مامور پروژه ی جدید دات نت کند. بجای ASP کار روی نسخه ی جدید دات نت ادامه پیدا کرد و حالا dotnet Core علاوه بر پشتیبانی از 80 درصد dotnet 4.5 روی همه ی سیستم عامل های محبوب اجرا می شود.
مایکروسافت پا را فراتر گذاشت و حالا یک نسخه از Visual Studio را هم برای macOS منتشر کرده است. یعنی برنامه نویسانی که به محصولات اپل علاقه دارند هم می توانند روی پروژه های دات نت Core کار کنند.
در این میان موفق ترین محصول را می توان بدون شک VSCode دانست. این ادیتور کم حجم حالا به محبوب ترین ابزار کد نویسی تبدیل شده است و بسیاری از برنامه نویسان قدیمی Python یا PHP را به سمت خود کشانده است. پشتبانی از چند سیستم عامل و محیط کاربری ساده و خوش دست در کنار افزونه های فراوان ابزاری را فراهم کرده است که کهنه کار ترین طرفداران Eclipse و Sublime را قانع کند.
برای برنامه نویسی ASP Core در لینوکس کافی است SDK آن را نصب کنید و با استفاده از Command Line Interface در خط فرمان پروژه را بیلد یا اجرا کنید. در این میان VSCode تجربه ی کاملی از کار با سی شارپ و دی باگ فراهم می کند. همچنین به راحتی می توانید سورس کدها را در GIT نگه داری کنید.
لیست کامل سیستم عامل هایی که ASP Core پشتیبانی می کند را در لینک زیر دنبال کنید :
https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0-supported-os.md
فریم ورک ASP Core با هدف پشتیبانی از چند سیستم عامل شروع شد. این پروژه آنقدر موفق بود که مایکروسافت تصمیم گرفت تیم ASP را مامور پروژه ی جدید دات نت کند. بجای ASP کار روی نسخه ی جدید دات نت ادامه پیدا کرد و حالا dotnet Core علاوه بر پشتیبانی از 80 درصد dotnet 4.5 روی همه ی سیستم عامل های محبوب اجرا می شود.
مایکروسافت پا را فراتر گذاشت و حالا یک نسخه از Visual Studio را هم برای macOS منتشر کرده است. یعنی برنامه نویسانی که به محصولات اپل علاقه دارند هم می توانند روی پروژه های دات نت Core کار کنند.
در این میان موفق ترین محصول را می توان بدون شک VSCode دانست. این ادیتور کم حجم حالا به محبوب ترین ابزار کد نویسی تبدیل شده است و بسیاری از برنامه نویسان قدیمی Python یا PHP را به سمت خود کشانده است. پشتبانی از چند سیستم عامل و محیط کاربری ساده و خوش دست در کنار افزونه های فراوان ابزاری را فراهم کرده است که کهنه کار ترین طرفداران Eclipse و Sublime را قانع کند.
برای برنامه نویسی ASP Core در لینوکس کافی است SDK آن را نصب کنید و با استفاده از Command Line Interface در خط فرمان پروژه را بیلد یا اجرا کنید. در این میان VSCode تجربه ی کاملی از کار با سی شارپ و دی باگ فراهم می کند. همچنین به راحتی می توانید سورس کدها را در GIT نگه داری کنید.
لیست کامل سیستم عامل هایی که ASP Core پشتیبانی می کند را در لینک زیر دنبال کنید :
https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0-supported-os.md
GitHub
dotnet/core
Home repository for .NET Core. Contribute to dotnet/core development by creating an account on GitHub.
آشنایی با Redis
دیتابیس Redis در واقع از نوع Non-Relational است و در آن از جدول و ردیف خبری نیست. این دیتابیس انواع مختلف اطلاعات را به صورت Key/Value دخیره می کند و در نوع خود سریعترین به شمار می رود.
دیتابیس های SQL در دیسک ذخیره می شوند و رفت و برگشت اطلاعات به آنها طول می کشد. در مقابل Redis از حافظه رم استفاده می کند که فوق العاده سریع است. اطلاعاتی که زیاد مورد استفاده قرار می گیرد درون آن کش میشود و دیگر رفت و برگشت به دیتابیس وجود ندارد. به همین دلیل سرعت پردازش اطلاعات با استفاده از Redis بیشتر میشود.
سایت هایی که ترافیک زیادی دارند معمولا از Redis برای کش کردن اطلاعات استفاده می کنند. می توان از آن به عنوان یک دیتابیس NoSQL هم استفاده کرد و اطلاعاتش را در دیسک ذخیره کرد.
این دیتابیس به زبان C و برای سیستم عامل لینوکس طراحی شده است اما امکان نصب آن روی ویندوز وجود دارد. در ASP Core به راحتی می توانید با استفاده از یک Nuget Package از آن استفاده کنید.
دیتابیس Redis در واقع از نوع Non-Relational است و در آن از جدول و ردیف خبری نیست. این دیتابیس انواع مختلف اطلاعات را به صورت Key/Value دخیره می کند و در نوع خود سریعترین به شمار می رود.
دیتابیس های SQL در دیسک ذخیره می شوند و رفت و برگشت اطلاعات به آنها طول می کشد. در مقابل Redis از حافظه رم استفاده می کند که فوق العاده سریع است. اطلاعاتی که زیاد مورد استفاده قرار می گیرد درون آن کش میشود و دیگر رفت و برگشت به دیتابیس وجود ندارد. به همین دلیل سرعت پردازش اطلاعات با استفاده از Redis بیشتر میشود.
سایت هایی که ترافیک زیادی دارند معمولا از Redis برای کش کردن اطلاعات استفاده می کنند. می توان از آن به عنوان یک دیتابیس NoSQL هم استفاده کرد و اطلاعاتش را در دیسک ذخیره کرد.
این دیتابیس به زبان C و برای سیستم عامل لینوکس طراحی شده است اما امکان نصب آن روی ویندوز وجود دارد. در ASP Core به راحتی می توانید با استفاده از یک Nuget Package از آن استفاده کنید.
انواع هویت سنجی در ASP Core Identity
ابزار Identity در ASP Core مسئولیت تشخیص هویت و کنترلر دسترسی را به عهده دارد. این ابزار در نسخه های قبل هم وجود داشت اما مانند سایر قسمتها باز نویسی شده است. در اینجا به سه روش اصلی کنترل دسترسی در Idenity Core می پردازیم.
روش Role-Based
در این روش کاربر بر اساس سمتی که دارد به بخش هایی از سایت دسترسی پیدا می کند. مثلا دسترسی به بخش مدیریت سایت فقط برای کاربرهایی با سمت Admin میسر است. در اینجا ما یک جدول برای نگه داری سمت ها داریم و یک جدول هم برای نگه داری رابطه ی بین کاربران با هر سمت. یک کاربر می تواند چندین سمت داشته باشد.
روش Claims-Based
نسخه ی جدید ASP Core تاکید زیادی به استفاده از این روش دارد. در این روش یک کاربر می تواند چند هویت داشته باشد. هر هویت مشخصه های خودش را دارد. دسترسی های یک کاربر بر اساس مشخصه های هر هویت فرق می کند. مثلا شما برای گرفتن وام به بانک مراجعه می کنید و برای شناسایی کارت ملی ارائه می کنید. مشخصات کارت ملی بخشی از مشخصات شما شامل نام و تاریخ تولد را نشان می دهد و یکی از هویت های شما محسوب میشود. حالا اگر بخواهید وام دانشجویی بگیرید باید ثابت کنید دانشجو هستید. در این مرحله کارت دانشجویی ارائه می کنید که شامل نام دانشگاه و شماره ی دانشجویی است. در سیستم Claims-Based انواع مشخصات شما در یک جدول key/value دخیره می شود و بعدا می توانید دسترسی به اکشن ها و کنترلر ها را بر اساس آن محدود کنید.
روش Policy-Based
این شیوه ترکیبی از روشهای قبل است. می توانید برای اجرای هر کدام از اکشنها یک سیاست یا Policy تعریف کنید که می تواند شامل مجموعه از سمت ها و مشخصه های هویتی (Claims) باشد.
علاوه بر اینها چند روش دیگر هم وجود دارد و باید گفت نسخه ی جدید از هر نظر کامل است. به طور کلی پیاده کردن سیستم امنیتی پیچیده است و بهتر است همیشه از Identity استفاده کنید. این سیستم بسیاری از نکات مهم مانند رمز نگاری را به خوبی رعایت کرده است و سطح امنیت سایت را به میزان قابل توجهی بالا می برد.
ابزار Identity در ASP Core مسئولیت تشخیص هویت و کنترلر دسترسی را به عهده دارد. این ابزار در نسخه های قبل هم وجود داشت اما مانند سایر قسمتها باز نویسی شده است. در اینجا به سه روش اصلی کنترل دسترسی در Idenity Core می پردازیم.
روش Role-Based
در این روش کاربر بر اساس سمتی که دارد به بخش هایی از سایت دسترسی پیدا می کند. مثلا دسترسی به بخش مدیریت سایت فقط برای کاربرهایی با سمت Admin میسر است. در اینجا ما یک جدول برای نگه داری سمت ها داریم و یک جدول هم برای نگه داری رابطه ی بین کاربران با هر سمت. یک کاربر می تواند چندین سمت داشته باشد.
روش Claims-Based
نسخه ی جدید ASP Core تاکید زیادی به استفاده از این روش دارد. در این روش یک کاربر می تواند چند هویت داشته باشد. هر هویت مشخصه های خودش را دارد. دسترسی های یک کاربر بر اساس مشخصه های هر هویت فرق می کند. مثلا شما برای گرفتن وام به بانک مراجعه می کنید و برای شناسایی کارت ملی ارائه می کنید. مشخصات کارت ملی بخشی از مشخصات شما شامل نام و تاریخ تولد را نشان می دهد و یکی از هویت های شما محسوب میشود. حالا اگر بخواهید وام دانشجویی بگیرید باید ثابت کنید دانشجو هستید. در این مرحله کارت دانشجویی ارائه می کنید که شامل نام دانشگاه و شماره ی دانشجویی است. در سیستم Claims-Based انواع مشخصات شما در یک جدول key/value دخیره می شود و بعدا می توانید دسترسی به اکشن ها و کنترلر ها را بر اساس آن محدود کنید.
روش Policy-Based
این شیوه ترکیبی از روشهای قبل است. می توانید برای اجرای هر کدام از اکشنها یک سیاست یا Policy تعریف کنید که می تواند شامل مجموعه از سمت ها و مشخصه های هویتی (Claims) باشد.
علاوه بر اینها چند روش دیگر هم وجود دارد و باید گفت نسخه ی جدید از هر نظر کامل است. به طور کلی پیاده کردن سیستم امنیتی پیچیده است و بهتر است همیشه از Identity استفاده کنید. این سیستم بسیاری از نکات مهم مانند رمز نگاری را به خوبی رعایت کرده است و سطح امنیت سایت را به میزان قابل توجهی بالا می برد.
چرا Docker طرفدار دارد ؟
در گذشته اگر می خواستید یک برنامه ی ASP با دیتابیس MSSQL در سرور لینوکس اجرا کنید باید یک ماشین مجازی می ساختید و روی آن ویندوز نصب می کردید و بعد تازه دات نت و SQL Server نصب می کردید. تازه می توانستید سایت را روی IIS اجرا کنید.
وقتی از Docker استفاده می کنید نیاز به ماشین مجازی ندارید. علاوه بر این نیاز به نصب نرم افزارهای جانبی مانند SQL Server هم ندارید. می توانید کل سایت و دیتابیس و حتی کل SQL Server را درون یک فایل که اصطلاحا Container خوانده میشود قرار دهید و آن را در لینکوس با یک خط فرمان اجرا کنید. با داکر یک برنامه همه جا یکسان کار میکند. در واقع با داکر عبارت معروف " روی سیستم من که اجرا میشه " دیگر از بین میرود.
هر چند ASP Core خودش در لینکوس و macOS قابل اجرا است اما استفاده از Docker عملیات انتشار سایت را بسیار ساده می کند. مخصوصا وقتی که برنامه ی شما قرار است روی چند سرور اجرا شود یا قصد جابجایی آن را به یک سرور جدید داشته باشید فقط باید یک فایل را کپی کنید.
خیلی از نرم افزارها نسخه ی Docker دارند که مانند Nuget از Docker Hub قابل دانلود و نصب است. مثلا SQL Server 2017 را می توانید با حجم 2 گیگ روی هر سیستمی اجرا کنید بدون اینکه نیاز به طی کردن مراحل طولانی نصب داشته باشد. IIS و Node و MySQL و Redis و حتی سیستم عامل Ubuntu هم از طریق Docker قابل نصب است.
برای نصب داکر باید تحریم ها را دور بزنید و آن را دانلود کنید. همچنین فقط از سیستم عامل های x64 پشتیبانی می کند. بعد از نصب به یک محیط Console دسترسی پیدا میکنید که دستورات داکر را اجرا می کند.
در حال حاضر Docker سر و صدای زیادی به پا کرده و مقالات و کتابهای زیادی در مورد آن منتشر می شود. بسیاری از شرکتها تمامی کارهای سرور را با Docker انجام می دهند و تخصص در این زمینه می تواند فرصت های شغلی زیادی ایجاد کند.
در گذشته اگر می خواستید یک برنامه ی ASP با دیتابیس MSSQL در سرور لینوکس اجرا کنید باید یک ماشین مجازی می ساختید و روی آن ویندوز نصب می کردید و بعد تازه دات نت و SQL Server نصب می کردید. تازه می توانستید سایت را روی IIS اجرا کنید.
وقتی از Docker استفاده می کنید نیاز به ماشین مجازی ندارید. علاوه بر این نیاز به نصب نرم افزارهای جانبی مانند SQL Server هم ندارید. می توانید کل سایت و دیتابیس و حتی کل SQL Server را درون یک فایل که اصطلاحا Container خوانده میشود قرار دهید و آن را در لینکوس با یک خط فرمان اجرا کنید. با داکر یک برنامه همه جا یکسان کار میکند. در واقع با داکر عبارت معروف " روی سیستم من که اجرا میشه " دیگر از بین میرود.
هر چند ASP Core خودش در لینکوس و macOS قابل اجرا است اما استفاده از Docker عملیات انتشار سایت را بسیار ساده می کند. مخصوصا وقتی که برنامه ی شما قرار است روی چند سرور اجرا شود یا قصد جابجایی آن را به یک سرور جدید داشته باشید فقط باید یک فایل را کپی کنید.
خیلی از نرم افزارها نسخه ی Docker دارند که مانند Nuget از Docker Hub قابل دانلود و نصب است. مثلا SQL Server 2017 را می توانید با حجم 2 گیگ روی هر سیستمی اجرا کنید بدون اینکه نیاز به طی کردن مراحل طولانی نصب داشته باشد. IIS و Node و MySQL و Redis و حتی سیستم عامل Ubuntu هم از طریق Docker قابل نصب است.
برای نصب داکر باید تحریم ها را دور بزنید و آن را دانلود کنید. همچنین فقط از سیستم عامل های x64 پشتیبانی می کند. بعد از نصب به یک محیط Console دسترسی پیدا میکنید که دستورات داکر را اجرا می کند.
در حال حاضر Docker سر و صدای زیادی به پا کرده و مقالات و کتابهای زیادی در مورد آن منتشر می شود. بسیاری از شرکتها تمامی کارهای سرور را با Docker انجام می دهند و تخصص در این زمینه می تواند فرصت های شغلی زیادی ایجاد کند.