غلبه بر محدودیت های شبکه ارتباطی NET Core.

شبکه ارتباطی NET. یک چارچوب بر مبنای وب است. این شبکه ارتباطی باعث ایجاد یک استراتژی جدید جهت گسترش برنامه های کاربردی در مایکروسافت شده است.

 غلبه بر محدودیت های شبکه ارتباطی NET Core.

برای بیش از یک دهه پلتفرم اصلی مایکروسافت در چارچوب شبکه ارتباطی NET framework. است که انبوه توسعه دهندگان می توانند برای نوشتن کدنویسی خود از آن استفاده کنند و در طول تمام این سال ها، این پلتفرم به سوی مجموعه ای غنی از ویژگی هایی مانند، ابزار مناسب برای ساخت هر نوع برنامه قابل تصور، پیشروی کرده است.

شبکه ارتباطی .NET framework

همانطور که شبکه ارتباطی NET framework. یک پلتفرم اصلی است با این حال یک عیب بزرگ دارد که آن را به طور خاص برای ویندوز طراحی کرده اند. این محدودیت تقریبا زمینه استفاده از آن را برای ساخت برنامه ها در راستای  اهداف صرفا تجاری و صنعتی محدود کرده است؛ چرا که اکثر شرکت های متوسط و بزرگ از شبکه ارتباطی گسترده تر و قدرتمند تری از کامپیوترهای شخصی که مبتنی بر ویندوز است، استفاده می کنند و برنامه های اینترانت خود را بر روی سرور ویندوز میزبانی می کنند؛ این به این دلیل است که ویندوز قابل اعتماد است. از ویندوز که دارای طیف وسیعی از گزینه های پشتیبانی مناسب است، به طور گسترده ای استفاده می شود .

علت طراحی شبکه ارتباطی  coreNET  .

شبکه ارتباطی  NET framework. را نمی توان به راحتی برای برنامه های کاربردی پلتفرم های متقابل مانند لینوکس و یا مک اجرا کرد، زیرا این شبکه ارتباطی توانایی اجرا به طور مستقیم را در میزبان هایی که بر پایه ویندوز نیستند را ندارد. به همین ترتیب، این بهترین انتخاب پلتفرم برای ساخت وب سایت ها نیست. اگرچه ابزارهایی که برای ساخت وب سایت لازم است موضوع مهمی است اما بخش مهم دیگر هزینه های میزبان های وب سایت ها است. هزینه های میزبانی یک وب سایت در سرور ویندوز معمولا هزینه زیادی دارد، به این معنی که بسیاری از ارائه دهندگان میزبانی وب از یک میزبان مبتنی بر لینوکس برای کسری از هزینه ها استفاده می کنند. مایکروسافت این مشکل را با انتشار یک پلتفرم جدید متقابل پلتفرم شبکه ارتباطی .NET framework برطرف کرد که این پلتفرم به نام  .NET Core عرضه شد.

 شباهت شبکه ارتباطی core NET . در مقابل NET framework .

شباهت های بسیاری بین این دو شبکه ارتباطی وجود دارد. آنها از زبان برنامه نویسی  مشابهی استفاده می کنند. همچنین، بسیاری از چیزها در  core NET .  بر این اساس بهبود یافته اند که در دراز مدت درس هایی از تکامل  تدریجی سابقه شبکه ارتباطی NET framework . گرفته شده است و اساسا عملکرد کلی مشابه است و تنها در ویژگی های اجرایی با یکدیگر تفاوت دارند.

 تفاوت  core NET . در مقابل NET framework .

متاسفانه، .NET Core برخی از ویژگی های معمول استفاده شده در  NET framework . را دارا نیست. نمونه هایی از شامل عدم توانایی شبکه ارتباطی core NET . برای پخش فایل های صوتی و انجام برخی از عملیات  های گرافیکی است. این به این دلیل است که چنین ویژگی هایی در سیستم عامل های مختلف به طور کاملا متفاوت اجرا می شوند. با این حال، حتی اگر این ویژگی ها خارج از توانایی های این پلتفرم باشد، اجرای غیرمستقیم آنها غیر ممکن نیست.

در این مقاله، به طور خاص به نحوه فعال کردن توانایی پخش صدا و توانایی ساخت برنامه های کاربردی دسکتاپ  با یک رابط کاربری گرافیکی تمرکز خواهیم کرد. با این حال، برخی از تکنیک هایی که در اینجا شرح داده شده است به همان اندازه برای هر ویژگی دیگر که در شبکه ارتباطی core NET .  در حال حاضر نامشخص است، قابل استفاده می باشد.

مشکل با پخش صدا در پلتفرم .NET core

در حالی که .NET Framework دارای انواع کتابخانه ها است که می تواند حتی فایل های صوتی را  بر روی دستگاه ویندوز شما اجرا کند، NET Core دارای هیچ کدام از این قابلیت ها نیست. این به این معنا است که صدای طراحی شده در سیستم عامل های مختلف، کاملا متفاوت است. در حالی که انواع نسخه های مدرن ویندوز از همان مجموعه استاندارد  بین المللی برای پخش صوتی استفاده می کنند، با این حال بخش های مختلف لینوکس ممکن است تفاوت های قابل توجهی داشته باشد.

علت نبود ویژگی پخش صوتی در .NET core

اگر چه ALSA  به صورت استاندارد برای پخش صوتی در لینوکس طراحی شده است، اما تضمین نشده است که در هر بخش موجود، قابلیت اجرا داشته باشد. حتی در جایی که در حال حاضر وجود دارد، تضمین نمی شود که ALSA به همان شیوه در تمام دستگاه های لینوکس پیکربندی شود. به عنوان مثال، یک فرمان Bash که به طور قابل اعتماد محتوای یک فایل صوتی را از طریق جک صوتی آنالوگ بر روی یک دستگاه پخش می کند، در بهترین حالت، بر روی یک دستگاه دیگر کار نمی کند یا در بدترین حالت، فقط یک خطا را باز می کند. این احتمالا یکی از دلایل کلیدی است که چرا توسعه دهندگان مایکروسافت تصمیم گرفتند که این ویژگی در پلتفرم شبکه ارتباطی  core NET . وجود نداشته باشد.

پلتفرم  Node.js

ساده ترین راه برای پیاده سازی قابلیت پخش صوتی این است که به کمک برنامه محبوب دیگری از تکنولوژی برنامه نویسی، این مشکل را از بین ببریم. .NET Core تنها سیستم عامل برنامه نویسی مستقل نیست. محبوب ترین آنها Node.js است. این پلتفرم لیستی از محدودیت های خود را دارد که در NET Core. وجود ندارد و درست مانند .NET Core، نصب پایه ای آن تنها اجازه می دهد که پلتفرم فقط قابلیت استفاده از اساسی ترین قابلیت ها را داشته باشد. هر گونه قابلیت دیگر توسط بسته های سفارشی توسط Node Package Manager (NPM)، که محبوب ترین مخزن اجزای نرم افزاری در مقایسه با تمام مخازن معادل موجود در سایر سیستم عامل ها است، اضافه شده است.

پلتفرم  Node.js در مقابل NET Core.

.NET core یک مخزن معادل از اجزای نرم افزاری  شناخته شده به عنوان .NuGet است. با این حال، به عنوان پلتفرم نسبتا جوانی شناخته می شود، بسته های زیادی برای این شبکه ارتباطی وجود ندارد. از سوی دیگر، Node.js به طور قابل توجهی مسن تر است. بنابراین، برای این پلتفرم بسته های بسیاری وجود دارد، تقریبا هر گونه قابلیت هایی را که می توانید فکر کنید را پوشش می دهد.

