نمایش نتایج 1 تا 35 از 35

نام تاپیک: بحث و تبادل نظر در مورد MVVM Pattern در Wpf Programming

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #21

    نقل قول: بحث و تبادل نظر در مورد MVVM Pattern در Wpf Programming

    سلام خدمت دوستان عزیز

    من تازه شروع کردم به یادگیری 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 بزارم
    آخرین ویرایش به وسیله morteza_2009 : یک شنبه 19 آبان 1392 در 22:03 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •