فریم ورکهای زیادی برای جاوا اسکریت وجود داره ، به نظر شما استفاده کدام برای MVC یا web form بهتر است ؟
خواندن کدام رو توصیه میکنید و نظر شما در مورد Ember.js چیه ؟ آیا از همه فریم ورکها قویتر است ؟
مهدی سعیدی فر در ۱۳۹۲/۰۶/۰۵ ۸:۴۵
به نظر شخصی خودم، هیچ کدام از این فریم ورکها به گرد پای AngularJS هم نمیرسند.
مهمان در ۱۳۹۲/۰۶/۰۵ ۱۰:۵۳
یک مقایسه اینجا بین فریم ورکهای مختلف صورت گرفته ، و از 4 دیدگاه هر فریم ورک رو مورد بررسی قرار دادن . با توجه به اینکه شما AngularJS رو بهترین میدونید (برای MVC) ، چه مزیتهایی رو نسبت به فریم ورکهای دیگه داره و اینکه در جدول مقایسه Ember.js رو در مقایسه بهترین میدونه !
به نظر شما و دوستان دیگر و اساتید کار کردن با کدوم فریم ورک آزادی عمل و قدرت بیشتری رو در اختیار برنامه نویس میذاره ؟
مهدی سعیدی فر در ۱۳۹۲/۰۶/۰۵ ۱۱:۵۶
این مقایسه که معرفی کردید خیلی اشتباه است. به این دلیل ایشون Ember.js را برترین میدونند که هر چهارتیک، از نظر ایشون خورده باشه.
AngulaJs از نظر ایشون Composed Views را دارا نیست. خدایی نکرده به گوش توسعه دهندگان این فریمورک نرسه. نمیدونم ایشون با directiveها در انگولار کار کرده اند یا نه. فوق العاده قدرتمند است. دیگر نیاز به web components در HTML نیست. انگولار این کار را به بهترین نحو انجام میدهد. جامعهی متن باز هم برای انگولار کم نگذاشته اند. فقط برای مثال در گوگل جستست و جو کنید directive for bootstrap. نتیجه را خود مشاهده کنید.
سیستم انگولار بر مبنای تزریق وابستگی یا همان dependency injection است. شما به راحتی میتوانید برای برنامهی خود سرویسها در ماژولهای جداگانه تعریف کنید و به راحتی آن را در کنترلهای خود تزریق کنید و همین تزریق وابستگی خودکار نوشتن آزمونهای ساده را بسیار ساده میکند و نوشتن سرویسهای با قابلیت استفاده مجدد را آسان تر.
انگولار دارای سیستم روتینگ پیشرفته برای نوشتن برنامههای single page است. به شما قول میدهم نوشتن یک برنامه ای مثل gmail دیگر با این امکانات آن چنان دور از دسترس نخواهد بود.
انگولار درست است که mvc را توصیه میکند، اما به قول دوستان این یک *MV است. به این مفهوم که شما به راحتی میتوانید الگوهای MVC یا MVVM یا MVP و دیگر الگوهای مبتنی بر MV رابه کار گیرید.
سیستم دیتا باندینگ پیشرفته این فریم ورک امکان نوشتن برنامههای MVVM را به سهولت فراهم کرده است.
این فریم ورک همچنین از validation تو کار استفاده میکند و دیگر نیاز به افزونههای دیگر برای پیاده سازی valdiation نیست و این کار را خود angularjs به نحو احسنت انجام میدهد.
این فریم ورک دارای سرویسی به نام http$ است که به راحتی میتوانید از آن برای ارتباطات ajax از آن استفاده کنید.
تعداد بیشماری ماژول یا سرویس برای انگولار توسعه داده شده. یکی از آنها angular-resource است که کار ارتباطات با سرویسهای rest را بدون درگیر شدن شما با جزئیات به نحو احنست انجام میدهد.
دنبال کامپوننتهای آماده ور ایگان برای انگولار میگردید؟ به طور مثال این را در گوکل سرچ کنید:grid for angularjs
از جامعهی متن باز آن لذت ببرید. حتی یک توصیه! نوشتن یک گرید پیشرفته با انگولار دیگر کار خیلی پیچیده و سختی نیست. به راحتی خودتان میتوانید آن را بنویسید.
انگولار همچینین برای دستکاری DOM دارای API هایی نیز هست که میتواند شما را دیگر از jQuery بی نیاز کند. فراموش نکنید که خود Angular به خودی خود از وجود jquery خبردار میشود وکاملا با jquery هماهنگ است.
انگولار همچنین به شما امکان تعریف فیلترهای سفارشی را میدهد. فیلترها نیز از همان بخشهای جذاب انگولار است.
به نظر من فریم ورکهای دیگر در مقابل این امکانات Angualr ضعیف عمل میکنند:
- امکان تعریف directiveهای سفارشی ( به نظر من قدرتمندترین امکان انگولار است)
- نوشتن سیستم با معماریهای *MV که مرجح آن MVC است.
- مبتنی بودن فریم ورک بر dependency injection
- نوشتن سرویسهای مورد نظر در ماژولهای جداگانه و تزریق آنها به قسمتهای مختلف برنامه از طریق سیستم dependency injection تو کار
- دارا بودن سیستم routing پیشرفته برای نوشتن برنامههای single page بزرگ
- دارا بودن tempalate engine قدرتمند.
- دارا بودن valdiation توکار
فراموش نکنید این را که تولد angularjs در گوگل بوده است و اکنون توسط هزاران توسعه دهنده توسعه داده میشود و توسط گوگل حمایت میشود. جامعهی بزرگ آن و کدهای آماده موجود بر هیچ کسی پوشیده نیست و تمامی سوالات و چالشهای ممکن قبلا در سایتهای مختلف پاسخ داده شده اند. همچنی اگر ویژوال استادیو 2013 را بررسی کرده باشید، کلیهی امکانات کار با AngularJS را فراهم کرده از intellisense تا...
این را فراموش نکنید که انگولار یک فریم ورک پیچیده اما قوی است. پس اگر قصد نوشتن برنامههای single page ، محاوره ای , تست پذیر با آرمونهای واحد را ندارید سراغ آن نروید چون کار شما را فقط سخت و پیچیده میکند.
امیدوارم توضیحاتم کامل بوده باشد.
مهمان در ۱۳۹۲/۰۶/۰۵ ۱۲:۴۵
مرسی بابت توضیح کاملتون . توضیحات شما کامل و بی نقص هست و جایی برای صحبتی نمیگذاره . در صورت امکان نظرتون در مورد Knockout چیه ؟
مهدی سعیدی فر در ۱۳۹۲/۰۶/۰۵ ۱۳:۱۲
برای مثال ما دو نرم افزار paint و photoshop را برای ویرایش عکس داریم. بدیهی است که فتوشاپ همهی کارایی paint را نیز دارد اما paint چطور؟ اگر واقعا paint کار شما را انجام میدهد آیا احتیاجی به نصب فتوشاپ هست؟ مطمئنا خیر
در اینجا هم انگولار تمام کارهای knockout را انجام میدهد. اما ناک اوت خیلی سبکتر و جمع و جورتر از انگولار است و یادگیری آن هم بسیار ساده تر.
در نتیجه میتوان گفت که اگر به امکانات ذکر شدهی angularjs احتیاج ندارید، برگ برنده از نظر سبکی و راحتی با knockout است.
با همهی این تفاسیر فراموش نکنید که انگولار تمامی امکانات فریم ورکهای دیگر را دارد، پس یادگیری آن منطقیتر و به صرفهتر است.
محسن خان در ۱۳۹۲/۰۶/۰۵ ۹:۱۲
ناک آوت در دات نت زیاد تحویل گرفته میشه چون نویسندهاش آقای استیو اندرسون عضو تیم ASP.NET MVC است. براش اینتلیسنس در VS 2012 درست کردن و همچنین کلی منبع آموزشی براش هست.
دادخواه در ۱۳۹۲/۰۶/۰۵ ۱۲:۳۰
سلام
شرمنده. من در زمینه وب تازه کارم و شاید جای سوالم اینجا نباشه.
راستش دارم از مطالب این وب سایت استفاده میکنم و ASP.Net MVC و فریم ورکهای جاوا اسکریپت را یاد میگیرم.
سوالم اینه که ASP.net خودش مدل و کالکشن داره. چرا در فریم ورکهای جاوااسکریپت مدل و کالکشن میسازیم و استفاده میکنیم؟
بعد مگر مدل و کالکشن نباید در فایل JS باشه. خب حالا اگر بخواهیم اطلاعات این کالکشن را با استفاده از اطلاعات مدل و کالکشن و کنترلر د رASP.Net MVC تغییر بدیم باید چگونه عمل کنیم؟
تشکر
محسن خان در ۱۳۹۲/۰۶/۰۵ ۱۲:۴۷
JS سمت کاربر هست. ASP.NET سمت سرور عمل میکنه. دو مقوله مجزا هستند که نهایتا با ارسال اطلاعات به سرور و نگاشت آنها به اشیاء دات نتی یا برعکس کارها انجام میشه.
مهدی سعیدی فر در ۱۳۹۲/۰۶/۰۵ ۱۳:۲۵
سلام؛
برنامههای وب در حالت معمول stateless هستند، بدین معنی که وقتی مثلا شما لیست 10 اخبار اخیر سایت را درخواست میکنید، پس از نمایش و رند شدن این اخبار در سمت کلاینت تمامی منابع گرفته شده آراد میشود.
سادهتر بگم. فرض کنید در کنترلر خود یک متغیر عددی تعریف کرده اید که در هر بار درخواست یک واحد به آن افزوده میشود. یک دکمه هم در صفحه گذاشته اید که آن به اکشن متد مورد نظر درخواست داده و نتیجه را چاپ میکند. اگر شما چندین بار هم آن دکمه را فشار دهید، یک خروجی تکرای دریافت میکنید. چرا که مقدار آن متغیر پس ار اینکه نمایش داده شد، از بین میرود.
مطالب فوق هم بدیهی هستند، چون یک وب سرور باید در بعضی مواقع میلیونها درخواست را پاسخ بدهد و اگر منابع برای هر پاسخ حفظ میشدند، احتیاج به منابع نامحدود حافظه بود.
در برنامههای single page ، یعنی برنامه هایی که همهی عملبات توسط ajax مدیریت میشود و هیچگاه اطلاعت به صفحه اصطلاحا پست بک نمیشوند، یک محدودیت وجود دارد و ان هم همین stateless بودن هست.
خبر خوب این است که در سمت کلاینت و کدهای جاوا اسکریپت ما با یک برنامهی statefull طرف هستیم و منابع مورد استفاده در مروگر تا وقتی که صفحه عوض نشود و همهی عملیات به صورت آسنکرون و ajax انجام شود، تخریب نمیشوند.
کار این فریم ورکها هم اکثرا شبیه سازی محیط دسکتاپ است و پدید آوردن امکانات موجود در برنامههای ویندوز. تمامی عملیات از قبیل افزودن و ویرایش و حذف در سمت کلاینت مدیریت میشود و در نهایت شما با یک درخواست کوچک به سرور تمامی تغییرات را منعکس میکنید.
دادخواه در ۱۳۹۲/۰۶/۰۵ ۱۵:۵۲
با تشکر؛ خب در ASP.Net MVC یک مدل و کالکشن داریم بعد از اینکه کاربر یک دکمه را فشار داد توسط AJAX به متد مربوطه در ASP متصل شده و اطلاعات را دریافت میکند و بعد با یک دستور مثلا foreach اطلاعات را با توجه به template که توسط CSS تعریف شده نمایش میدهد.خب این یک روشه که از مطالب MVC خوندم.
خب حالا چه نیازی به مدل و کالکشن در فایل JS داریم؟
مهدی سعیدی فر در ۱۳۹۲/۰۶/۰۵ ۱۶:۲۵
خیلی خلاصه پاسخ میدم. ایا بخش مدیریت سیستم iris را دیدید. با همین روشی که ذکر کردید توسعه داده شده. پوستم کنده شد و در نهایت به یک سیستم تست ناپذیر و غیر قابل نگهداری رسیدم.
بله تو یک یا ده دکمه، حرف شما درست است. و احتیاجی به این فریم ورکها نیست. اما بخش مدیریت یک سیستم مدیریت چی که شامل صدها دکمه و اینپوت باکس و گرید و... است.
منظورم را وقتی کامل متوجه میشوید که با چالشهای تولید یک سیستم بزرگ single page روبرو شده باشید.