Tôi muốn biết thực hành tốt nhất trong việc thiết kế các nhà thầu của các đối tượng DTO là gì.C# Dto xây dựng và phụ thuộc tiêm
nói tôi có một đối tượng dto như thế này:
class CustomerDto
{
public string Name { get; set; }
public string Surname { get; set; }
public string Phone { get; set; }
...
}
Có một số cách để xây dựng các đối tượng:
tôi có thể tuyên bố một constructor:
public CustomerDto(string name, string surname, string phone, ...)
{
this.Name = name;
this.Surname = surname;
this.Phone = phone;
...
}
Khi bạn thấy điều này nhà xây dựng và ngay lập tức kết luận vi phạm SRP (Trách nhiệm một người)?
Mặc dù các thuộc tính này đều liên quan. Một số cũng có thể lập luận rằng không cần phải xác thực các thuộc tính vì đây là một DTO và có hành vi NO, và hành vi thay vì phải nằm trên đối tượng miền mà nó ánh xạ từ đó.
Trong C# chúng ta cũng có thể thanh lịch hơn xây dựng đối tượng này:
var dto = new CustomerDto()
{
Name = "Some name",
Surname = "Some surname"
}
Hoặc sử dụng một người thợ xây thạo hoặc một khuôn khổ như NBuilder.
Ngoài ra còn có việc sử dụng các khung bản đồ tự động như Automapper. Vấn đề cũng là sử dụng một thùng chứa Ioc, ctor trở nên phức tạp, cũng như rủi ro trong việc hoán đổi các đối số chẳng hạn, bạn chuyển tên họ hoặc ngược lại, việc xác thực có thể bỏ qua việc lập bản đồ rõ ràng dễ dàng hơn như trên.
Hãy giúp thuyết phục tôi đó là cách tốt hơn.
bản sao có thể có của [Dependency Injection - sử dụng với các đối tượng chuyển dữ liệu (DTO)?] (Http: // stackoverflow.com/questions/6297322/dependency-injection-use-with-data-transfer-objects-dtos) –
Tôi đã gặp vấn đề tương tự này, và quyết định chống lại các nhà xây dựng .. Vì một lý do đơn giản: sau, trong một tháng, hoặc 6 tháng, bản thân tôi hoặc người khác sẽ xem xét điều này và phải suy nghĩ về nó theo cùng một cách bản thân mình (và bản thân bạn) đang suy nghĩ bây giờ. Tôi đã tìm thấy suy nghĩ trong khi đọc mã là một dấu hiệu cho thấy nó quá phức tạp. – dferraro