Tôi có một câu đố cũ, vì vậy tôi nghĩ tôi sẽ chia sẻ nó với bạn, có thể sẽ đi đúng hướng. Thing, rằng một số thực thể trong cơ sở dữ liệu khá lớn (đọc có nhiều thuộc tính), và hiếm khi logic nghiệp vụ sử dụng tất cả các thuộc tính thực thể, vì vậy mỗi khi tôi cần phải nghĩ những thuộc tính nào phải được tải cho logic nghiệp vụ để hoạt động chính xác. mẫu rất giả:Thực thể làm quá nhiều?
public class Product
{
public string Title {get;set;}
public string Description {get;set;}
public string RetailPrice {get;set;}
public string SupplierId {get;set;}
public Supplier Supplier { get;set;}
// many other properties
}
public class ProductDiscountService
{
public decimal Get(Product product)
{
// use only RetailPrice and Supplier code
return discount;
}
}
public class ProductDescriptionService
{
public string GetSearchResultHtml(Product product)
{
// use only Title and Description
return html;
}
}
Dường như tôi có thể trích xuất các giao diện IDiscountProduct và ISearchResultProduct, sản phẩm đánh dấu như thực hiện những giao diện, sau đó tạo ra DTOs nhỏ thực hiện mỗi người giao diện, nhưng mà nhìn vào các thời điểm như quá mức cần thiết (ít nhất Tôi chưa thấy bất kỳ nhóm thuộc tính nào sử dụng giao diện).
Để tách thực thể trong cơ sở dữ liệu thành các thực thể nhỏ hơn cũng không hợp lý, vì tất cả các thuộc tính đó đều thuộc sản phẩm và tôi e rằng tôi sẽ bị buộc phải sử dụng nhiều lần tham gia để chọn thứ gì đó và nếu tôi quyết định một số tài sản thuộc về một thực thể khác, động thái đó sẽ khá khó thực hiện.
Để có mọi thuộc tính được sử dụng trong logic nghiệp vụ của phương pháp cụ thể vì thông số phương pháp cũng trông giống như giải pháp xấu.
Chúng ta đang nói về bao nhiêu thuộc tính? – walther
thường lớn hơn 10, nhỏ hơn 20. – Giedrius
Tôi sẽ nói: nếu phương pháp của bạn biết trước các thuộc tính nào cần sử dụng và điều này vẫn cố định, việc sử dụng các tham số có thể là một giải pháp tốt. Dễ kiểm tra và dễ sử dụng lại. Tuy nhiên, nếu việc thực hiện không được xác định trong chữ ký phương thức (thực hiện hiện tại sử dụng 2 thuộc tính nhưng ngày mai chúng có thể trở thành 3), bạn muốn tiêu thụ toàn bộ Sản phẩm với tất cả các thuộc tính có sẵn. Điều này nói một cách nhất quán: Phương pháp này yêu cầu các tham số này và phương pháp này đòi hỏi một sản phẩm. – Polity