توسعه دهندگان مایکروسافت این را متوجه شدند. به همین دلیل آنها NodeServices را ایجاد کردند، که  یک کتابخانه برای .NET Core است و اجازه می دهد کد کامپایل شده با برنامه های Node.js همکاری کند. چندین بسته صوتی مربوط وجود دارد و با کمک Node Services هر یک از آنها می تواند به طور مستقیم از شبکه ارتباطی NET Core.  مورد استفاده قرار گیرد.

نحوه کار NodeServices

رفتن به جزئیات نحوه کار NodeServices فراتر از محدوده این مقاله است، چرا که بسیاری صفحات در این موضوع منتشر شده است. یکی از نکات جالب در مورد استفاده از NodeServices این است که لزوما نمی تواند کارآمدترین راه حل باشد. این کتابخانه به اجزای ASP.NET Core بستگی دارد که شما معمولا برای ساختن برنامه های میزبانی وب از آن استفاده می کنید.

اگر برنامه شما تنها برای اجرا بر روی یک ماشین خاص و نه در شبکه میزبان در نظر گرفته شده باشد، شما این فایل های نسبتا قابل قبول را در برنامه خود دارید که برای فعال کردن قابلیت آنها از طریق همکاری با Node.js هیچ دلیلی ندارید. همچنین کد شما تنها بر روی یک دستگاه یا داخل یک ظرف که Node.js نصب شده است اجرا خواهد شد که  این بیشتر از هزینه های محاسباتی است. بنابراین چنین راه حلی برای همه شرایط مناسب نخواهد بود.

کتابخانه صوتی خود را بنویسید

خوشبختانه، فرآیند نوشتن کد و کامپایل کردن آن به یک کتابخانه صوتی بدون وابستگی، یک فرایند پیچیده نیست. یکی از چنین کتابخانه هایی، NetCoreAudio، است که نوشته شده است. این نسبتا یک فرایند پایه است و تنها شامل اساسی ترین اقدامات صوتی پخش، می شود. با این حال، این یک منبع باز است که از کد آن می توان به عنوان مثال برای نوشتن کتابخانه های پیچیده تر استفاده کرد. قاعده کلی  آن ساده است و باید توسط هر کس که  آشنا با برنامه نویسی شی گرا است در درون زبان C #  درک شود. اگر نه، مستندات مرجع رسمی مایکروسافت مفاهیم "رابط کاربری" و "پیاده سازی" را که در زیر استفاده می شود توضیح می دهد.

رابط کاربری

یک رابط عمومی وجود دارد که تمام اقدامات پخش کننده موجود را شامل پخش، مکث، توقف و ادامه دادن، می کند. همانطور کهNET Core . ساخته شده است  تا در سه سیستم عامل جداگانه ویندوز، مک، و لینوکس کار کند، هر یک از سیستم عامل ها  دارای پیاده سازی مخصوص خود از این رابط است. در اصل، i.e. ، یعنی نقطه ورود کتابخانه است که به طور مستقیم به کد کتابخانه دسترسی دارد و تعیین می کند که سیستم عامل چه کاربردی را اجرا می کند و بر اساس آن پیاده سازی رابط کاربری را انتخاب می کند.

پیاده سازی 

در داخل یک کتابخانه خاص، اجرای ویندوز با استفاده از رابط کنترل رسانه ای (MCI) با برقراری تماس مستقیم به یک مونتاژ خاص انجام می شود که که در هر نسخه استاندارد از سیستم عامل ویندوز وجود دارد. پیاده سازی لینوکس و مک از یک رویکرد متفاوت استفاده می کنند. همانطور که هر دوی این سیستم عامل ها بر اساس یک سیستم عامل قدیمی شناخته شده به عنوان یونیکس (Unix) ، هر دو از  پیاده سازی استفاده می کنند که طی یک پیشرفت تدریجی و مداوم به دست آمده است .

پیاده سازی Unix

این نوع پیاده سازی که توسط # C  نوشته می شود را برای تماس و ارتباط  با هر برنامه خارجی در پس زمینه استفاده می شود. در این مورد، راه اندازی سرویس های صوتی خاص از طریق یونیکس بش (Unix Bash) ، که یک ابزار خط فرمان استاندارد موجود در هر سیستم عامل مبتنی بر یونیکس است، انجام می شود. توقف و بازخوانی صوتی با تعلیق و بازگرداندن فرآیند از طریق دستورات " kill "با STOP"  " و"CONT"  مطابق با آن انجام می شود. استفاده از این دستورات در جزئیات بیشتر در  مقاله  دیگری شرح داده شده است.

فعال کردن GUI در هر سیستم عامل

ما در بخش های قبل این مقاله پخش صوتی را پوشش داده ایم. با این حال، یکی دیگر از ویژگی های مهمی که خارج از توانایی های شبکه ارتباطی .Net Core  است یک رابط کاربری گرافیکی است که کاربران و توسعه دهندگان به طور یکسان انتظار دارند که در هر برنامه نصب شده باشد. هر برنامه پایه ای و بیسیک، هر چند که یک برنامه تلفن همراه یا یک برنامه کاربردی نصب شده روی رایانه رومیزی باشد، یک رابط کاربری گرافیکی دارد.

البته ممکن است با برنامه های بیسیک از طریق ورودی و خروجی متنی تعامل داشته باشید و بسیاری از توسعه دهندگان آن را انجام می دهند. با این حال، اکنون این تعامل بیشترین  چیزی است که اکثریت  کاربران قریب به اتفاق می خواهند. متاسفانه، این چیزی است که خارج از محدوده عملکرد شبکه ارتباطی NET Core. می باشد.

GUI در شبکه ارتباطی NET framework.

این شبکه ارتباطی دارای حداقل سه راه مختلف برای ایجاد برنامه های بیسیک با GUI در ویندوز است که شامل موارد زیر است:

Windows Forms

 Windows Presentation Foundation

Universal Windows Platform 

با این حال، هر یک از این موارد، اشاره ای به این دارد که چرا هیچ کدام از آنها در شبکه ارتباطی .Net Core و در یک سیستم عامل مستقل استفاده نمی شوند و پاسخ این است که همه آنها به طور خاص برای ویندوز ساخته شده اند.

GUI در شبکه ارتباطی Net Core.

همان طور که گفته شد، فناوری های مورد استفاده در .NET framework نمی توانند به این شبکه ارتباطی انتقال پیدا کنند و همچنین برنامه های کاربردی طبقه بندی شده در GUI ، به API های خاص هر سیستم عامل بستگی دارند، در این صورت NET Core هیچ قابلیت ذاتی برای ساخت برنامه های بیسیک با GUI را ندارد. در اساسی ترین تنظیمات  آن شما تنها می توانید برنامه های کنسول ایجاد کنید. هنگامی که شما کتابخانه های ASP.NET را اضافه می کنید، می توانید وب سایت ها یا برنامه های کاربردی وب را بسازید، اما GUI برای آنها فقط از طریق مرورگر قابل دسترسی خواهد بود. دیگر، انواع قالب های کاربردی در پلتفرم NET Core وجود ندارد.

راه حل پیاده کردن برنامه های GUI

یک راه برای اضافه کردن یک رابط کاربری گرافیکی به شبکه ارتباطی  NET Core موجود است و راه حل، یک بار دیگر استفاده از Node.js است. هرچند در اکثر مواقع به طور غیر مستقیم می توان از آن استفاده کرد. Electron.js یک پلتفرم است که بر اساس Node.js است. درست مانند یک برنامه وب، از رابط کاربری جاوا اسکریپت، CSS و HTML استفاده می کند. با این حال، این رابط در هیچ کجا میزبانی نمی شود و برنامه های نوشته شده بر روی آن به طور بیسیک نصب شده است.

