PDA

View Full Version : سوال: مباحث mvc و کالکشن ها در کتابخانه هایی مثل Backbone



water_lily_2012
دوشنبه 04 شهریور 1392, 18:04 عصر
سلام
وقتی در JQuery,Backbone و یا هر کدام از کتابخانه ها مدل و کالکشن می سازیم و با استفاده از tmpl (تمپلیت ها) اطلاعات را در صفحه وارد می کنیم. این اطلاعات ثابت هستند و در یک کتابخانه می باشند اگر بخواهیم به صورت داینامیک اطلاعات را تغییر دهیم باید چه کار کنیم؟


تشکر

cups_of_java
دوشنبه 04 شهریور 1392, 20:20 عصر
چیزی ثابت نیست. توی Backbone چیزی به نام Backend وجود داره که وظیفه دریافت داده رو از سرور به عهده داره که به مدل های شما توی Backbone وصل میشن. بنابراین Collection لیستی از مدل هاست که این مدل ها رو از Backendشون می خونه و براتون میاره که نهایتن با یک سری قالب (Template) به نمایش در میان.
Backend های مختلفی برای Backbone نوشته شدن مثلن اگه سمت سرور جاوا کار می کنید این مثال (http://coenraets.org/blog/2012/01/using-backbone-js-with-a-restful-java-back-end/) رو ببینید.

jalil_gh
دوشنبه 04 شهریور 1392, 21:18 عصر
کالکشن تو backbonejs یه متدی داره به نام fetch که هر وقت فراخوانی میشه اطلاعات رو از سرور میخونه و خودشو آپدیت میکنه. حالا اگه یک یا چند تا view هم خودشونو به این کالکشن بایند کرده باشن اونا هم آپدیت میشن. علاوه بر این شما میتونید با استفاده از متد add کالکشن، مدل‌های دیگه‌ای هم به اون اضافه کنید.
مدل‌ها هم متدی دارن به نام fetch که باعث میشه اطلاعات مدل از سمت سرور فراخوانی بشه و آپدیت بشه. علاوه بر این شما میتونید با متد set در مدل، خاصیت‌های مختلف یک مدل رو تغییر بدید و این تغییرات رو تو view هایی که به این مدل بایند شدن به صورت آنی مشاهده کنید.

water_lily_2012
سه شنبه 05 شهریور 1392, 11:20 صبح
سلام

تشکر از دو دوست عزیز.
راستش من تصمیم دارم ASP.Net MVC یاد بگیرم.
حالا نگاهی به جاوا اسکریپت و فریم ورک های اون داشتم که دیدم خیلی زیاد هستند و گیج شدم که از کدام استفاده کنم و هر کدام به چه کاری می اید.
بعد دیدم مبحث mvc در این کتابخانه ها نیز هست. نمی دونم چه فرقی با MVC در ASP داره؟؟؟

سوالی که الان برام پیش اومده اینه که خود ASP می تونه کالکشن داشته باشه و بایندینگ و این مسائل را پیاده سازی کنه. چه نیازی هست که از یک کتابخانه جاوا اسکریپت استفاده بشه و اطلاعات را در کالکشن و مدل اون بریزیم و بعد داخل View بشه؟؟؟؟

سوال بعدی اینکه مدل و کالکشن جاوااسکریپتی در یک فایل js باید ایجاد بشه درسته؟؟ خب بعد از درخواست صفحه این فایل به سمت کاربر ارسال میشه درسته؟؟ خب حالا اگر یه دکمه فشار داده شد و خواست اطلاعات این کالکشن تغییر کنه این فایل js چطور میشه باید دوباره درخواست داده بشه؟؟

یه کم بیشتر راهنماییم کنید.
تشکر

jalil_gh
سه شنبه 05 شهریور 1392, 13:15 عصر
سوال اول رو از بر و بچ ASP بپرسید به نظرم بهتره.

در مورد سوال دوم هم باید بگم که فریم‌ورک‌های MVC جاوااسکریپت بیشتر برای سایت‌های تک صفحه‌ای استفاده میشه. تو این سایت‌ها صفحه یک بار لود میشه بعد از اون دیگه صفحه رفرش نمیشه و اطلاعات بیشتر با AJAX رد و بدل میشه.
وقتی شما بخایید اطلاعات یک کالکشن رو از سرور فراخانی کنید یک درخواست AJAX به سرور ارسال میشه و با توجه به اطلاعاتی که از سمت سرور اومده این کالکشن آپدیت میشه و متناسب با اون VIEW که به این کالکشن بایند شده هم آپدیت میشه.

water_lily_2012
سه شنبه 05 شهریور 1392, 14:53 عصر
یعنی به جای اینکه اطلاعات را در خود View با AJAX تغییر بدیم این امکان هست که اطلاعات را در کالکشنی که در فایل JS هست اضافه و یا حذف کنیم و سپس View به صورت اتوماتیک آپدیت بشه. درسته؟

اظلاعات را با AJAX از پایگاه داده بگیریم و در سمت کلاینت این اطلاعات را وارد کالکشن بکنیم. درسته؟ پس فایل JS که کالکشن در اون قرار گرفته یکبار ارسال میشه.

jalil_gh
سه شنبه 05 شهریور 1392, 15:36 عصر
یعنی به جای اینکه اطلاعات را در خود View با AJAX تغییر بدیم این امکان هست که اطلاعات را در کالکشنی که در فایل JS هست اضافه و یا حذف کنیم و سپس View به صورت اتوماتیک آپدیت بشه. درسته؟

اظلاعات را با AJAX از پایگاه داده بگیریم و در سمت کلاینت این اطلاعات را وارد کالکشن بکنیم. درسته؟ پس فایل JS که کالکشن در اون قرار گرفته یکبار ارسال میشه.
بله درسته.

cups_of_java
سه شنبه 05 شهریور 1392, 20:32 عصر
این موضوع رو انقدر شیرین و به روز می دونم که براتون توضیحاتی نوشتم، امیدوارم به درد بخوره، سوال داشتید بازم بپرسید.


بعد دیدم مبحث mvc در این کتابخانه ها نیز هست. نمی دونم چه فرقی با MVC در ASP داره؟؟؟

MVC یه الگوی معماری در سطح کد نرم افزار شماست که از قدیم برای نرم افزارهای دارای گرافیک کاربری (GUI) درومد. این الگو به مرور زمان خیلی تغییر کرد و نسخه های مختلفی ازش درومد. شما حتی داخل خود دات نت فکر می کنم چند مدل پیاده سازی از MVC توی فریم ورک های مختلف می بینی. تو جاوا که این قضیه بارز تره و فریم ورک های مختلف هم به گونه های مختلف MVC رو برای شما فراهم می کنن. اما تا اینجای داستان MVC توی بستر های سه لایه سنتی و سرور ساید دیده میشد. تا اینکه کم کم برنامه های تحت وب فراگیرتر و قدرت مند تر شدن. در 10 سال گذشته برنامه های وب جای خیلی برنامه های دسکتاپ رو گرفتن و نیاز به نوشتن کدهای زیادی در سمت کلاینت (مرورگر) بوجود اومد! AJAX بیشتر و بیشتر استفاده شده و برنامه های وبی از اون حال و هوای سنتی شون درومدن. (وب 2) بنابراین کم کم فریم ورک های سمت کلاینت (طبعن جاوا اسکریپت) بوجود اومدن و بزرگ شدن. تا جایی که حتی معماری های سه لایه و حتی MVC دستخوش تغییرات زیادی شد. الان اگه بگردید از MVP، MVV، MVVM و... میشنوید. اینا جای MVC رو تو فریم ورک های جاوا اسکریپتی گرفتن چون نیاز ها این طرف خیلی با نیاز های سمت سرور فرق داشته. اینجا اکثرت شما AJAX داری، آسنکرون هستی، ویو همیشه باید با تغییر مدل به روز بشه، و ...! MVC این نیاز ها رو براورده نمی کنه در نوع ساده خودش! (مثلن موجودی به نام کنترلر توی این فریم ورک ها اصولن زائد احساس شده، که درست هم هست.)
تو وب 2، حتی برنامه های تحت وب تک صفحه ای مطرح شدند که url شما عوض نمیشه و مرورگر صفحه ی دیگه ای رو لود نمیکنه. همه این فریم ورک های جاوا اسکریپتی برای Single Page ها مناسب نیستن اما بعضن امکاناتی دقیقن برای همین کار ها توشون وجود داره.


سوالی که الان برام پیش اومده اینه که خود ASP می تونه کالکشن داشته باشه و بایندینگ و این مسائل را پیاده سازی کنه. چه نیازی هست که از یک کتابخانه جاوا اسکریپت استفاده بشه و اطلاعات را در کالکشن و مدل اون بریزیم و بعد داخل View بشه؟؟؟؟

الان دیگه می تونید متوجه بشید چرا سمت کلاینت این کارها رو می کنن! درسته؟


مدل و کالکشن جاوااسکریپتی در یک فایل js باید ایجاد بشه درسته؟؟ خب بعد از درخواست صفحه این فایل به سمت کاربر ارسال میشه درسته؟؟ خب حالا اگر یه دکمه فشار داده شد و خواست اطلاعات این کالکشن تغییر کنه این فایل js چطور میشه باید دوباره درخواست داده بشه؟؟
کد های کلاینت ساید شما مثل یه برنامه سرور ساید تو فایل های مختلف نوشته میشن تا از پیچیدگی مدیریت نرم افزار کم بشه. بعضن تو پروژه های متوسط هم چندین هزار خط کد کلاینت ساید هست و تعداد خیلی زیادی فایل js!
تو حالت های Single Page رو که دوست خوبمون توضیح دادن، تو حالت های غیر تک صفحه ای هم توی همه صفحه ها کد های js شما include میشن دیگه. حالا php باشه جاوا باشه یا هر زبان دیگه ای! تمام فریم ورک ها امکان include کردن قالب های سمت سرور رو دارن که شما بتونین فایلی مثلن مثل my_js_libs.php رو اول همه صفحه هاتون Include کنید. این فایل می تونه حاوی تگ script فایل هاتون باشه.

water_lily_2012
چهارشنبه 06 شهریور 1392, 11:21 صبح
سلام و تشکر

سایت ها مثل برنامه های دسکتاپ شده. مثلا به جای WPF برای طراحی از HTML ,CSS استفاده میشه و MVVM، مدل و کالکشنی که در دسکتاپ با C#‎ پیاده سازی میشه اینجا با جاوااسکریپت و فریم ورک هاش. درسته؟
اگر اینطوره چه موقعی کالکشن ها در فایل یا فایل های js مقدار می گیرند، چون اینطور که متوجه شدم اطلاعات هنوز در دیتابیس اصلیه و وارد کالکشن های جاوااسکریپت شده و با یه تمپلیت نمایش داده می شوند.

و در چه مواقعی باید سایت را به صورت Single Page App تعریف کنیم؟ و کدام فریمورک برای این کار بهتر است؟؟

تشکر

jalil_gh
چهارشنبه 06 شهریور 1392, 13:26 عصر
***********************************

jalil_gh
چهارشنبه 06 شهریور 1392, 13:27 عصر
سایت ها مثل برنامه های دسکتاپ شده. مثلا به جای WPF برای طراحی از HTML ,CSS استفاده میشه و MVVM، مدل و کالکشنی که در دسکتاپ با C#‎‎‎ پیاده سازی میشه اینجا با جاوااسکریپت و فریم ورک هاش. درسته؟
میشه گفت اینطوریه. فقط تو وب چون ارتباط بین سرور و کلاینت به صورت اسینکرون هست یکم پیاده سازی‌هاش فرق میکنه.

اگر اینطوره چه موقعی کالکشن ها در فایل یا فایل های js مقدار می گیرند، چون اینطور که متوجه شدم اطلاعات هنوز در دیتابیس اصلیه و وارد کالکشن های جاوااسکریپت شده و با یه تمپلیت نمایش داده می شوند.
اینکه کی کالکشن‌ها و مدل ها مقدار بگیرن بستگی به برنامه داره. ممکنه موقع لود شدن صفحه، کلیک بر روی یک دکمه و ... باشه.
در ضمن نحوه ارتباط بین مدل ها و viewها تو فریم‌ورک‌های مختلف فرق میکنه. بعضی‌هاشون این کار رو به صورت خودکار انجام میدن و تو بعضی‌هاشون باید خودمون تعریف کنیم که که این ارتباط چطوری باشه. نحوه نمایش تو viewها هم فرق میکنه. بعضی از فریم‌ورک‌ها از تمپلت‌ها استفاده میکنن، تو بعضی‌ها باید murkup مخصوص خودشون رو به فایل html اضافه کنی و تو بعضی‌هاشون هم باید خودت تصمیم بگیری چطوری اطلاعات رو نمایش بدی.

در چه مواقعی باید سایت را به صورت Single Page App تعریف کنیم؟ و کدام فریمورک برای این کار بهتر است؟؟
اینکه کی سایت به صورت تک‌صفحه‌ای باشه بستگی به نوع صفحه و خود شما داره. اینو خودتون باید تشخیص بدین.
حالا این که کدوم فریم‌ورک بهتره باز هم بستگی به نوع برنامه داره. هرکدوم از فریم‌ورک‌ها فلسفه خودشونو دارن و بعضی کارها رو خوب انجام میدن. ولی برای شروع فکر میکنم backbonejs و knockoutjs مناسب باشن.

cups_of_java
چهارشنبه 06 شهریور 1392, 17:07 عصر
در چه مواقعی باید سایت را به صورت Single Page App تعریف کنیم؟

برنامه های Single Page خصوصیات خاص خودشونو دارن به خاطر همین به ذات برنامه ای که می خواین بنویسین هم بر میگرده اما به طور کلی تو موارد زیر استفاده میشن:
۱) معماری سه لایه شما برعکس مدل سنتی (thin Client + Fat Server) باشه یعنی کلاینت Rich باشه و پر از قابلیت و منطق های برنامه و سرور های شما سبک و متنوع از نظر سرویس و تکنولوژی - در واقع وقتی که سمت سرور شما Cloud based باشید یا SOA باشید. در این حالت اصطلاحن شما Lean Server هستید و Fat Client
۲)‌ وقتی که نیاز به تکنولوژی های دو طرفه وب مثل Websocket داشته باشید و اجزا صفحه دایمن بخوان از جاهای مختلف به روز بشن و کاربر بتونه در محل دیگه ای از صفحه کنترل های رو انجام بده و کارایی بکنه.
۳) سرعت ارتباط کاربر با نرم افزار خیلی باید سریع و تقریبن Realtime باشه!
...

