Thu hút phản hồi/tùy chọn/nhận xét về mẫu "tốt nhất" để sử dụng cho dữ liệu tham chiếu trong các dịch vụ của tôi.Hợp đồng Dữ liệu WCF và Dữ liệu Thực thể Tham chiếu?
Tôi có ý gì với dữ liệu tham chiếu?
Hãy sử dụng Northwind làm ví dụ. Đơn đặt hàng có liên quan đến Khách hàng trong cơ sở dữ liệu. Khi tôi triển khai Dịch vụ đặt hàng của mình, trong một số trường hợp, tôi muốn tham chiếu một Khách hàng "đầy đủ" từ một Đơn hàng và các trường hợp khác khi tôi chỉ muốn tham chiếu đến Khách hàng (ví dụ: cặp Khóa/Giá trị). Ví dụ, nếu tôi đang làm một GetAllOrders(), tôi sẽ không muốn trả lại một Lệnh được điền đầy đủ, tôi muốn trả lại một phiên bản nhẹ của một Đơn đặt hàng chỉ với dữ liệu tham chiếu cho mỗi Khách hàng của đơn đặt hàng. Tuy nhiên, nếu tôi đã làm một phương thức GetOrder(), tôi có thể muốn điền vào các chi tiết của Khách hàng bởi vì rất có thể là một người tiêu dùng của phương thức này có thể cần nó. Có thể có các tình huống khác mà tôi có thể muốn hỏi rằng các chi tiết của Khách hàng được điền vào trong một số cuộc gọi phương thức nhất định, nhưng bị bỏ qua cho những người khác.
Dưới đây là những gì tôi đã đi lên với:
[DataContract]
public OrderDTO
{
[DataMember(Required)]
public CustomerDTO;
//etc..
}
[DataContract]
public CustomerDTO
{
[DataMember(Required)]
public ReferenceInfo ReferenceInfo;
[DataMember(Optional)]
public CustomerInfo CustomerInfo;
}
[DataContract]
public ReferenceInfo
{
[DataMember(Required)]
public string Key;
[DataMember(Required)]
public string Value;
}
[DataContract]
public CustomerInfo
{
[DataMember(Required)]
public string CustomerID;
[DataMember(Required)]
public string Name;
//etc....
}
Những suy nghĩ ở đây là kể từ ReferenceInfo (mà là một cặp khóa/giá trị gia tăng chung) luôn luôn cần thiết trong CustomerDTO, tôi luôn luôn sẽ có ReferenceInfo . Nó cung cấp cho tôi đủ thông tin để có được chi tiết Khách hàng sau này nếu cần. Nhược điểm để có CustomerDTO yêu cầu ReferenceInfo là nó có thể quá mức cần thiết khi tôi nhận được đầy đủ CustomerDTO (tức là với CustomerInfo điền vào), nhưng ít nhất tôi được đảm bảo thông tin tham khảo.
Có một số mẫu hoặc khung công tác khác mà tôi có thể sử dụng để làm cho kịch bản/triển khai này "sạch hơn" không?
Lý do tôi hỏi là mặc dù chúng tôi có thể chỉ đơn giản nói trong Northwind để LUÔN LUÔN trả lại một CustomerDTO đầy đủ, điều đó có thể hoạt động tốt trong tình huống Northwind đơn giản. Trong trường hợp của tôi, tôi có một đối tượng có 25-50 trường dữ liệu tham chiếu/tra cứu. Một số là quan trọng hơn để tải hơn những người khác trong các tình huống khác nhau, nhưng tôi muốn có càng ít định nghĩa của các loại tài liệu tham khảo càng tốt (để tôi không nhận được vào "địa ngục bảo trì DTO").
Ý kiến? Phản hồi? Bình luận?
Cảm ơn!
FWIW ... Tôi không nghĩ LINQ to SQL, Entity Framework hoặc ADO.Dịch vụ dữ liệu NET sẽ giúp tôi ở đây, vì tôi có 3 hệ thống khác nhau, tất cả đại diện, về cơ bản, cùng một tập dữ liệu. Đây là bước đầu tiên để củng cố các hệ thống này, hoặc ít nhất là cho các hệ thống bên ngoài để có thể tiêu thụ dữ liệu từ ba hệ thống này một cách chung chung và nhất quán hơn. – Brian
Bạn có thể trả lời http://stackoverflow.com/questions/9483286/understanding-data-outside-of-service-soa không? – Lijo