برخی از برنامه های محبوب دسکتاپ وجود دارد که با استفاده از این فناوری ساخته شده اند. یک برنامه چت گروهی بسیار کاربردی است، که در واقع یکی از مهمترین نمونه ها است. با این حال، Electron.js نمی تواند توسط شبکه ارتباطی NET Core  به راحتی به عنوان Node.js اجازه دسترسی و اجرا را پیدا کند. بنابراین، کتابخانه NodeServices در اینجا کاربردی ندارد.

 کتابخانه Electron.NET

 خوشبختانه، یک کتابخانه دیگر  برای حل مشکل عدم استفاده از کتابخانه NodeServices ، که در بخش قبل گفته شد ، ایجاد شده است. این کتابخانه Electron.NET نامیده می شود و به عنوان یک بسته NuGet در دسترس است. این کتابخانه به اجزای ASP.NET Core بستگی دارد و این به دلیل آن است که برنامه Electron.js از لحاظ فنی یک برنامه وب است که فقط  برای میزبانی یک کتابخانه نوشته نشده است بلکه در داخل پنجره خود به جای یک مرورگر نیز قابلیت اجرایی دارد.

بنابراین با Electron.NET، شما یک برنامه استاندارد مدل View Controller (MVC) با برخی از اجزای اضافی که در پل ارتباطی بین دو پلتفرم ثبت شده اند، ایجاد خواهید کرد. قالب برنامه MVC برای هر کسی که از ASP.NET Core استفاده می کند آشنا می باشد. با این حال، شما هیچ نرم افزار سرور برای میزبانی آن نیاز ندارید. هنگامی که برنامه کامپایل شده است، شما قادر خواهید بود آن را به طور مستقیم از محل کد کامپایل خود باز کنید. کد کتابخانه منبع باز است و اسناد موجود در مخزن GitHub حاوی دستورالعمل های مورد استفاده است که می توان به آسانی از کد این کتابخانه و دستورالعمل های آن در جاهای دیگر در صورت نیاز استفاده کرد. با این حال، خود کد برنامه ساده نیست. بنابراین، نباید سعی کنید آن را تغییر دهید مگر اینکه حداقل مهارت های برنامه نویسی متوسط را ​​داشته باشید و با Electron.js آشنایی کامل داشته باشید.

ساخت بسیاری از Net Core.

NET Core. یک پلت فرم عالی است و کد آن می تواند بر روی هر سیستم عامل اجرا شود. تنها نکته این است که نسبتا تازه و اصطلاحا جوان است، و به همین ترتیب، تعداد زیادی کتابخانه با پلت فرم های نرم افزاری بالغ  برای آن وجود ندارد. از این رو، احتمال وجود برخی از ویژگی های مهم کسب و کار از آن وجود دارد. با این حال، این چیزی است که توسعه دهندگان این شبکه ارتباطی پیش بینی کرده اند.

اما این بدیهی است که محدودیت کتابخانه نیست. هر گونه قابلیت دیگر که در Node.js وجود ندارد، اما در NPM موجود است، می تواند توسط آن استفاده شود. اگر چه این ساده ترین راه برای اضافه کردن هرگونه قابلیت جدید به این شبکه ارتباطی است، اما قطعا کارآمدترین روش نیست. خود C #  برای دسترسی به هر یک از اجزای خاص سیستم عامل کافی است بنابراین، شما می توانید کد کتابخانه های سبک خود را برای اضافه کردن هر گونه عملکرد مورد نیاز در برنامه، خودتان بنویسید.

ما قبلا دیده ایم که چگونه می توانید از این روش برای نوشتن کتابخانه پخش صوتی خود استفاده کنید. شناسایی هرگونه قابلیت مشترک دیگر که از این شبکه ارتباطی که از دست رفته است و نوشتن یک کتابخانه برای فعال کردن آن می تواند یک پروژه جانبی عالی برای شما باشد که به شما کمک می کند تا تجربه ارزشمندی در این زمینه کسب کنید و شهرت خود را بهبود بخشید. شاید یک کتابخانه ای را که نوشته اید، شما یا شخص دیگری را قادر به ساختن نرم افزار عالی در این زمینه کند که یک مشکل مهم را حل می کند.