Chúng tôi đang xây dựng một ứng dụng web bằng AngularJS, C#, ASP.Net Web API và Fluent NHibernate. Chúng tôi đã quyết định sử dụng DTO để chuyển dữ liệu sang lớp trình bày (chế độ xem góc). Tôi đã có một vài nghi ngờ về cấu trúc chung và đặt tên cho DTO. Đây là một ví dụ để minh họa cho kịch bản của tôi. phép nói rằng tôi có một thực thể miền gọi là khách hàng trông giống như:Quy ước đặt tên DTO, mô hình và kế thừa
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
Bây giờ, trong quan điểm của tôi/lớp trình bày tôi cần phải lấy hương vị khác nhau của khách hàng như:
1) Chỉ cần Id và Tên 2) Id, Name và Address 3) Id, Tên, Địa chỉ và Accounts
tôi đã tạo ra một tập hợp các DTOs để thực hiện điều này:
public class CustomerEntry
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerWithAddress : CustomerEntry
{
public AddressDetails Address { get; set; }
}
public class CustomerWithAddressAndAccounts : CustomerWithAddress
{
public ICollection<AccountDetails> Accounts { get; set; }
}
AddressDetails và AccountDetails là DTO có tất cả các thuộc tính của các thực thể Domain tương ứng của chúng.
Tính năng này hoạt động tốt cho truy vấn và truy xuất dữ liệu; câu hỏi là tôi sử dụng gì để chèn và cập nhật. Trong quá trình tạo hồ sơ khách hàng mới, tên và địa chỉ là bắt buộc và các tài khoản là tùy chọn .. vì vậy nói cách khác tôi cần một đối tượng có tất cả các thuộc tính của khách hàng. Do đó sự nhầm lẫn:
1) Tôi phải làm gì để chèn và cập nhật? CustomerWithAddressAndAccounts DTO có mọi thứ trong đó nhưng tên của nó có vẻ hơi khó xử khi được sử dụng để chèn/cập nhật.
2) Tôi có tạo một DTO khác không .. nếu có, không phải là trùng lặp vì DTO mới sẽ chính xác giống như CustomerWithAddressAndAccounts?
3) Cuối cùng nhưng không kém phần quan trọng, tính năng strileure kế thừa DTO được mô tả ở trên có vẻ phù hợp với yêu cầu không? Có cách nào khác để mô hình hóa điều này không?
Tôi đã đi qua các bài đăng khác về chủ đề này nhưng không thể thực hiện nhiều tiến bộ. Một điều tôi đã làm là để tránh sử dụng hậu tố "DTO" trong tên lớp. Tôi nghĩ rằng nó cảm thấy một chút không cần thiết.
Rất thích nghe những suy nghĩ của bạn
Cảm ơn
Cảm ơn bạn đã trả lời. Một trong những động lực cho việc sử dụng nhiều lớp DTO là một chút rõ ràng hơn trong việc xác định những gì DTO được sử dụng cho. Ngoài ra, nếu bạn chỉ cần Id và Tên, bạn có nên gửi đầy đủ CustomerEntryDTO (mà bạn đã mô tả) qua dây không? – Sennin
@Sennin Tôi đã chỉnh sửa câu trả lời dựa trên nhận xét của bạn nhưng tôi nghĩ câu trả lời của tôi sẽ vẫn chưa hoàn chỉnh cho bạn. Có thể tôi sẽ chỉnh sửa nó sau này để thêm nhiều hơn vào bình luận ở trên của bạn. – VS1
@Sennin xin xem sửa của tôi 2. – VS1