وب سایتهایی را معرفی میکند که آرگونومی و... را رعایت کردهاند.(برای الهام از طراحی مناسب است)
و ۲۱ مورد از طراحی هایی که بیشتر جاوا اسکریپت درگیر بوده است
ASP.NET Web API 2 بهمراه یک سری قابلیت جدید جالب منتشر شده است. در این پست 5 قابلیت برتر از این قابلیتهای جدید را بررسی میکنیم.
این رویکرد routing مزایای خود را دارد. از جلمه اینکه تمام مسیرها در یک مکان واحد تعریف میشوند، اما تنها برای الگوهایی مشخص. مثلا پشتیبانی از nested routing روی یک کنترلر مشکل میشود.
1. Attribute Routing
در کنار سیستم routing فعلی، ASP.NET Web API 2 حالا از Attribute Routing هم پشتیبانی میکند. در مورد سیستم routing فعلی، میتوانیم قالبهای متعددی برای routing بنویسیم. هنگامی که یک درخواست به سرور میرسد، کنترلر مناسب انتخاب شده و اکشن متد مناسب فراخوانی میشود.
در لیست زیر قالب پیش فرض routing در Web API را مشاهده میکنید.
Config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{Controller}/{id}", defaults: new { id = RouteParameter.Optional } );
در ASP.NET Web API 2 به سادگی میتوانیم الگوی URI ذکرد شده را پشتیبانی کنیم. لیست زیر نمونه ای از یک الگوی URI با AttributeRouting را نشان میدهد.
URI Pattern --> books/1/authors [Route("books/{bookId}/authors")] public IEnumerable<Author> GetAuthorByBook(int bookId) { ..... }
2. CORS - Cross Origin Resource Sharing
بصورت نرمال، مرورگرها اجازه درخواستهای cross-domain را نمیدهند، که بخاطر same-origin policy است. خوب، (CORS (Cross Origin Resource Sharing چیست؟
CORS یک مکانیزم است که به صفحات وب این را اجازه میدهد تا یک درخواست آژاکسی (Ajax Request) به دامنه ای دیگر ارسال کنند. دامنه ای به غیر از دامنه ای که صفحه وب را رندر کرده است. CORS با استانداردهای W3C سازگار است و حالا ASP.NET Web API در نسخه 2 خود از آن پشتیبانی میکند.
3. OWIN (Open Web Interface for .NET) self-hosting
ASP.NET Web API 2 بهمراه یک پکیج عرضه میشود، که Microsoft.AspNet.WebApi.OwinSelfHost نام دارد.
طبق گفته وب سایت http://owin.org :
OWIN یک اینترفیس استاندارد بین سرورهای دات نت و اپلیکیشنهای وب تعریف میکند. هدف این اینترفیس جداسازی (decoupling) سرور و اپلیکیشن است. تشویق به توسعه ماژولهای ساده برای توسعه اپلیکیشنهای وب دات نت. و بعنوان یک استاندارد باز (open standard) اکوسیستم نرم افزارهای متن باز را تحریک کند تا ابزار توسعه اپلیکیشنهای وب دات نت توسعه یابند.
بنابراین طبق گفتههای بالا، OWIN گزینه ای ایده آل برای میزبانی اپلیکیشنهای وب روی پروسس هایی به غیر از پروسس IIS است. پیاده سازیهای دیگری از OWIN نیز وجود دارند، مانند Giacomo، Kayak,Firefly و غیره. اما Katana گزینه توصیه شده برای سرورهای مایکروسافت و فریم ورکهای Web API است.
4. IHttpActionResult
در کنار دو روش موجود فعلی برای ساختن response اکشن متدها در کنترلر ها، ASP.NET Web API 2 حالا از مدل جدیدی هم پشتیبانی میکند.
IHttpResponseMessage یک اینترفیس است که بعنوان یک فاکتوری (factory) برای HttpResponseMessage کار میکند. این روش بسیار قدرتمند است بدلیل اینکه web api را گسترش میدهد. با استفاده از این رویکرد، میتوانیم response هایی با هر نوع دلخواه بسازیم.
برای اطلاعات بیشتر به how to serve HTML with IHTTPActionResult مراجعه کنید.
5. Web API OData
پروتکل (OData (Open Data Protocol در واقع یک پروتکل وب برای کوئری گرفتن و بروز رسانی دادهها است. ASP.NET Web API 2 پشتیبانی از expand, $select$ و value$ را اضافه کرده است. با استفاده از این امکانات، میتوانیم نحوه معرفی پاسخ سرور را کنترل کنیم، یعنی representation دریافتی از سرور را میتوانید سفارشی کنید.
- expand$: بصورت نرمال، هنگام کوئری گرفتن از یک کالکشن OData، پاسخ سرور موجودیتهای مرتبط (related entities) را شامل نمیشود. با استفاده از expand$ میتوانیم موجودیتهای مرتبط را بصورت inline در پاسخ سرور دریافت کنیم.
- select$: از این متد برای انتخاب چند خاصیت بخصوص از پاسخ سرور استفاده میشود، بجای آنکه تمام خاصیتها بارگذاری شوند.
- value$: با این متد مقدار خام (raw) فیلدها را بدست میآورید، بجای دریافت آنها در فرمت OData.
چند مقاله خوب دیگر
برخلاف تصور عموم، کاربرد اصلی دات نت فریم ورک در طی این چندین و چند سالی که از ارائه آن میگذرد، در توسعهی گسترده برنامههای دسکتاپ نبوده است. عمده کاربرد آن در تهیه برنامههای وب است. برای نمونه میتوان به آمارگیری زیر سیستمهای مورد استفاده دات نت در بین برنامه نویسها در سال 2010 مراجعه کرد [^] و کاربردهای وب آن را حداقل باید در جمع استفاده از WebForms ، Ajax و MVC جستجو کرد (البته اگر WCF و ASMX را ندید بگیریم که آنها هم عمده کاربردشان در پروژههای وب است). این اعداد و ارقام سال 2010 را اگر بخواهیم از بیشترین به کمترین لیست کنیم، حاصل آن به صورت زیر درخواهد آمد:
01 - WebForms
02 - Ajax
03 - WCF
04 - Linq to SQL
05 - MVC
06 - WinForms
07 - ASMX
08 - Silverlight
09 - WPF
10 - ADO DataSets
11 - Entity-Framework (EF)
12 - Workflow
13 - ADO.NET Data Services
14 - DynamicData
15 - CardSpace
02 - Ajax
03 - WCF
04 - Linq to SQL
05 - MVC
06 - WinForms
07 - ASMX
08 - Silverlight
09 - WPF
10 - ADO DataSets
11 - Entity-Framework (EF)
12 - Workflow
13 - ADO.NET Data Services
14 - DynamicData
15 - CardSpace
مورد دیگری که شاید برای خیلیها جالب توجه باشد، آمار تعداد سایتهایی است که از ASP.NET استفاده میکنند، در مقابل تعداد سایتهایی که بر پایه PHP تهیه شدهاند. مطابق آمار این سایت [^] و [^] در حال حاضر در بین یک میلیون سایت برتر دنیا (سایتهایی که بیشترین ترافیک وب را به خود اختصاص دادهاند) حدود 216 هزار سایت از ASP.NET و 394 هزار سایت از PHP استفاده میکنند. از مابقی وب سایتهای موجود در وب، حدود 27 میلیون سایت از ASP.NET و 26 میلیون سایت از PHP استفاده میکنند. این اعداد و ارقام از این جهت حائز اهمیت هستند که مدت زمان ارائه ASP.NET کمتر از PHP است و همچنین بیشترین کاربرد ASP.NET در سرورهای ویندوزی است، برخلاف PHP که علاوه بر ویندوز، در بین سرورهای لینوکسی نیز گزینهی بسیار محبوبی محسوب میشود.
عموما استفاده وسیع از نگارشهای مختلف ASP.NET مربوط به اینترانتهای شرکتهای خصوصی و دولتی است. برنامههایی که هیچ وقت رنگ آسمان را هم نخواهند دید و کسی از آمار یا وجود آنها مطلع نخواهد شد. اما در این بین هستند سایتهای عمومی که از این فناوریها استفاده میکنند. مهمترین و پرترافیکترین سایتهایی که در حال حاضر از ASP.NET MVC کمک میگیرند شامل موارد زیر هستند:
جالب اینجا است که اخیرا سایت msnbc استفاده وسیعی از RavenDB را هم شروع کرده است.
سایر منابع:
- وضعیت استفاده کلی از ASP.NET در سایتهای عمومی دنیا
- Big websites using ASP.NET MVC
- What platform and software stack is Bing running on
- Showcase of "Live" ASP.NET MVC Sites
- Live examples of asp.net mvc driven sites / applications
- Using the ASP.NET MVC Framework on live sites
سؤال: چگونه تشخیص دهیم یک سایت از ASP.NET MVC استفاده میکند؟
ابتدا افزونه Server Spy را نصب کنید. این افزونه میتواند وب سروری را که یک سایت هم اکنون مورد استفاده قرار داده، تشخیص دهد. اگر IIS بود، یعنی این سایت از یکی از مشتقات ASP یا ASP.NET استفاده میکند. اگر پسوند صفحات به asp ختم شده بود، ASP کلاسیک دهه نود است. در غیراینصورت یا Web forms است یا MVC. در این حالت به سورس صفحه مراجعه کنید. اگر از ViewState خبری نبود یعنی ASP.NET MVC است.
البته این روش در 90 درصد موارد جواب میدهد. میشود هدر ارسالی وب سرور را کلا تغییر داد. یعنی ضرورتی ندارد که یک سایت استفاده کننده از IIS حتما اعلام کند که از این وب سرور خاص استفاده میکند. یا در ASP.NET Web forms میشود ViewState را با ترفندهایی حذف کرد. اما ... این مسایل همه گیر نیست و روش ذکر شده شناسایی، در اکثر موارد جواب میدهد.
وبلاگها و سایتهای ایرانی
Visual Studio
ASP. Net
طراحی وب
اسکیوال سرور
Nhibernate
عمومی دات نت
ویندوز
متفرقه
- JavaFX 1.0 منتشر شد. (بحث داغ این هفتهی مجامع جاوا بود)
نظرات مطالب
در مورد ادامه ...
مورد دوم : اکثر اینها کار باز و رایگان بوده و در سایتهایی که در این زمینه فعالیت میکنند موجود است. مثلا: [^]
مطالب
AngularJS #1
پیش از اینکه آموزش AngularJs را شروع کنیم بهتر است با مفهوم برنامههای تک صفحه ای وب و یا Single Page Web Applications آشنا شویم؛ چرا که AngularJS برای توسعه هر چه سادهتر و قویتر این گونه برنامهها متولد شده است.
Single Page Application
برای درک چگونگی کارکرد این برنامه ها، مثالی را میزنیم که هر روزه با آن سرو کار دارید، یکی از نمونههای کامل و قدرتمند برنامههای Single Page Application و یا به اختصار SPA، سرویس پست الکترونیکی Google و یا همان Gmail است.
اجازه بدهید تا ویژگیهای SPA را با بررسی Gmail انجام دهم، تا به درک روشنی از آن برسید:
Reload نشدن صفحات
در Gmail هیچ گاه صفحه Reload و یا اصطلاحا بارگیری مجدد نمیشود. برای مثال، وقتی شما لیست ایمیلهای خود را مشاهده میکنید و سپس بر روی یکی از آنها کلیک میکنید، بدون اینکه به صفحه ای دیگر هدایت شوید؛ایمیل مورد نظر را میبینید. در حقیقت تمامی اطلاعات در همان صفحه نمایش داده میشوند و بر عکس وب سایتهای معمول است که از صفحه ای به صفحهی دیگر هدایت میشوید ، در یک صفحه تمام کارهای مورد نیاز خود را انجام میدهید و احتیاجی به بارگیری مجدد صفحات نیست. با توجه به این صحبتها برای توسعه دهندههای وب آشکار است که تکنیک AJAX، نقشی اساسی در این گونه برنامهها دارد، چون کلیهی عملیات ارتباط با سرور در پشت زمینه انجام میشوند.
تغییر URL در نوار آدرس مرورگر
وقتی شما بر روی یک ایمیل کلیک میکنید و آن ایمیل را بدون Reload شدن مجدد صفحه مشاهده میکنید، آدرس صفحه در مرورگر نیز تغییر میکند. خب مزیت این ویژگی چیست؟ مزیت این ویژگی در این است که هر ایمیل شما دارای یک آدرس منحصر به فرد است و به شما امکان Bookmark کردن آن لینک، باز کردن آن در یک Tab جدید و یا حتی ارسال آن به دوستان خود را دارید. حتی اگر این مطلب را جدا از Gmail در نظر بگیریم، به موتورهای جست و جو کمک میکند، تا هر صفحه را جداگانه Index کنند؛ جدا از اینکه وبسایت ما SPA است. همچنین این کار یک مزیت مهم دیگر نیز دارد؛ و آن کار کردن کلیدهای back و forward مرورگر، برای بازگشت به صفحات پیمایش شده قبلی است.
شاید قبل از بیان این ویژگی با خود گفته باشید که پیاده سازی Reload نشدن صفحات با AJAX آن چنان کار پیچیده ای نیست. بله درست است، اما آیا شما قبل از این راه حلی برای تغییر URL اندیشیده بودید؟ مطمئنا شما هم صفحات وب زیادی را دیده اید که همهی صفحات آن دارای یک URL در نوار آدرس مرورگر هستند و هیچگاه تغییر نمیکنند و با باز کردن یک لینک در یک Tab جدید، باز همان صفحهی تکراری را مشاهده میکنند! و یا بدتر از همه که دکمهی back مرورگر غیر عادی عمل میکند. بله، اینها تنها تعدادی از صدها مشکلات رایج سیستمهای نوشته شده ای است که سعی کردند همهی کارها در یک صفحه انجام شود.
Cache شدن اطلاعات دریافتی
شاید خیلیها ویژگیهای فوق را برای یک SPA کافی بدانند، اما تعدادی هم مانند نگارنده وجود یک کمبود را حس میکنند و آن کش شدن اطلاعات دریافتی در مرورگر است. Gmail این امکان را به خوبی پیاده سازی کرده است. لیست ایمیلهای دریافتی در بار اول از سرور دریافت میشود، سپس شما بر روی یک ایمیل کلیک و آن را مشاهده میکنید. حال به لیست ایمیلهای دریافتی بازگردید، آیا رفت و برگشتی به سرور انجام میشود؟ مسلما خیر. حتی اگر دوباره بر روی آن ایمیل مشاهده شده ، کلیک کنید، بدون رفت و برگشتی به سرور آن ایمیل را مشاهده میکنید.
کش شدن اطلاعات سبب میشود که بار سرور خیلی کاهش یابد و رفت و آمدهای بیهوده صورت نگیرد. کش شدن دادهها یک مزیت دیگر نیز دارد و آن تبدیل برنامههای معمول وب stateless به برنامههای شبه دسکتاپ state full است.
تکنیک AJAX در پیاده سازی امکانات فوق نقشی اساسی را بازی میکند. کمی به عقب برمیگردیم یعنی زمانی که AJAX برای اولین بار مطرح شد و هدف اصلی به وجود آمدن آن پیاده سازی برنامههای وب به شکل دسکتاپ بود و این کار از طریق انجام تمامی ارتباطات سرور با XMLHttpRequest امکان پذیر میشد. شاید آن زمان با توجه به محدودیت تکنولوژیها موجود این کار به صورت تمام و کمال امکان پذیر نبود، اما امروزه به بهترین شکل ممکن قابل پیاده سازی است.
شاید اکنون این سوال پیش بیاید که چرا باید وبسایت خود را به شکل SPA طراحی کنیم؟
برای پاسخ دادن به این سوال باید گفت که سیستمهای وب امروزی به دو دستهی زیر تقسیم میشوند:
- Web Documents و یا همان وب سایتهای معمول
- Web Applications و یا همان Single Page Web Applications
اگر هدف شما طراحی یک وب سایت معمول است که هدف آن، نمایش یک سری اطلاعات است و به قولی دارای محتواست، مطمئنا پیاده سازی این سیستم به صورت SPA کاری بیهوده به نظر میآید؛ ولی اگر هدفتان نوشتن سیستم هایی مثل Gmail، Google Maps، Azure، Facebook و ... است، پیاده سازی آنها به صورت وب سایتهای معمولی، غیر معقول به نظر میآید. حتی بخشهای مدیریتی یک وبسایت هم میتواند به خوبی توسط SPA پیاده سازی شود، چرا که واقعا برای مدیریت اطلاعات یک وب سایت احتیاجی نیست، که از این صفحه به آن صفحه جا به جا شد.
معرفی کتابخانهی AngularJS
AngularJS فریم ورکی متن باز و نوشته شده به زبان جاوا اسکریپت است. هدف از به وجود آمدن این فریم ورک، توسعه هر چه سادهتر SPAها با الگوی طراحی MVC و تست پذیری هر چه آسانتر آنها است. این فریم ورک توسط یکی از محققان Google در سال 2009 به وجود آمد. بعدها این فریم ورک تحت مجوز MIT به صورت متن باز در آمد و اکنون گوگل آن را حمایت میکند و توسط هزاران توسعه دهنده در سرتاسر دنیا، توسعه داده میشود.
قبل از اینکه به بررسی ویژگیهای Angular بپردازم، بهتر است ابتدا مطلبی دربارهی به کارگیری Angular از Brad Green که کارمند گوگل است، بیان کنم.
در سال 2009 تیمی در گوگل مشغول انجام پروژه ای به نام Google Feedback بودند. آنها سعی داشتند تا در طی چند ماه، به سرعت کدهای خوب و تست پذیر بنویسند. پس از 6 ماه کدنویسی، نتیجهی کار 17000 خط کد شد. در آن موقع یکی از اعضای تیم به نام Misko Hevery، ادعا کرد که میتواند کل این پروژه را در دو هفته به کمک کتابخانهی متن بازی که در اوقات فراغت توسعه داده است، بازنویسی کند. Misko نتوانست در دو هفته این کار را انجام دهد. اما پس از سه هفته همهی اعضای تیم را شگفت زده کرد. نتیجهی کار تنها 1500 خط بود! همین باعث شد که ما بفهمیم که، Misko بر روی چیزی کاری میکند که ارزش دنبال کردن دارد.
پس از آن قضیه Misko و Brad بر روی Angular کار کردند و اکنون هم Angular توسط تیمی در گوگل و هزاران توسعه دهندهی متن باز حرفه ای در سرتاسر جهان، درحال توسعه است.
فکر کنم همین داستان ذکر شده، قدرت فوق العاده زیاد این فریم ورک را برای همگان آشکار سازد.
ویژگیهای AngularJS:
- قالبهای سمت کاربر (Client Side Templates): انگولار دارای یک template engine قدرتمند برای تعریف قالب است.
- پیروی از الگوی طراحی MVC: انگولار، الگوی طراحی MVC را برای توسعه پیشنهاد میدهد و امکانات زیادی برای توسعه هر چه راحتتر با این الگو فراهم کرده است.
- Data Binding: امکان تعریف انقیاد داده دوطرفه (Two-Way Data Binding) در این فریم ورک به راحتی هرچه تمام، امکان پذیر است.
- Dependency Injection: این فریم ورک برای دریافت وابستگیهای تعریف شده، دارای یک سیستم تزریق وابستگی توکار است.
- تعریف Serviceهای سفارشی: در این فریم ورک امکان تعریف سرویسهای دلخواه به صورت ماژول وجود دارد. این ماژولهای مجزا را به کمک سیستم تزریق وابستگی توکار Angular، به راحتی در هر جای برنامه میتوان تزریق کرد.
- تعریف Directiveهای سفارشی: یکی از جذابترین و قدرتمندترین امکانات این فریم ورک، تعریف Directiveهای سفارشی است. Directive ها، امکان توسعه HTML را فراهم کرده اند. توسعهی HTML اکنون در قالب Web Componentsها فراهم شده است، اما هنوز هم خیلی از مرورگرهای جدید نیز از آن پشتیبانی نمیکنند.
- فرمت کردن اطلاعات با استفاده از فیلترهای سفارشی: با استفاده از فیلترها میتوانید چگونگی الحاق شدن اطلاعات را برای نمایش به کاربر تایین کنید ؛ انگولار همراه با فیلترهای گوناگون مختلفی عرضه میشود که میتوان برایه مثال به فیلتر currency ، date ،uppercase کردن رشتهها و .... اشاره کرد همچنین شما محدود به فیلترهای تعریف شده در انگولار نیستید و آزادید که فیلترهای سفارشی خودتان را نیز تعریف کنید.
- سیستم Routing: دارا بودن سیستم Routing قدرتمند، توسعه SPAها را بسیار ساده کرده است.
- سیستم اعتبار سنجی: Angular دارای سیستم اعتبار سنجی توکار قدرتمند برای بررسی دادههای ورودی است.
- سرویس تو کار برای ارتباط با سرور: Angular دارای سرویس پیش فرض ارتباط با سرور به صورت AJAX است.
- تست پذیری: Angular دارای بستری آماده برای تست کردن برنامههای نوشته شده است و از Unit Tests و Integrated End-to-End Test هم پشتیبانی میکند.
- جامعهی متن باز بسیار قوی
اینها فقط یک مرور کلی بر تواناییهای این فریم ورک بود و در ادامه هر کدام از این ویژگی را به صورت دقیق بررسی خواهیم کرد.
در مقالهی بعدی، به چگونگی نصب AngularJS خواهیم پرداخت. سپس، اولین کد خود را با استفاده از آن خواهیم نوشت و مطالب Client Side Templates و MVC را دقیقتر بررسی خواهیم کرد.