PDA

View Full Version : سوال: چرا باید از MVVM استفاده کنیم؟!



armsoftpc
یک شنبه 22 مرداد 1391, 19:01 عصر
به نام خدا
با سلام
چرا باید از MVVM استفاده کنیم؟(منظور من بیشتر قسمت Binding) است، در حالی که می توانیم بدون دردسر داده ها را به صورت دستی از پایگاه داده گرفته و با دیتاتیبل و سایر موارد به نمایش ، حذف ، ایجاد و ویرایش آن ها بپردازیم.:متفکر:

hakim22
سه شنبه 24 مرداد 1391, 17:36 عصر
در اینجا بایدی وجود نداره !
همیشه باید شرایط رو بسنجید و بعد انتخاب کنید از چه روشی برای برنامه نویسی استفاده کنید.
در بسیاری از پروژه های کوچک با حجم کد کم نیازی به پیاده سازی این روش نیست. مثل این میمونه که بخواهید یک مگس رو با یک مسلسل بکشید !
زیادی شلوغ کردن یک پروژه ی ساده هم کار درستی نیست.
از این مدل در برنامه های سنگین تر استفاده میشه . اصولا نمیشه وقتی یک تیم کاری 10 یا 15 نفره دارن روی یک پروژه کار می کنند همه چیز رو با هم ببینند.
وقتی تنها کار می کنید شما خودتون هم دیتابیس ، هم اینترفیس و هم کدها ی پس زمینه رو مینویسید.

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

من در یک تیم کار می کنم و این مسیری است که در خیلی موارد در پیش میگیریم . اما در پروژه های کوچک و ساده تر نیازی به اینقدر پیچاندن لقمه نیست !

armsoftpc
جمعه 27 مرداد 1391, 17:02 عصر
سلام
ممنون از توضیحاتتون، اما حالا فرض کنید ، کار هم گروهی باشه ، باز چه نیازی به Binding و دیگر ابزار های دیتابیسی است که ممکن است همانطور که در آموزش آقای gwbasic که توضیح داده اند ، باگ وجود داشته باشه و این روش مطمئن نیست(البته به نظر من که 3-4 ماهی بیش تر نیست که حرفه ای یادگرفتن سی شارپ رو شروع کردم)، اصلا اگر تغییری در دیتابیس ایجاد کنیم، باید تغییرات گسترده ای چه در binding چه در روش Datatable ایجاد کنیم.
حالا Binding چه مزیتی نسبت به دیتاتیبل دارد؟:متفکر:

gwbasic
چهارشنبه 13 دی 1391, 16:26 عصر
MVVM یا MVC یا MVP الگوهایی هستند که منطق برنامه رو از UI جدا می کنند. بنابراین کسی که می خواد جهت نظم بیشتر، بخشهای پروژش رو تفکیک کنه از این الگوها استفاده می کنه. جالبه بدونید که در محیط وب با کمک knockoutjs شما می تونید سمت کلاینت در Browser الگوی MVVM رو پیاده سازی کنید و کنترل هاتون رو به مدلتون Bind کنید
اما در مورد Binding آموزش دادم "آموزش DataBinding" منو ببینید. شما وقتی مدلی دارید و با تغییرات اون مدل می خواید کنترل های فرمتون تغییر کنه از Binding استفاده می کنید. حالتی رو فرض کنید که با تغییر یک قسمت از فرمتون فرم دیگه ای قرار تغییر کنه بدون binding کد بیشتر باید بنویسید. اگه به روش سنتی با DataTable ها و TableAdapter کار می کنید بدونید که اونجا هم از Binding بصورت توکار استفاده می شود.
در ضمن من در آموزش هام هیچ وقت نگفتم که EF باگ داره فقط یکجا اشاره کردم که Code Generator ویژوال استودیو مشکلی داشت که در نسخه VS 2008 وجود داشت و با سرویس پک حل شد و موضوع کوچکی بود.

برای اینکه کار با ORM و روش سنتی رو مقایسه کنید همان سناریویی که در ثبت سفارشات انجام دادم رو با DataTable انجام بدین و مقایسه کنید که با یک بار ذخیره هم Order و هم OrderDetails با هم ذخیره شود. در ضمن در همان فرمتون امکان ویرایش یک سفارش هم وجود داشته باشد.

user6627
چهارشنبه 13 دی 1391, 17:38 عصر
قدرت MVVM در WPF مشخص میشه که شما میتونید با استفاده از MVVM ظاهر برنامه را کلا از کدنویسی جدا کنی (در MVP هنوز بین این دو قسمت ارتباط وجود دارد)
وقتی شما از WPF و در نتیجه از محیط XAML برای طراحی برنامه استفاده کنید اونوقت به قدرت MVVM و Binding پی میبرید .
و اما در مورد بایندینگ!
بایندینگ در اصل به معنی ارتباط و اتصال بین دو شی یا دو کنترل و یا یک شی و یک کنترل هست پس دو قسمت مختلف برنامه با استفاده از بایندینگ براساس یکی از ویژگی هایشان به هم متصل میشن (مثل Text, Enabled, Visibility,...)
و با تغییر یک طرف ، طرف مقابل متوجه آن تغییر میشه و کار مورد نظر شما را انجام میده و این نیاز بنوشتن هیچ کدی نداره!
مثلا فرض کنید اطلاعات جدولتون را به تعدادی تکست باکس بایند کردید برای مثال ستون Name در جدولتون به تکست باکسی بنام txtName بایند شده
در اینجا شما خاصیت Text تکست باکستون را به مقدار Name جدول بایند کردید یعنی این دو قسمت به هم متصلند و با تغییر یکی دیگری نیز تغییر میکند . حال اگر تعداد ستونها و در نتیجه تکست باکس هاتون زیاد باشه ، پس از ورود اطلاعات توسط کاربر در تکست باکس ها ، شما بدون هیچ مداخله و کدنویسی و تنها با استفاده از همین بایندینگ اطلاعات کاربر را بصورت ذخیره شده در شی تون در اختیار دارید درصورتیکه اگر از بایندینگ استفاده نمیکردین مجبور بودین مقادیر تک تک تکست باکس ها را بخونید و سپس در تک تک مقادیر شی تون ذخیره کنید.

mze666
چهارشنبه 13 دی 1391, 20:09 عصر
از MVVM در پروژه های WPF و Silverlight استفاده میشه و واقعاً روش فوق العاده ای هستش (نظم کدها و کاهش وابستگی به ظاهر برنامه و ...)
بیشتر در پروژه های بزرگ استفاده میشه ولی نه این که در پروژه های کوچیک نشه استفادش کرد - حجم کد شاید یه مقدار بالا بره ولی با استفاده از یک فریمورک MVVM این موضوع هم حل میشه.

firoozi90
شنبه 28 دی 1392, 16:33 عصر
این فایل گویای همه چیزه
آموزش فارسی mvvm به زبان ساده (http://barnamenevis.org/showthread.php?437170-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-mvvm-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87)