Mô hình MVVM trong Windows Phone

  Cơ bản: 
Mô hình Model - View - ViewModel (MVVM) giúp tách biệt lớp xử lý và giao diện. Vì trong quá trình phát triển thì developers và designers làm việc một cách độc lập với nhau. Designer thì là View, còn dev thì là Model và ViewModel.
Sau đây là sơ đồ Databinding:

1. Model:
- Model trong MVVM là một thể hiện của Domain Model của ứng dụng, nó bao gồm data model cùng với xử lý  và kiểm tra logic.
ex:

public class Person : INotifyPropertyChanged
{
    private string name;
    private int age;
 
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (this.name != value)
            {
                this.name = value;
                this.RaisePropertyChanged("Name");
            }
        }
    }
 
    public int Age
    {
        get
        {
            return this.age;
        }
        set
        {
            if (this.age != value)
            {
                this.age = value;
                this.RaisePropertyChanged("Age");
            }
        }
    }
 
    public event PropertyChangedEventHandler PropertyChanged;
 
    private void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
Hoặc đơn giản chỉ là một datamodel ( ví dụ trên có cài đặt interface INotifyPropertyChanged - xem trong bài databinding như sau :
public class Person
{
    public string Name
    {
        get;
        set;
    }
}


2. ViewModel:
ViewModel trong MVVM thực hiện việc tham chiếu các các” đối tượng” cần thiết cho View từ presentation logic và data. Không có bất kì tham chiếu trực tiếp nào đến View hoặc bất kì thông tin gì về việc implement cụ thể của View. ViewModel thực thi các câu lệnh và các thuộc tính mà View có thể kết buộc dữ liệu được và thông báo về sự thay đổi trạng thái cho View thông qua các sự kiện. Các câu lệnh và thuộc tính mà ViewModel cung cấp xác định chức năng được đề nghị bởi UI, nhưng View sẽ xác định cách chức năng đó được render như thế nào.

ViewModel chịu trách nhiệm phối hợp tương tác của View với các model class được yêu cầu.Thông thường, có một mối quan hệ 1-nhiều giữa các lớp các lớp ViewModel và Model. View có thể chọn để đưa ra các model class trực tiếp đến View để các control trong View có thể kết buộc dữ liệu trực tiếp đến chúng. Trong trường hợp này, các model class cần được thiết kế để hỗ trợ việc kết bôộc dữ liệu và các sự kiện thông báo sự thay đổi có liên quan.

ViewModel có thể chuyển đổi hoặc tính toán model data để nó có thể được View sử dụng dễ dàng. ViewModel có thể xác định các thuộc tính boe63 sung để hỗ trợ đặc biệt cho View; những thuộc tính này có thể được thêm vào một cách linh hoạt. Ví dụ: ViewModel có thể giá trị của hai trường để View có thể dễ dàng thể hiện hơn, hoặc nó có thể tính số kí tự còn lại trong phần input đối với những trường có độ dài kí tự giới hạn. ViewModel cũng có thể thực thi việc kiểm tra dữ liệu bnan đầu (data validation logic) để đảm bảo tính nhất quán của dữ liệu.

ViewModel cũng có thể xác định trạng thái logic mà View có thể sử dụng để đưa ra những sự thay đổi đồ họa trong UI. View có thể xác định những thay đổi về layout hoặc style có thể ảnh hưởng đến trạng thái của ViewModel. Thông thường, ViewModel sẽ xác định các câu lệnh và hành động có thể được mô tả trong UI và người dùng có thể thực thi.Một ví dụ phổ biến đó là khi ViewModel cung cấp câu lệnh Submit cho phép người dùng gửi dữ liệu đến một web service hoặc một nơi lưu trữ dữ liệu. View có thể chọn để mô tả câu lệnh bằng một nút nhấn (button) để người dùng có thể nhấn vào để gửi dữ liệu đi. Thông thường, khi câu lệnh ở trạng thái “unavailable”, các thành phần UI có liên quan của nó cũng bị vô hiệu hóa. Các câu lệnh là một cách để đóng gói các hành động của người dùng và tách biệt rõ ràng chúng khỏi phần UI.

Tóm lại, ViewModel có những đặc điểm chính sau:

- ViewModel không phải là lớp có tính chất đồ họa (non-visual class) và không chuyển hóa từ WPF hay Silverlight base class. Nó đóng gói phần representaion logic được yêu cầu để hỗ trợ cho một use case hoặc user task trong ứng dụng. ViewModel có thể kiểm thử độc lập với View và Model.

- Thông thường ViewModel không tham chiếu trực tiếp đến View. Nó thực thi các thuộc tính và câu lệnh để View có thể kết buộc dữ liệu.Nó thông báo cho View khi có bất kì sự thay đổi trạng thái nào thông qua các sự kiện (thông qua các interface INotifyPropertyChanged và INotifyCollectionChaged).

- ViewModel phối hợp sự tương tác của View với Model. Nó có thể chuyển đổi hoặc tính toán dữ liệu để nó có thể dễ dàng được sử dụng bởi View và có thể thực thi các thuộc tính bổ sung mà không thể mô tả trên Model. Nó cũng có thể thực thi việc kiểm tra dữ liệu thông qua các interface IDataErrorInfo hoặc INotifyDataError.

- ViewModel có thể xác định các trạng thái logic mà View có thể mô tả cho người dùng.

3 . View
- View có nhiệm vụ định nghĩa cấu trúc, cách bố trí và sự thể hiện của các thành phần trên giao diện. Thông thường, View được định nghĩa hoàn toàn bằng XAML với một vài đoạn mã thể hiện bên trong không chứa các nghiệp vụ logic.
- Trong ứng dụng Windows 8Windows Phone, View thường là một trang(Page). Ngoài ra, nó có thể là sub-component của một parent view hoặc là DataTemplate của đối tượng trong ItemsControl.
- View lấy dữ liệu từ ViewModel thông qua Binding hoặc invoke các phương thức trong ViewModel.

    
<<<<<<<< update tiếp vài 1 ngày gần nhất gồm cả source code... các bạn có thể tham khảo thêm tại trong geekchamp>>>>>>>

Không có nhận xét nào :

Đăng nhận xét