سلام خدمت دوستان عزیز
من تازه شروع کردم به یادگیری MVVM و دارم همراه یادگیری یکی از پروژه هام رو بر طبق اون انجام میدم ... حالا تو بعضی تعاریف مشکل دارم و بعضی جاها هم تو پیاده سازی ... میپرسم امیدوارم که دوستان مطلع بدادمون برسن ...
تو بخش تعاریف :
1. فرض در طراحی اومدن یه کلاس رو معرفی کردن به نام person با خواص خودش ( firstname , birthday , ..) و گفتن این کلاس متدی داره که مثلا میاد یه محاسبه ای در مورد روز تولد طرف میکنه (() public Boolean CheckBirthDay ) و یه مقدار bool رو بر میگردونه ...
پر واضحه که این طراحی یه دیتابیس رو هم شامل میشه که توش جدول person هم داریم .... میایم تو MVVM : فرض view یه دیتا گرید ساده است ... viewmodel هم با observablecollection و لایه DAL اومده از کلاس model استفاده کرده و اطلاعات نمایشی رو برای view ردیف کرده ... حالا سوال اینه ... اینا همش برای نمایش اون چیزی هست که مستقیم از دیتابیس میاد ... من دقیقا کجا باید اون محاسبات روی روز تولد کلاس person رو انجام بدم ( که بعد بیام نتیجه bool رو تو view نمایش بدم ؟)؟ ... viewmodel ? ... یا Model ? ... یا اصلا تو یه کلاس جدا ؟ ... این احتمالا همون بخش BLL برنامه است ... تو MVVM این بخش رو کجا قرار میدیم ؟ توضیحات اینترنتی میگه بزارش تو model ... ولی همیشه اموزش ها model رو خیلی ساده با چند تا متغییر تعریف میکنه ! ... متدی اصلا توش نداریم ! ... این یه مثال ساده بود ... فرض متد هایی داریم که خودشون اندازه یه کلاس محاسبات داره ... آیا اونا رو هم باید بزاریم تو Model یا جایی دیگه ؟ ...
public class Model:
{
public string FirstName{ get; set; }
public string LastName{ get; set; }
}
2. هر برنامه ای که با دیتابیس کار میکنه باید بتونه یه کلاس اماده کنه برای CRUD با دیتابیس ... تو بعضی اموزش ها بهش میگن Data Access Layer و بعضی جاها Repository .... یا شایدم من درست فکر نمی کنم ... ولی کار این دو تا دقیقا همینه ... حالا این لایه رو وقتی ایجاد کردیم کجای معماری قرار میگیره ... یعنی همونطور که model نباید از viewmodel خبر داشته باشه و viewmodel از view ... الان این لایه دقیقا چطوره ؟ ... ایا میشه ازش تو viewmodel هم استفاده کرد ؟ ... یه جا میگن باید viewmodel با مدل در ارتباط باشه بعد model بیاد با DAL در ارتباط باشه ... یه جایی دیگه خودشون میان برای پرکردن observablecollection مستقیما داخل viewmodel از DAL استفاده میکنن !!!
تو بخش پیاده سازی :
1. ( شبیه سوال اخر بخش تعاریف ) وقتی یه کلاس model داریم ... چطوری باید تو viewmodel یک observablecollection رو از اطلاعات دیتابیس پر کنیم ؟ ... مستقیم بری از LoadData مثلا تو DAL استفاده کنیم یا یه کلاس که اینجوری معرفی شده :
public Class Models : ObservableCollection<Model>
که بعد تو این کلاس بیایم از لایه دسترسی استفاده کنیم ؟ ... میدونم هر دو نوعش میشه ولی کدومش مناسبتره ... کدومش باعث میشه مقصود اصلی MVVM که جداسازی لایه ها از هم و اجرای unittest رو هر کدومشون بهتر اجرا بشه ؟
2. برای استفاده از فیلتر کردن اطلاعات میاد میگه اینجوری کنین :
<Window.Resources>
...
<CollectionViewSource Source="{Binding Things}" x:Key="X_CVS"/>
</Window.Resources>
که خود Things یه observablecollection هست ... بعد اینطور که متوجه شدم میگه باید یه نمونه از این CollectionViewSource رو بفرستیم برای viewmodel تا روش فیلتر و غیره رو اجرا کنیم ... چطوری باید اینو بفرستیم به viewmodel در حالی که ارجاع مستقیمی از view به viewmodel تو codebehind اون نباید باشه ؟
یه سوال جدا ... من کار طراحی این نرم افزار رو بر طبق اصول oop و با ایجاد نمودارهای فعالیت و یوزکیس و بعدش هم طراحی کلاس براش شروع کردم ... اون موقع اصلا قصد نوشتن برنامه چند لایه رو نداشتم ... بعد موقع ساخت با MVVM اشنا شدم ... حالا به نظرتون باید بشینم دوباره کلاس های برنامه رو از اول با دید برنامه نویسی چند لایه طراحی کنم یا از همین کلاس ها هم میشه استفاده کرد ... مچ کردنشون کم کم داره اذیتم می کنه ... اونجا تعاریف یه چیز دیگه بود اینجا یه چیز دیگه ... دقیقا نمی دونم کدوم قسمت رو کجای MVVM بزارم





پاسخ با نقل قول
