Tôi hiện đang bắt đầu phát triển một ứng dụng web lớn chủ yếu chứa một Angular SPA và một OData WebAPI có quyền truy cập vào một lớp phụ trợ.
Chúng tôi đang ở giai đoạn đầu và đã bắt đầu triển khai các lớp học đầu tiên bao gồm Model.dll
trong một không gian tên chung để có thể truy cập tất cả các lớp.
Hiện tại chúng tôi đang thảo luận về các DTO đó trong mô hình. Một số người nói rằng việc sử dụng giao diện là hoàn toàn cần thiết, vì vậy mã sẽ như thế này:Giao diện cho DTO
namespace MySolution.Common.Model
{
public interface IPerson
{
int Id { get; set; }
string Name { get; set; }
...
}
}
namespace MySolution.Common.Model
{
public class PersonDTO : IPerson
{
public int Id { get; set; }
public string Name { get; set; }
...
}
}
Vậy là xong. Chỉ DTO đơn giản không có trí thông minh nhiều hơn.
Tôi bây giờ tự hỏi liệu đây có thực sự là một cách tiếp cận tốt hay không, bởi vì tôi không thấy sự cần thiết phải sử dụng giao diện ở đây.
Ưu điểm của điều này là gì? Testability đã được đề cập, nhưng nó thậm chí là cần thiết để kiểm tra DTOS? Dependency Injection cũng không phải là điểm.
Bất kỳ sự giác ngộ nào đều rất hữu ích. Cuối cùng, việc học các công cụ và phương pháp tiếp cận mới luôn tốt ...
Không có lý do gì để sử dụng giao diện nếu bạn không cần. Điều này là overcomplicating những gì nên là một đối tượng đơn giản. –
Nếu * DTO * chỉ đơn giản là một danh sách các thuộc tính, tôi thấy điều này vô nghĩa. Nếu bạn đã có một số loại kho lưu trữ, sau đó bạn sẽ giao diện này để thay thế một kết nối DB cho một đại diện giả mạo, ví dụ. Nếu bạn có 'Person GetPerson()', bạn có thể có phiên bản DB và phiên bản Fake. – christiandev
Bạn có thể bật một giao diện điểm đánh dấu trên một DTO ('FooDto: IAmADto') cho các ràng buộc và ánh xạ kiểu, nhưng nếu không, mục đích của nó là gì? Không có trừu tượng ở đây, tùy thuộc vào 'IPerson' cung cấp cho bạn chính xác cùng một mức độ khớp nối như phụ thuộc vào' Người'. –