2012-11-23 28 views
9

Tôi đang tạo một ứng dụng cho phép người dùng chèn, cập nhật và xóa dữ liệu đã được nhập và sau đó được hiển thị trong lưới dữ liệu (hoạt động CRUD).Đây có phải là cách chính xác để triển khai MVVM không?

Trong Mô hình xem của mình, nó chứa các thuộc tính được liên kết với xaml (ví dụ: Firstname). Nó cũng chứa một thuộc tính điều hướng cũng như các thuộc tính xác nhận hợp lệ.

 [Required(ErrorMessage = "First Name is a required field")] 
     [RegularExpression(@"^[a-zA-Z''-'\s]{1,20}$", ErrorMessage = "First Name must  contain no more then 20 characters and contain no digits.")] 
     public string FirstName 
     { 
     get { return _FirstName; } 
     set 
     { 
      if (_FirstName == value) 
       return; 

      _FirstName = value; 
      OnPropertyChanged("FirstName"); 
     } 
    } 

Hơn nữa, nó chứa lệnh cho hoạt động CRUD;

private void UpdateFormExecute() 
    { 
     var org = new OrganisationTypeDetail(); 
     UpdateOrganisationTypeDetail(org); 
    } 

Và cuối cùng, nó cũng chứa hoạt động CRUD. Chẳng hạn như Chèn, Cập nhật và Xóa.

Điều này dẫn tôi đến câu hỏi của tôi. nếu tôi muốn thực hiện đúng cách MVVM, tất cả mã này có quá nhiều cho mô hình khung nhìn không?

Tôi có nên sử dụng mô hình và tạo bộ sưu tập trong Mô hình chế độ xem của mình và ràng buộc với xaml không? Đây có phải là cách làm đúng không?

Tôi có nên sử dụng hệ thống Kho lưu trữ cho các hoạt động CRUD không? Nếu vậy, làm cách nào để chuyển dữ liệu từ các trường văn bản đến mô hình để được cập nhật?

Im mới vào WPF, MVVM và thấy khó có thể điều chỉnh mà không có hướng dẫn thích hợp.

Trả lời

3

Tôi có thể nói rằng đây là một cách chính xác để thực hiện MVVM, nhưng không các cách chính xác để thực hiện MVVM.

Điều tôi muốn nói là không có một cách chính xác để triển khai mẫu này. nếu bạn đã tạo một ViewModel có thể bị ràng buộc với Chế độ xem của bạn, mà không cần thêm bất kỳ logic nào trong Chế độ xem của bạn (tức là mã-đằng sau) thì bạn đã nắm bắt được bản chất của MVVM.

Có hay không bạn thêm nhiều mẫu và cấu trúc vào mã của mình là hoàn toàn tùy thuộc vào bạn. Nếu đây là một ứng dụng đơn giản, tôi sẽ giữ cho các mẫu ánh sáng. Hãy tiếp tục và nói chuyện trực tiếp với ViewModel với một kho lưu trữ. Mã hiện tại của bạn có vẻ tốt với tôi trong khía cạnh đó.

Nếu đây là ứng dụng lớn, bạn có thể muốn thêm các lớp khác, như lớp dịch vụ, lớp truy cập dữ liệu. Bạn có thể muốn suy nghĩ về tiêm phụ thuộc.

Nhưng không chỉ áp dụng mẫu hoặc thêm lớp thừa chỉ vì bạn nghĩ bạn nên làm như vậy. Dependency Injection âm thanh mát mẻ, nhưng trong nhiều trường hợp nó là rắc rối hơn nó có giá trị!

+0

Cảm ơn bạn đã dọn dẹp mọi thứ cho tôi, sự nhầm lẫn là do thực tế có quá nhiều cách khác nhau, tôi không biết phải theo dõi điều gì! Ngoài ra, bạn có ý nghĩa gì bởi "Dependency Injection"? –

+0

http://en.wikipedia.org/wiki/Dependency_injection – ColinE

0

Đối với tôi, đó không phải là cách chính xác, tôi nghĩ việc xác định các thuộc tính như FirstName trong mô hình xem không phải là ý tưởng hay. khung nhìn chỉ nên chứa mô hình và mô hình khung nhìn của bạn nên được bao bọc mô hình nên được bao bọc với XAML (nếu được yêu cầu).

Tạo mô hình đối tượng cũng phải hoàn toàn độc lập với mô hình xem. Xem mô hình chỉ nên biết về các hoạt động đơn vị trên các mô hình và xác thực phải ở bên trong mô hình, ví dụ trong trường hợp xác thực của FirstName trong ViewModel nghĩa là bạn chỉ giới hạn GUI để xác thực thuộc tính FirstName, nhưng nếu ai đó đặt nó từ vị trí khác.

+0

Cảm ơn vì điều đó. Nếu tôi muốn sử dụng xác nhận thuộc tính thì tôi sẽ đặt nó ở đâu? Trong mô hình? Vì vậy, từ những gì bạn nói, liên kết các thuộc tính từ mô hình trực tiếp với chế độ xem? –

+1

Bạn có thể mô tả lý do tại sao nó không phải là một ý tưởng tốt? Và tại sao nó không phải là MVVM 'đúng'? Một cách mù quáng theo các quy tắc về cách bạn nên thực hiện một mô hình là xấu như không sử dụng một mô hình nào cả! – ColinE

+0

@coline vì trong ví dụ được giải thích, FirstName dường như là một thuộc tính của một mô hình mà tôi nghĩ rằng nên có trong mô hình chỉ không có trong mô hình xem. –

Các vấn đề liên quan