2010-10-02 25 views
5

Vì vậy, tôi có tỷ lệ lượt xem gần như 1: 1 để xem các mô hình và mọi thứ dường như đang diễn ra tốt đẹp. Nếu tôi hiểu mục đích của mình một cách chính xác, có vẻ như các mô hình xem nên ASP.NET MVC: Làm thế nào để xử lý một mô hình khung nhìn với nhiều thuộc tính?

  1. "Cắt giảm" mô hình thực thể để chỉ các thuộc tính liên quan được chuyển đến lớp trình bày
  2. Thêm thông tin bổ sung cần thiết để trình bày như danh sách các từ viết tắt hoặc loại liên hệ của tiểu bang tạo một địa chỉ.

Cố gắng giữ nguyên các nguyên tắc đó, tôi đã đánh một chút tường bằng bộ điều khiển Báo cáo của mình. Các báo cáo khác nhau được tạo cho khách hàng yêu cầu quyền truy cập vào khoảng 30 thuộc tính khác nhau. Như vậy, mô hình xem của tôi kết thúc trông rất giống với mô hình Thực thể của tôi. Tất nhiên, giải pháp đơn giản nhất là chỉ cần chuyển mô hình Entity sang chế độ xem để tôi có quyền truy cập vào tất cả các thuộc tính, tuy nhiên tôi cũng cần có khả năng tạo báo cáo cho khách hàng trống hoặc "không đầy đủ". Điều này gây ra vấn đề sẽ null ngoại lệ tham chiếu khi cố truy cập các thuộc tính điều hướng trên các mô hình Entity của tôi. Vì vậy, tôi có thể sử dụng một kiểm tra null trên tất cả các lĩnh vực trong khung nhìn, mà không có vẻ quá hấp dẫn ... Hoặc tôi có thể thực hiện một mô hình xem để tránh các ngoại lệ tham chiếu null. Vấn đề là tôi sẽ kết thúc với một mô hình xem giống như sau:

var customer = customersRepository.GetCustomer(id); 
var viewModel = new CustomersViewModel() 
{ 
    FirstName = customer.FirstName, 
    LastName = customer.LastName, 
    Address = customer.MailingAddress.Address, 
    City = customer.MailingAddress.City, 
    // and on and on for about 30 different properties 
}; 
return View(viewModel); 

Gõ tất cả những đặc tính đó ra là một trong những điều vừa cảm thấy sai. Tôi có thiếu một giải pháp thanh lịch hơn cho vấn đề này không?

Trả lời

7

Vấn đề là tôi muốn kết thúc với một mô hình điểm cho rằng nhìn như thế này

AutoMapper là phải để tránh phải viết chính xác mã bạn được đăng. Tôi cũng khuyên bạn nên xem video tuyệt vời put your controllers on a diet từ người sáng tạo của AutoMapper. Sau khi xem video này (và một chút nỗ lực từ phía bạn) hành động điều khiển của bạn sẽ được giảm xuống một lớp lót đẹp.

+0

+1 trên Automapper, tôi thấy nó vô giá đối với loại Mô hình miền này> Xem bản đồ mô hình. –

+0

Cảm ơn bạn! Nó luôn luôn là tốt đẹp để tìm một giải pháp phù hợp hoàn hảo. –

2

Gõ tất cả những thuộc tính ra là một trong những điều mà chỉ cảm thấy sai

Để mà từng cấp bạn sẽ muốn đi, cuối cùng bạn sẽ phải gõ tất cả.

Vì vậy, tôi thấy cách tiếp cận này cũng bình thường.

4

Bạn chắc chắn nên xem xét trong AutoMapper (http://automapper.codeplex.com/).

AutoMapper.Mapper.CreateMap(typeof(CustomersModel), typeof(CustomersViewModel)); 

AutoMapper.Mapper.CreateMap<CoolObject, CoolObjectViewModel>() 
    .ForMember(d => d.Property1, f => f.MapFrom(s => s.Property1)) 
    .ForMember(d => d.Property2, f => f.MapFrom(s => s.Property2)) 
    .ForMember(d => d.Property3, f => f.MapFrom(s => s.Property3)); 
+0

Hmm ... chắc chắn sẽ tốt đẹp nếu nó nói với tôi trước đó rằng câu trả lời đã được thêm vào. – Buildstarted

+0

+1 'CoolObject' và mã mẫu –

0

Tôi thực sự không hiểu những gì bạn đang cố gắng đạt được ở đây .. không có gì sai khi viết nhiều mã hơn .. nó không quan trọng kích thước mã của bạn là bao lâu. những gì bạn nên lo lắng là làm thế nào để bạn giảm các tương tác cơ sở dữ liệu, chỉ lấy các thuộc tính bắt buộc từ db.

khi mã của bạn hiển thị bạn truy lục toàn bộ đối tượng khách hàng và sau đó kết thúc hiển thị một số thuộc tính tại sao bạn không chỉ truy xuất thuộc tính mà bạn cần.

cũng nếu bạn đang sử dụng các thuộc tính của địa chỉ gửi thư tại sao bạn không vượt qua toàn bộ đối tượng mailingaddres làm thuộc tính tại sao bạn tách thành các thuộc tính khác.

+0

Mối quan tâm của tôi là tất cả mã nằm trong bộ điều khiển. Dường như Automapper giải quyết vấn đề này. Bạn sẽ đề xuất gì thay vì nhận được một đối tượng khách hàng từ kho lưu trữ? Có vẻ như sẽ sai khi trả về các mô hình xem từ kho lưu trữ vì mô hình miền nên không biết gì về lớp trình bày. –

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