اما استفاده از Single Page ها مشکلاتی هم به همراه میاره:
۱)‌ SEO توی این سبک برنامه ها هنوز مشکلی حل نشده هستش!
۲)‌ Historyی مرورگر کار نمی کنه و شما خودتون با کمک libraryهایی باید به سختی navigation کاربر رو تو اجزای صفحه کنترل کنید تا بتونید براش back و forward فراهم کنید!
۳)‌ فریم ورک های جاوا اسکریپت هنوز کاملن برای SPA ها آماده نشدن و امکانات دقیقی برای حل مشکلاتش فراهم نمی کنن.

من ۲ سالی تجربه توسعه Single Page ها رو دارم و دردسر های زیادی رو اونجا دارید اما خوب یه چیز هایی هم بدست میارید. در کل باید بتونید تشخیص بدید که به صورت مسلتون می خوره یا نه،‌ اگه اشتباه کنید براتون دردسر میشه!



کدام فریمورک برای این کار بهتر است؟؟
این سوالتون مهندسی نیست!‌ بهتر معنی نداره!
۱) مقایسه کلیشون (http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks)
۲) مقایسه با کد (http://paulhammant.com/2012/02/13/client-side-mvc-frameworks-compared/)
۳)‌ یه مقاله مقایسه ایه فوق العاده (http://blog.stevensanderson.com/2012/08/01/rich-javascript-applications-the-seven-frameworks-throne-of-js-2012/)

یه سایت که کمک می کنه انتخاب خودتون رو انجام بدید ;) (http://todomvc.com/)