2011-01-17 32 views
6

Tôi vừa suy nghĩ về khái niệm đối tượng mô hình xem mà chúng ta tạo trong asp.net MVC. Mục đích của chúng tôi là để khởi tạo nó và vượt qua nó từ bộ điều khiển để xem và xem đọc nó và hiển thị dữ liệu.Asp .Net MVC ViewModel nên là lớp hoặc cấu trúc?

Mô hình chế độ xem đó thường được khởi tạo thông qua hàm tạo. Chúng ta sẽ không cần phải khởi tạo các thành viên, chúng ta có thể không cần phải định nghĩa lại/ghi đè lên constructor không có tham số và chúng ta không cần tính năng thừa kế ở đó.

Vì vậy, tại sao chúng tôi không sử dụng loại cấu trúc cho mô hình chế độ xem của chúng tôi thay vì lớp học. Nó sẽ nâng cao hiệu suất.

Trả lời

13

Bạn lấy "nó sẽ nâng cao hiệu suất" như đã cho, nhưng bạn có thực sự chắc chắn về điều này? Cấu trúc hoạt động tốt hơn các lớp trong trường hợp rất cụ thể. Tôi đang khái quát về tính đơn giản, nhưng các trường hợp chủ yếu là:

  • Chúng không thay đổi.
  • Chúng nhỏ, ví dụ: thường không quá 3 - 4 trường.
  • Bạn đang tạo tấn (thường là hàng triệu hoặc nhiều hơn) trong số chúng trong một khoảng thời gian rất ngắn.
  • Bạn đang làm việc với họ trong vòng lặp chặt chẽ.
  • Các đường dẫn mã mà chúng đi qua được tối ưu hóa cho các cấu trúc cụ thể đó và không thực hiện các hoạt động boxing/unboxing.

Có những người khác, nhưng đó chỉ là ngoài đỉnh đầu của tôi. Và thậm chí sau đó, chúng tôi đang nói về lợi nhuận hiệu suất thường rất nhỏ. Như trong micro giây trừ đi.

Thậm chí nếu bạn có thể đảm bảo rằng các kiểu xem của bạn là không thay đổi và nhỏ, các điều kiện khác không giữ. Giả sử một mô hình xem cho mỗi yêu cầu, máy chủ web của bạn sẽ không xử lý hàng triệu yêu cầu mỗi giây. Hơn nữa, khung công tác MVC không làm việc với các vòng lặp chặt chẽ này và không chứa các đường dẫn mã được tối ưu hóa cho cấu trúc cụ thể này. Khung MVC sẽ kết thúc thực hiện tấn các hoạt động boxing/unboxing trên các loại giá trị của bạn.

Điểm mấu chốt - không tối ưu hóa vi mô hoặc xây dựng kỹ hơn giải pháp của bạn. Các lớp học rất tốt. Và khi tối ưu hóa có liên quan, luôn đo lường để đảm bảo bạn dành thời gian của mình cho một liên doanh đáng giá. Đừng bận tâm với tầm thường khi có cá lớn hơn để chiên.

+0

Cảm ơn bạn rất nhiều vì đã dành thời gian và giải thích kỹ lưỡng, Levi. Suy nghĩ của bạn làm cho ngày của tôi. –

+2

Ngoài ra, một cấu trúc được chuyển qua ngăn xếp (nhiều thông tin hơn để truyền tải) và lớp được truyền qua heap thông qua một con trỏ (ít thông tin hơn để truyền). Tôi biết đó là một câu hỏi cũ nhưng nghĩ rằng du khách mới xứng đáng được biết nhiều hơn. –

0

sử dụng một lớp học. một số mô hình xem yêu cầu các nhà xây dựng, trình chuyển đổi và có thể nhiều chức năng hơn, tại sao lại giới hạn cấu trúc? (như nếu bạn có các đối tượng EF4 và bạn cần phải làm cho POCO ra khỏi chúng ...)

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