ورود

View Full Version : گفتگو: مشكلات و ابهامات معماري MVVM



reza105
یک شنبه 19 دی 1389, 13:22 عصر
سوالات و ابهاماتي براي بنده در مورد معماري mvvm پيش اومده كه دوست دارم كسايي كه واقعاً الان دارن از اين معماري در پروژه هاي تجاري خودشون استفاده ميكنن به سوالات من جواب بدن و در مورش بحث كنن.

1. طبق تعريف معماري mvvm لايه ها نبايد به لايه بالايي خود دسترسي پيدا كنند. من در همه مثال هايي كه ديده ام هم براي تعريف لايه ها از new folder استفاده كرده اند. در اين حالت كه لايه ها به هم دسترسي دارن پس تعريف اين معماري زير سوال مي رود.

حال اين سوال براي من پيش اومده كه به جاي New folder نميشه از class library استفاده كرد؟ كسي استفاده كرده ؟ اگر نه مشكل دسترسي لايه ها را چطور حل مي كنيد؟

2. وقتي از لايه view model مي خوايد به يك فرم در لايه view دسترسي پيدا كنيد چه ميكنيد؟ مثلاً يك تابع بعد از اجراي دستوراتش در آخر فرم رو ببنده. يا روي يه كنترل فوكوس بشه؟
اين كار شدنيه ولي اصول خاصي نداره. براي اينگونه اعمال چه تدبيري انديشيده ايد و چگونه پياده سازي ميكنيد؟

3. دليل اينكه از اين معماري استفاده ميكنيد چيه؟
اين كه فقط هزينه نگه داري نرم افزار رو كاهش بده براي اين كه از اين معماري استفاده كنيد شما رو متقاعد كرده يا دليل ديگه اي هم هست؟ آيا هزينه توليد (پياده سازي) بيشتر نميشه؟ اين بيشتر شدن هزينه توليد ارزش كمتر شدن هزينه نگهداري رو داره؟
من هنوز متقاعد نشدم كه اين معماري در كل هزينه ها رو كاهش ميده.

در آخر كسي پروژه اي تجاري رو در حد يه نرم افزار بزرگ رو با اين معماري كار كرده؟ اگر جواب مثبت است زحمت بكشيد تجارب خودتون رو در مورد كار كردن با اين معماري در اختيار بنده و ديگر دوستان قرار دهيد.

رضا عربلو
یک شنبه 19 دی 1389, 14:03 عصر
نکته: معماری MVVM یک توصیه و سفارش است و آیه قرآن نیست. در ضمن این معماری شکل خاصی ندارد و در واقع این به سلیغه شما بستگی دارد که چگونه انرا پیاده سازی کنید.
1- استفاده از folder ها تنها برای سازماندهی کدهای نوشته شده می باشند. شما می توانید از آنها استفاده کنید و یا نکنید.اگر متوجه شده باشید اگر یک پروژه با فضای نام MyNamespace داشته باشید و در داخل آن یک پوشه به نام viewModel ایجاد کنید هنگامی که یک class داخل آن توسط vs ایجاد می کنید خود vs بصورت پیش فرض فضای نام MyNamespave.ViewModel را برای کلاس شما در نظر می گیرد.
شما بایستی لایه هایتان را بصورت منطقی از هم جدا نمایید. یعنی به عنوان مثال در لایه ViewModel اطلاعی از لایه View ندارید و اینکه اطلاعات این لایه که غالباً بصورت یک ObservableCollection هستند قرار است به چه صورتی نمایش داده می شوند.
2-قالباً بایستی اعمال دستکاری لایه view را در خود لایه view انجام دهید. علی االیحال اگر می خواهید فرضاً با اجرای یک فرمان فرمتان را ببندید (هر چند ترجیحا سعی کنید این کار را در داخل خود لایه view انجام دهید) راه های گوناگونی دارید به عنوان مثال:
الف - فرم را بصروت یک پارامتر به فرمانتان پاس دهید.
ب - یک اونت در لایه viewModel تان تعریف کنید و انرا هنگامی که فرمانتان انجام شد Invoke کنید. حال در لایه view برای اونت فوق یک handler بنویسید.
پ - ....
3- دلیل استفاده از معماری ها و الگو ها همانطور که گفتید عمدتاً کاهش هزینه های نگهداری، افزایش خوانایی، راحتی اشکال زدایی و .... است. استفاده از معماری ها هرچند در ابتدا پر هزینه می باشند ولی بعد از مدت کوتاهی کارایی و سود دهی خود را نشان می دهند.
به عنوان شرکتی را در نظر بگیرید که نرم افزاری تهیه می کند که ممکن است سالیان سال آن را بفروشد. در طول این سال ها پرسنل این شرکت می روند و پرسنل جدیدی می ایند. از آنجا که شما از یک معماری و اسلوب خاص استفاده کرده اید. نیرو های جدید به راحتی می توانند از کدهای بخش های مختلف نرم افزار سر در بیاورند. و این یعنی هزینه نگهداری کمتر.
در واقع با اینکار شما سعی می کنید سلیقه تمام برنامه نویسانتان را یکسان کنید.

مهدی فرزاد
یک شنبه 19 دی 1389, 15:45 عصر
سلام

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

ricky22
یک شنبه 19 دی 1389, 16:42 عصر
سلام دوستان.
MVVM مزیت های بیشتری علاوه بر مزیت هایی که دوستان گفتند دارد.
لطفا این (http://www.lab49.com/files/videos/Jason%20Dolinger%20MVVM.wmv)ویدیو را ببینید.
این (http://barnamenevis.org/why-mvvm-and-what-are-its-core-benefits)Thread هم جالبه.
و در نهایت آموزش از سری آموزش های جناب وحید نصیری را دریافت کنید : http://www.box.net/shared/3i7gf3b7xd
(لطفا پست ندهید که فی*ل*ت*ر هست)

reza105
دوشنبه 20 دی 1389, 08:23 صبح
كسي جواب ديگه اي نداره ؟





در آخر كسي پروژه اي تجاري رو در حد يه نرم افزار بزرگ رو با اين معماري كار كرده؟ اگر جواب مثبت است زحمت بكشيد تجارب خودتون رو در مورد كار كردن با اين معماري در اختيار بنده و ديگر دوستان قرار دهيد.

ho5531n
سه شنبه 20 اردیبهشت 1390, 11:49 صبح
سلام در مورد سوال 2 :
فکر می کنم یکی از راههای خوب استفاده از Message ها باشه .
نظر شما چیه؟

farashah_jalal
سه شنبه 20 اردیبهشت 1390, 12:17 عصر
سلام در مورد سوال 2 :
فکر می کنم یکی از راههای خوب استفاده از Message ها باشه .
نظر شما چیه؟
منظور شما از Message ها چيه؟؟

Amir Oveisi
سه شنبه 20 اردیبهشت 1390, 13:57 عصر
كسي جواب ديگه اي نداره ؟
در آخر كسي پروژه اي تجاري رو در حد يه نرم افزار بزرگ رو با اين معماري كار كرده؟ اگر جواب مثبت است زحمت بكشيد تجارب خودتون رو در مورد كار كردن با اين معماري در اختيار بنده و ديگر دوستان قرار دهيد.

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