Tình huống: Tôi đang viết một chương trình xử lý việc tạo báo cáo.Tôi có nên sử dụng các mô hình riêng biệt cho tên miền và EF không?
Tôi có báo cáo được lưu trữ trong cơ sở dữ liệu, được ánh xạ tới một mô hình EF. Có một số trường không phải là cơ sở dữ liệu (nghĩa là một số trường được tính tự động dựa trên các trường khác CÓ trong db). Sẽ có ý nghĩa khi có một lớp chỉ bản đồ cho DB, và một lớp khác có thông tin đó và bổ sung có các trường tính toán khác không?
tức là một lớp học mẫu để tương tác với cơ sở dữ liệu codefirst sẽ
public class Report{
public int CategoryOneSeverity {get; set;}
public int CategoryTwoSeverity {get;set;}
public string Title {get;set;}
}
Nó sẽ làm cho tinh thần để làm lớp học khác, như:
public class ReportModel{
public int CategoryOneSeverity;
public int CategoryTwoSeverity;
public string Title;
public int RiskRating{
get{ return CategoryOneSeverity + CategoryTwoSeverity; }
}
}
Hoặc tài sản RiskRating phải ở trong EF mô hình.
Tôi đồng ý với câu trả lời được chấp nhận rằng bạn nên có các lớp riêng biệt - một để lập mô hình kho dữ liệu và một để mô hình miền doanh nghiệp của bạn. Tuy nhiên, lớp thứ hai của bạn vi phạm một số tiên đề thiết kế tốt, rõ ràng nhất trong số đó là các lĩnh vực không nên được công khai tiếp xúc. –
Tôi thực sự không thích đặt trong các thành viên tư nhân và sau đó sử dụng một tài sản để có được nó. không phải là một lĩnh vực có ý nghĩa hơn, đặc biệt là cho các khu vực được dự kiến sẽ thay đổi? tức là người dùng có thể thay đổi tiêu đề bất kỳ lúc nào. – appsecguy
Không, thực sự, nó không có ý nghĩa và, như tôi đã nói, bay khi đối mặt với thiết kế tốt.Thuộc tính cho phép bạn thêm logic xác thực, thay đổi biểu diễn trường sao lưu bằng một chuyển đổi và cuối cùng cho phép bạn giữ một diện tích bề mặt người tiêu dùng ổn định. Hãy để người bạn tốt của chúng tôi Jon Skeet nói điều đó tốt hơn: http://www.csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –