a

Câu hỏi Làm thế nào để bạn đặt tên cho lớp ViewModel của bạn?


Loại quy ước đặt tên nào thích hợp cho các lớp ViewModel?

Ví dụ: cho HomeController, Chế độ xem chỉ mục? HomeIndexViewModel dường như không đúng.


13
2018-06-02 21:22


gốc




Các câu trả lời:


EmployeesViewData.

Đó là những gì tôi sử dụng và những gì tôi đã thấy trong các ứng dụng mẫu là tốt.

Về ví dụ đã thêm của bạn: Imho tên của lớp cần xác định loại dữ liệu nào nó chứa. ".... IndexViewData" là khá vô nghĩa. Chính xác những gì được hiển thị trên trang đó? Cố gắng tóm tắt nó trong 1 hoặc 2 từ và thêm 'ViewData' đằng sau nó.

Hoặc chỉ cần lấy tên của bộ điều khiển và thả "chỉ mục". HomeViewData âm thanh tốt với tôi.


2
2018-06-02 21:24





Tôi sử dụng mẫu sau vì nó rõ ràng và rõ ràng:

  • Người mẫu: Foo
  • Chế độ xem: FooView
  • ViewModel: FooViewModel

23
2018-06-05 22:07



Đó là sạch sẽ, nhưng nếu bạn có ViewModels khác nhau cho Foo thì sao? Ví dụ bạn có 3 thiết bị đầu cuối một trả về các thuộc tính mô hình Foo đầy đủ, một chỉ trả về ID và Tên và cái cuối cùng trả về một số dữ liệu tùy chỉnh ngoài các thuộc tính mô hình. Vấn đề đặt tên trở nên lớn hơn đặc biệt là khi bạn có các loại API khác nhau như API giao diện người dùng, API nội bộ và API công khai, nơi tất cả nhu cầu trả về FooViewModel. - Mahmoud Zalt


Tôi cố gắng giữ cho các tên mô hình trình bày của tôi bất khả tri về loại bản trình bày mà họ sẽ được trình bày. Tôi có thể sử dụng đối tượng mô hình của tôi cho một cái nhìn ASP.NET ban đầu, nhưng sau này tôi cũng có thể sử dụng nó trong một ứng dụng WCF hoặc WinForms. Tôi cố gắng đặt tên cho các mô hình của mình sao cho chúng mô tả một cách hợp lý những gì chúng chứa, mà không làm rối chúng bằng "ViewData", "ViewModel", "Model", v.v.

Ví dụ:

ProductsWithPageInfo
ProductWithAttributesAndTags
ClientAndBillingDetail
UserAccountWithAssociatedGroups

Vv


1
2018-06-03 03:19



Bạn đang làm gì nếu bạn có một trang có nhiều trang trong số đó, hãy nói một trang có ProductWithPageInfo cũng cần ProductWithAttributesAndTags? - Alex
Vâng, những loại này đã được tổng hợp các loại khác. Ví dụ, ProductsWithPageInfo có một IList <Product>, int PageNumber và int PageCount. Mỗi đối tượng "mô hình" trình bày chứa mọi thứ cần thiết để hiển thị một chế độ xem cụ thể. Đôi khi, nếu có nhiều nội dung trong một mô hình, tôi sẽ thêm Etc vào cuối: ProductAttributesPurchaseHistoryEtc, trong đó Etc có nghĩa là các chi tiết nhỏ (như số trang và số lượng) không cần phải được đại diện trong tên của lớp học. Trong trường hợp ví dụ của bạn: ProductsWithAttributesAndTagsEtc - jrista


Tôi thích HomeViewModel, hoặc sử dụng ví dụ nhân viên trước đó, CreateEmployeeViewModel, EditEmployeeViewModel, vv Ý tưởng là "ViewModel" nhấn mạnh thực tế rằng chúng ta đang xử lý các vấn đề trình bày, và làm thay đổi ViewModels từ bất kỳ đối tượng mô hình miền nào mà bạn có thể có .


0
2018-06-03 03:15





Tôi đã sử dụng thuật ngữ Envelope như một phần của tên của mình, mà tôi đã bắt đầu sử dụng ngay trước khi tôi đọc chương 1 của cuốn sách Wrox và phát hiện ra cụm từ được chấp nhận phổ biến hơn là ViewModel.

Tuy nhiên, những ViewEnvelopes mà tôi tạo ra chỉ để đóng gói rất đơn giản khi tôi có hai hoặc nhiều hơn (thường không liên quan) mô hình mạnh mẽ đánh máy tôi muốn bàn tay để xem của tôi. Họ làm không phải chứa bất kỳ chức năng nào khác --- phong bì chỉ là cơ chế phân phối theo nghĩa này, trong khi thuật ngữ ViewModel, đối với tôi, có vẻ ít mô tả về cách tôi sử dụng nó, và cũng có thể mơ hồ hơn về mục đích thực sự của nó .

Ví dụ: tôi có thể tạo lớp CustomerUpdateEnvelope chỉ tồn tại để phân phối đối tượng Khách hàng và đối tượng NewsTicker không liên quan, ví dụ như chế độ xem Cập nhật khách hàng của tôi.


0
2018-06-05 21:54





Thay vì muộn cho chủ đề cụ thể này, nhưng tôi đã viết một vài đề xuất chi tiết hơn một chút về Quy ước đặt tên ViewModel trong một bài đăng trên blog, bài đăng này có thể hữu ích cho người khác.


0
2018-04-25 10:52