ASP.NET چیست؟
ASP.NET یک فریمورک توسعهیافته وبسایت سرور از مایکروسافت است. توسعه دهندگان از ASP.NET برای ایجاد وب سایت های پویا، برنامه های وب و سرویس های مبتنی بر وب استفاده می کنند. پس از چندین دهه توسعه، این فریم ورک امروزه به عنوان هسته ASP.NET باقی مانده است.
تاریخچه توسعه دهنده ASP.NET چیست ؟
ASP.NET که در ابتدا توسط مایکروسافت توسعه یافته بود، اکنون به بنیاد دات نت تعلق دارد. در حالی که اولین نسخه ها هنوز به عنوان نرم افزار اختصاصی منتشر می شد، ASP.NET مدرن امروزی یک پروژه منبع باز است.
ASP.NET که امروزه مورد استفاده قرار می گیرد، نتیجه یک فرآیند چند دهه توسعه است. تکامل آن را از ASP به ASP.NET به ASP.NET Core رسانده است. همگام با پیشرفت فناوری وب، این چارچوب در طول سال ها دستخوش تغییرات شدید شد. بیایید ابتدا نگاهی به تاریخچه توسعه ASP.NET بیندازیم:
فن آوری | محیط توسعه | نسخه فعلی | پایان فایل |
---|---|---|---|
ASP | Windows | 3.0 / 2000-02 | .asp |
ASP.NET | Windows | 4.8 / 2019-04 | .aspx/.aspx.cs, .aspx.vb etc. |
ASP.NET Core | Cross-platform | 5.0 / 2020-11 | .cshtml, .vbhtml, etc. |
صفحات سرور فعال (ASP): اولین زبان برنامه نویسی سمت سرور مایکروسافت
اصلی “Active Server Pages” (ASP) اولین زبان برنامه نویسی سمت سرور بود که توسط مایکروسافت منتشر شد. صفحات سرور فعال به شما امکان می دهند صفحات وب پویا را از سال 1996 روی سرور ایجاد کنید. سایر زبان های برنامه نویسی معمولاً به لینوکس به عنوان سیستم عامل و یک وب سرور منبع باز مانند Apache متکی هستند. در مقابل، مایکروسافت صفحات سرور فعال را به عنوان بخشی از “سرور اطلاعات اینترنتی” (IIS) در حال اجرا در ویندوز قرار داد.
عملکرد اصلی ASP تقریباً با PHP یا “صفحات سرور جاوا” (JSP) قابل مقایسه است. هر سه فناوری از فایل های قالب استفاده می کنند. این فایلهای قالب حاوی تکههای کد اجرایی هستند که در محتوای HTML ایستا جاسازی شدهاند. کد بین تگ های ویژه نوشته می شود تا از HTML اطراف جدا شود. زبان های برنامه نویسی مورد استفاده لهجه های مخصوص مایکروسافت VBScript، JScript و PerlScript بودند که در آن زمان در دسترس بودند.
هنگامی که مرورگر به URL دسترسی پیدا می کند (“درخواست”)، کد روی سرور اجرا می شود. این اجرا محتوای HTML را تولید می کند که در ساختارهای HTML از پیش تعریف شده درج می شود. نتیجه کلی یک سند متشکل از محتوای HTML ایستا و پویا است. این به عنوان یک پاسخ به مرورگر (“پاسخ”) ارائه شده و به کاربر نمایش داده می شود. هر تغییری در محتوای صفحه، مانند ورودی کاربر، نیازمند یک چرخه کامل درخواست-پاسخ، به عبارت دیگر، بارگذاری مجدد صفحه است. در اینجا نمونه ای از کدهای ASP آورده شده است:
<p>
The server’s current time:
<%
Response.Write Now()
%>
</p>
ASP هنوز یک چارچوب نبود. بلکه از مجموعه ای شل از تعداد انگشت شماری اشیاء استفاده می کرد. از این موارد، کاربران توانستند یک وب سایت پویا را جمع آوری کنند:
- Application
- Request
- Response
- Server
- Session
- ASPError
ASP.NET چیست؟ : از صفحات سرور فعال به فریم ورک
ASP.NET، جانشین ASP کلاسیک، در حدود سال 2003 معرفی شد. این فرآیندهای معمولاً مورد نیاز مانند احراز هویت کاربر و همچنین مجوز و دسترسی به پایگاه داده را انتزاع می کرد. به طور خلاصه، ASP.NET تقریباً با چارچوب های جاوا مانند “Struts” یا “Spring” قابل مقایسه است.
به عنوان یک ویژگی مهم، ASP.NET شامل «فرم های وب» بود. رویکرد Web Forms به توسعه دهندگان با تجربه ویندوز اجازه می دهد تا صفحات وب پویا را برنامه ریزی کنند. این فرآیند به این معنی بود که مکانیسمهای اساسی وب از دید توسعهدهندگان پنهان میشد. آنها می توانند به استفاده از گردش کار و محیط های توسعه ای که با آن آشنا بودند ادامه دهند. به طور خاص، ابزارهای توسعه برنامه سریع بصری ویژه مایکروسافت (RAD) استفاده شد.
Web Forms به توسعه دهندگان ویندوز یک نقطه ورود سریع به برنامه نویسی آنلاین را ارائه داد. با این حال، در همان زمان، این رویکرد کنترل صفحات HTML را که ارائه میشد محدود کرد. ASP.NET MVC به زودی به عنوان یک مدل توسعه جایگزین اضافه شد. این از الگوی ایجاد شده “کنترل کننده نمای مدل” (MVC) پیروی می کند و اجازه می دهد تا نگرانی ها با وضوح بیشتری از هم جدا شوند. بر اساس چارچوب پیشگام “Ruby on Rails”، ASP.NET MVC عملکردی را برای “داربست” یک پروژه ارائه کرد.
در همین حال، ASP.NET با “ASP.NET Core” توسعه یافته جایگزین شده است. با این حال، در زبان روزمره، هر دو نام اغلب مترادف به کار می روند.
ASP.NET چیست؟ : پیشرفت های جدید از طریق مجوز منبع باز
با انتشار ASP.NET Core، تغییری در سازماندهی فریم ورک رخ داد. در طول توسعه تدریجی مایکروسافت، ASP.NET Core زیر چتر بنیاد دات نت قرار گرفت. کد منبع پروژه تحت یک مجوز منبع باز در دسترس است.
در سطح فنی، ASP.NET Core طراحی مجدد ASP.NET 4.0 است که اجزای رشد یافته ارگانیک ASP.NET را ادغام می کند. توسعه پروژه ASP.NET Core و میزبانی خارج از اکوسیستم ویندوز فعال شده است. در ویندوز، ASP.NET Core در بالای .NET Framework ساخته شده است. در سیستم عامل های دیگر، به جای آن از NET Core Framework استفاده می شود.
در راستای تکامل مداوم فناوری وب، ASP.NET Core برای فضای ابری آماده است. محیط های میزبانی ASP.NET شامل محیط های سرور باز و همچنین کانتینرها، علاوه بر سرور اطلاعات اینترنتی سنتی مایکروسافت (IIS) است. این چارچوب از کد سمت مشتری و رویکردهای مدرن برای برنامه نویسی پاسخگو پشتیبانی می کند. این ASP.NET Core را با فریمورک های مبتنی بر جاوا اسکریپت مانند React برابری می کند.
ASP.NET برای چه نوع پروژه هایی مناسب است؟
پروژه های وب از همه نوع می توانند با ASP.NET Framework محقق شوند. به طور خاص، این شامل وب سایت های پویا و برنامه های کاربردی وب، از جمله “برنامه های صفحه تک” (SPA) می شود. علاوه بر این، خدمات مبتنی بر وب مانند APIها و سیستمها برای ارتباطات بلادرنگ میتوانند پیادهسازی شوند. در طول سالیان متمادی، رویکردهای متفاوتی برای اهداف مختلف مورد استفاده قرار گرفته است. ما در زیر به این موارد خواهیم پرداخت و مروری بر توسعه آنها ارائه خواهیم کرد.
مدل های برنامه نویسی در ASP.NET چیست ؟
در حالی که فناوری های وب از دهه 2000 پیشرفت کرده اند، رویکردهای جدید برای توسعه وب نیز در ASP.NET ادغام شده است. شما می توانید آن را مانند یک جعبه ابزار مرتب شده در نظر بگیرید: ابزارهای مختلفی برای انواع مختلف پروژه ها در دسترس هستند. بسته به الزامات، چندین رویکرد را می توان در یک پروژه ترکیب کرد. با انتشار هسته ASP.NET، مدل های برنامه نویسی متعدد و ارگانیک با هم ادغام شدند. این امر منجر به ساده سازی رویکردهای مناسب شد.
فرم های وب ASP.NET چیست ؟
فرم های وب کلاسیک برای جمع آوری صفحات از اجزای از پیش تعریف شده استفاده می شود. در اینجا، یک فرم ساز بصری استفاده می شود که به اجزای جداگانه اجازه می دهد تا با کشیدن و رها کردن موقعیت قرار گیرند. این به ویژه برای توسعه دهندگان با تجربه در برنامه نویسی ویندوز جذاب بود. آنها می توانستند از ابزارهایی که با آنها آشنا بودند برای “توسعه سریع برنامه” (RAD) استفاده کنند. تفاوت این بود که محصول نهایی یک برنامه کاربردی ویندوز نبود، بلکه یک وب سایت پویا بود.
رویکرد فرم های وب بر اساس مدل “Code Behind” مایکروسافت است. این اطمینان حاصل می کند که نگرانی ها از هم جدا شده اند:
- فایلهای الگو با پسوند .aspx ساختار HTML یک صفحه را تعریف میکنند و حاوی متغیرهایی برای محتوای تولید شده به صورت پویا هستند.
- منطق واقعی برنامه در یک فایل جداگانه با پسوند .aspx.cs یا .aspx.vb ذخیره می شود. این فایل Code Behind است که نام آن را می دهد.
- کلاینت فایل .aspx موجود در یک URL را بازیابی می کند. در سرور، اجزای استاتیک و پویا با هم ترکیب می شوند. سند HTML حاصل به مشتری تحویل داده می شود.
- هنگامی که ورودی کاربر در صفحه دریافت می شود، داده ها از طریق یک درخواست GET یا POST به همان URL منتقل می شوند و توسط فایل Code Behind پردازش می شوند.
یک رویکرد شی گرا برای پیاده سازی منطق برنامه استفاده می شود: فایل Code Behind یک کلاس مشتق شده را تعریف می کند. سی شارپ یا ویژوال بیسیک معمولا به عنوان زبان برنامه نویسی استفاده می شود. جالب اینجاست که فایل Code Behind یک بار از پیش کامپایل شده است. این منجر به اجرای سریعتر و استحکام بیشتر در برابر خطاها هنگام فراخوانی صفحه می شود.
ASP.NET MVC
بر خلاف ASP اصلی، فرم های وب گامی به سوی جداسازی نگرانی ها بود. با ASP، HTML ایستا و اجزای کد در یک فایل ترکیب شدند. با فرمهای وب، جداسازی فایلهای قالب و کد پشتی رخ داد. با ASP.NET MVC، ASP.NET مدل برنامه نویسی دیگری را دریافت کرد که توسعه وب را طبق الگوی Model View Controller (MVC) امکان پذیر می کرد.
الگوی MVC منطق برنامه (“مدل”)، الگوی ارائه (“نمایش”) و تعامل کاربر (“کنترل کننده”) را از هم جدا می کند. یکی از مزایای رویکرد MVC این است که نگرانی های فردی را می توان بهتر آزمایش کرد. علاوه بر این، جداسازی نگرانی ها اجازه می دهد تا از کنترل کننده های مختلف استفاده شود. به عنوان مثال، به جای ارسال تمام ورودی های کاربر به یک URL و بارگذاری مجدد صفحه، از AJAX از طریق jQuery استفاده می شود. این اجازه می دهد تا بخش هایی از صفحه بارگذاری مجدد شوند. با ASP.NET Core MVC، سنت ASP.NET MVC در نسخه امروزی این چارچوب ادامه دارد.
صفحات وب ASP.NET چیست ؟
فرم های وب ASP.NET و ASP.NET MVC برای ایجاد وب سایت های پیچیده مناسب هستند. اگر به چندین صفحه با اجزای قابل استفاده مجدد نیاز دارید، هر دو مدل برنامه نویسی ایده آل هستند. اما اگر به این نیاز ندارید چه؟ فرض کنید می خواهیم یک وب سایت ساده بسازیم که فقط از یک صفحه یا چند صفحه تشکیل شده باشد. چند مؤلفه پویا وجود دارد، اما تمرکز بر روی یک طرح بندی صیقلی است تا منطق برنامه پیچیده و پردازش ورودی کاربر. در آن صورت، تعریف کلاس های سفارشی یا هدف گذاری برای تقسیم در امتداد الگوی MVC بیش از حد است.
برای مواردی که منطق برنامه اهمیت کمتری نسبت به طرح و طراحی پیچیده دارد، صفحات وب ASP.NET انتخاب خوبی هستند. مانند ASP یا PHP کلاسیک، ترکیبی از ساختارهای HTML ایستا و مؤلفههای کد پویا در یک فایل انجام میشود تا از یک نحو خاص استفاده شود. صفحات وب ASP.NET مخصوصاً برای ایجاد صفحات فرود مناسب هستند.
ASP.NET Web API
مدل های برنامه نویسی ارائه شده تاکنون همگی با هدف تولید محتوای HTML برای انسان ها هستند. با این حال، چارچوب ASP.NET همچنین شامل مدل هایی است که برای ارائه زیرساخت برای پروژه های وب استفاده می شود. ASP.NET Web API یک مدل برنامه نویسی برای ایجاد REST API است. دسترسی به نقاط پایانی API از طریق AJAX انجام می شود. JSON یا XML برای انتقال داده استفاده می شود.
ASP.NET WebHooks
ASP.NET WebHoks پیاده سازی الگوی WebHoks است. WebHoks به شما امکان می دهد رویدادهایی را که در یک سیستم اتفاق می افتد منتشر کنید و در آن مشترک شوید. به عنوان مثال، این می تواند اضافه کردن یک فایل یا دریافت پرداخت باشد. یک مشترک تغییر را برای ردیابی با سیستم انتشار ثبت می کند. برای انجام این کار، آنها یک URL ارسال می کنند – WebHook همنام. هنگامی که رویداد ثبت شده رخ می دهد، سیستم انتشارات WebHook را فرا می خواند. مشترک از رویداد مطلع می شود.
SignalR
SignalR چارچوبی برای ارتباط بلادرنگ بین کلاینت و سرور است. این چارچوب بر اساس استاندارد WebSockets است و امکان انتقال دو طرفه داده ها را فراهم می کند. مرورگرهایی که از WebSockets پشتیبانی نمی کنند از طریق مکانیسم های بازگشتی پشتیبانی می شوند. SignalR اغلب برای پیاده سازی خدمات چت مبتنی بر مرورگر و نرم افزار کنفرانس ویدیویی استفاده می شود.
مدل های جدید برنامه نویسی در ASP.NET Core چیست ؟
ASP.NET Core جانشین ASP.NET است. چارچوب ASP.NET Core بازنویسی شده است، اما سازگاری بالایی با نسخه قبلی خود دارد. اجزای جداگانه قبلی ASP.NET در نسخه Core ادغام شدند. علاوه بر این، برخی از مؤلفهها دوباره توسعه یافتند و نامهای موجود خود را حفظ کردند. به عنوان مثال، چارچوب SignalR در هر دو نسخه ASP.NET و ASP.NET Core وجود دارد. بیایید نگاهی به تحولات جدید اصلی ASP.NET Core بیندازیم.
ASP.NET Core MVC – سایت های کنترلر مشاهده مدل مبتنی بر API
با ASP.NET Core MVC، عملکردهای ASP.NET MVC و ASP.NET Web API ترکیب شده اند. این امکان توسعه برنامه های کاربردی وب بسیار پویا را با رابط کاربری ماژولار و API اساسی فراهم می کند. دات نت Core Framework به عنوان پایه مشترک استفاده می شود. رویکردهای آشنا از توسعه API دات نت را می توان به توسعه MVC و بالعکس منتقل کرد.
Razor Pages – توسعه بیشتر صفحات وب ASP.NET
Razor Pages جایگاهی مشابه صفحات وب قبلی ASP.NET را پر می کند. آنها می توانند زمانی استفاده شوند که الگوی Model-View-Controller نشان دهنده سربار غیر ضروری باشد. به عنوان مثال، اگر می خواهید یک صفحه فرود بسازید، می توان آن را به عنوان یک Razor Page با کمی تلاش پیاده سازی کرد. برای ایجاد قالب صفحه از سینتکس Razor استفاده می شود. همانطور که در جهان دات نت معمول است، سی شارپ و ویژوال بیسیک را می توان به عنوان زبان برنامه نویسی استفاده کرد.
بیایید به نمونه ای از صفحه Razor نگاهی بیندازیم. قابل توجه است که به جای تگ های کد باز و بسته کننده معمول در زبان های قالب، از یک کاراکتر open @ استفاده می شود:
@page
@model HelloWorldModel
@if (Name != null) {
<p>Hello dear @Name</p>
}
<form method="post">
<p>
<label asp-for="Name"></label>
<input class="form-control" asp-for="Name" />
</p>
<input type="submit" value="Say Hello" />
</form>
برنامه نویسی واکنشی با Blazor – “NET در مرورگر”
چارچوب Blazor به نحو ذکر شده در Razor متکی است. در واقع، Blazor مخفف “Browser + Razor” است. همانطور که از نام آن پیداست، تمرکز Blazor بر روی مرورگر به عنوان یک محیط زمان اجرا است. با Razor Pages، پردازش تعامل کاربر در سرور انجام می شود. از سوی دیگر، Blazor برنامه نویسی واکنشی را فعال می کند، جایی که اجزای صفحه منفرد در مرورگر به طور پویا به تغییرات واکنش نشان می دهند. این باعث می شود Blazor تقریباً با فناوری های React، Angular و Vue قابل مقایسه باشد.
در اینجا یک مثال ساده از برنامه نویسی واکنشی با Blazor آورده شده است. مقدار یک فیلد ورودی را به متغیر Name متصل می کنیم. دستور Razor برای این مورد استفاده می شود:
@page "/"
<h1>A Blazor example</h1>
<p>Welcome to Blazor, @Name.</p>
<input bind="@Name" type="text" class="form-control" placeholder="Name" />
علاوه بر برنامه نویسی واکنشی، یکی دیگر از ویژگی های Blazor بسیار جالب است: از طریق WebAssembly، زبان های دات نت را می توان برای اجرا در مرورگر کامپایل کرد. بنابراین گاهی اوقات از Blazor به عنوان رویکردی برای “.NET در مرورگر” نیز یاد می شود. مزیت این است که نیازی به نوشتن جاوا اسکریپت برای کد سمت مشتری نیست. در عوض، توسعه در سی شارپ یا ویژوال بیسیک انجام می شود. کد می تواند به اجزای آشنای چارچوب دات نت دسترسی داشته باشد.
مزایا و معایب ASP.NET چیست؟
ASP.NET یا ASP.NET Core یک محیط بالغ برای توسعه طیف گسترده ای از پروژه های وب فراهم می کند. این دامنه شامل زبان های برنامه نویسی، ویرایشگرهای کد و IDE ها و همچنین ابزارهای توسعه و اکوسیستم پر رونق بسته های آزادانه در دسترس است. امروزه از روش های مدرنی مانند برنامه نویسی واکنشی، WebSockets و WebAssembly استفاده می شود. به طور سنتی، بزرگترین ایراد استفاده از ASP.NET، روابط نزدیک آن با مایکروسافت و قفل فروشنده همراه با آن بوده است. با حرکت تدریجی به سمت منبع باز، این موضوع اکنون کمتر مورد نگرانی است.
مزایای ASP.NET چیست؟
بزرگترین مزیت استفاده از ASP.NET توسط توسعه دهندگانی است که با برنامه نویسی در اکوسیستم مایکروسافت آشنا هستند. آنها می توانند به راحتی به زبان ها، ابزارها و جریان های کاری که با آنها آشنا هستند دسترسی داشته باشند. فریم ورک دات نت بالغ به عنوان پایه و اساس ASP.NET استفاده می شود. این بدان معنی است که اجزای مناسب برای تعداد زیادی از موارد استفاده در دسترس هستند. این یک مزیت بزرگ برای پیاده سازی برنامه های پیچیده به سرعت و با نتایج قابل اعتماد است.
چارچوب دات نت ساختاری مدولار دارد و «زمان اجرای زبان مشترک» (CLR) را به عنوان یک محیط زمان اجرا دارد. این اجازه می دهد تا از زبان های برنامه نویسی مختلف تا زمانی که با استاندارد زیرساخت زبان مشترک (CLI) مطابقت داشته باشند، استفاده کنید. زبانهای CLI توسعهیافته توسط مایکروسافت شامل زبانهای کلاسیک شیگرا C# و Visual Basic و همچنین زبان کاربردی جدیدتر F# هستند. با استفاده از Blazor و WebAssembly، زبان های CLI را می توان به عنوان کد سمت مشتری در مرورگر اجرا کرد.
در ابتدا، ASP.NET به عنوان نرم افزار اختصاصی تحت کنترل مایکروسافت شروع به کار کرد. امروزه، این یک پروژه منبع باز تحت بنیاد دات نت است. به عنوان بخشی از این افتتاحیه، مدیر بسته NuGet و مخزن بسته عمومی مرتبط ایجاد شد. توسعه دهندگان ASP.NET که با NPM یا RubyGems مقایسه می شوند، اکوسیستمی از بسته های آزادانه قابل استفاده در اختیار دارند.
معایب ASP.NET چیست؟
بزرگترین مزیت ASP.NET – استفاده از اکوسیستم خاص مایکروسافت – همچنین نقطه ضعف اصلی آن است. این به این دلیل است که توسعه وب عمدتاً بر روی پلتفرمها، زبانها و قالبهای آزاد و باز ساخته شده است. توسعه دهندگانی که برای اولین بار در جهان دات نت غواصی می کنند با مجموعه ای گیج کننده از نسخه ها و مدل های برنامه نویسی ارائه می شوند.
به طور سنتی، کسانی که می خواستند با ASP.NET Framework توسعه دهند، فقط می توانستند این کار را در ویندوز انجام دهند. برای سالها، مایکروسافت تلاش خود را برای باز کردن استانداردهای پرکاربرد و منبع باز افزایش داده است. با انتشار ASP.NET Core، توسعه اکنون روی سه سیستم عامل اصلی کار می کند: Windows for Family، macOS و Linux. علاوه بر این، اکنون امکان ذخیره محیط توسعه در یک ظرف Docker وجود دارد.
ASP.NET کلاسیک را فقط میتوان روی سرور اطلاعات اینترنتی (IIS) فناوری سرور داخلی مایکروسافت میزبانی کرد. این یک نقطه ضعف بزرگ در مقایسه با سایر فریمورک های وب بود که همگی بر روی لینوکس اجرا می شوند. میزبانی ASP.NET شرایط خاصی دارد و از همه ارائه دهندگان در دسترس نیست. امکان استفاده از وب سرورهای دیگر با “Mon” به عنوان یک پیاده سازی رایگان دات نت وجود داشت. با این حال، تغییر واقعی با انتشار NET Core و “Open Web Interface for .NET” (OWIN) رخ داد. OWIN یک برنامه ASP.NET را از وب سرور اصلی جدا می کند. این یکی از بزرگترین موانع استفاده از ASP.NET را از بین برد.
شرایط مورد نیاز برای محیط میزبانی APS.NET چیست؟
چارچوب ASP.NET از نظر محیط میزبانی خاص است. سایر چارچوبهای وب مبتنی بر زبانهای PHP، جاوا، پایتون یا جاوا اسکریپت همگی بر روی سرورهای لینوکس اجرا میشوند. فقط میزبانی برنامه های ASP.NET به طور سنتی به ویندوز به عنوان سیستم عامل سرور نیاز داشت. همچنین استفاده از وب سرور خدمات اطلاعات اینترنتی مایکروسافت (IIS) اجباری بود. برای میزبانی یک برنامه ASP.NET در سرورهای ویندوز، باید میزبانی ویندوز مدیریت شده را انتخاب کنید. با این مدل هاست، سرورهای شما توسط ارائه دهنده نگهداری می شوند و به طور مرتب به روز می شوند.
میزبانی برنامه های اصلی ASP.NET بسیار راحت تر است. اینها می توانند علاوه بر IIS بر روی انواع محیط های سرور میزبانی شوند. از وب سرور Kestrel یکپارچه استفاده می شود که روی ویندوز، لینوکس و macOS اجرا می شود. وب سرورهای محبوب مانند Nginx و Apache را می توان به عنوان پراکسی معکوس در ارتباط با Kestrel پیکربندی کرد. در ویندوز، Kestrel جایگزین HTTP.sys نیز موجود است.
ASP.NET چیست؟
ترجمه شده توسط سایت دریای شرق از سایت
کپی بدون ذکر نام و لینک سایت دریای شرق ممنوع است !