Giả sử tôi có một thực thể khác nhau trong mô hình của mình (sử dụng EF), giả sử Người dùng, Sản phẩm, Hóa đơn và Đơn hàng.
Tôi đang viết một điều khiển người dùng có thể in các bản tóm tắt của các đối tượng thực thể trong ứng dụng của tôi trong đó các thực thể thuộc về tập hợp được quyết định trước, trong trường hợp này tôi nói rằng các bản tóm tắt của Người dùng và Sản phẩm có thể được tóm tắt.
Tất cả các bản tóm tắt sẽ chỉ có một ID và một mô tả, vì vậy tôi tạo một giao diện đơn giản cho việc này:
public interface ISummarizableEntity {
public string ID { get; }
public string Description { get; }
}
Sau đó, đối với các thực thể trong câu hỏi, tôi tạo một lớp một phần thực hiện giao diện này:
public partial class User : ISummarizableEntity
{
public string ID
{
get{ return UserID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} {1} is from {2} and is {3} years old", FirstName, LastName, Country, Age); }
}
}
public partial class Product: ISummarizableEntity
{
public string ID
{
get{ return ProductID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} weighs {1}{2} and belongs in the {3} department", ProductName, WeightValue, WeightUnit, Department); }
}
}
Bằng cách này, quyền kiểm soát người dùng / chế độ xem một phần của tôi chỉ có thể liên kết với bất kỳ bộ sưu tập ISummarizableEntity nào và hoàn toàn không cần quan tâm đến nguồn. Tôi đã được thông báo rằng các giao diện không nên được sử dụng như kiểu dữ liệu nhưng tôi không nhận được nhiều thông tin hơn thế. Theo như tôi có thể thấy, mặc dù các giao diện thường mô tả hành vi, nhưng chỉ sử dụng các thuộc tính không phải là một kiểu chống mẫu vì các thuộc tính chỉ là đường cú pháp cho getters / setters.
Tôi có thể tạo một kiểu dữ liệu cụ thể và ánh xạ từ các thực thể đến đó nhưng tôi không thể thấy được lợi ích. Tôi có thể làm cho các đối tượng thực thể kế thừa từ một lớp trừu tượng và sau đó xác định các thuộc tính nhưng sau đó tôi đang khóa các thực thể không sử dụng nữa vì chúng ta không thể có nhiều kế thừa. Tôi cũng sẵn sàng để có bất kỳ đối tượng nào là ISummarizableEntity nếu tôi muốn (rõ ràng tôi sẽ đổi tên giao diện)
Giải pháp tôi đang sử dụng trong tâm trí của tôi là duy trì, có thể mở rộng, có thể kiểm tra và khá mạnh mẽ. Bạn có thể thấy các mô hình chống ở đây?
EntitySummary
, vớiUser
vàProduct
mỗi có một phương pháp như thếpublic EntitySummary GetSummary()
nào?