2015-05-19 24 views
9

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 ...

+0

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. –

+1

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

+0

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'. –

Trả lời

3

Trạng thái chuyển DTO - đúng vậy. Tiêm chúng thông qua một container hoặc chế nhạo chúng để thử nghiệm có vẻ vô nghĩa (nếu đó là động lực) và hoàn toàn không cần thiết. Đừng làm thế.

2

Như một ví dụ, hơn nữa để nhận xét của tôi trên:

Interface IRepo 
{ 
    Person GetPerson(int id); 
} 

Public class DbRepo : IRepo 
{ 
    public Person GetPerson(int id){//get person from database} 
} 

Public class FakeRepo : IRepo 
{ 
    public Person GetPerson(int id) 
    { 
    return new Person {Id = id, Name = "TestName"}; 
    } 
} 

Bạn sẽ sử dụng một FakeRepo với một số đối tượng giả cho mục đích thử nghiệm.

+0

Tôi sẽ hiểu nó để sử dụng giao diện cho trường hợp đó. Trong trường hợp của tôi, tôi nhận được các đối tượng từ một dịch vụ khác có thể là một cơ sở dữ liệu bất cứ lúc nào và ánh xạ các đối tượng đó tới các DTOS của tôi bằng cách sử dụng 'Automapper'. –

+0

Như tôi đã đề cập trong phần bình luận ở trên, thật vô nghĩa khi có một giao diện cho một DTO đơn giản. – christiandev

Các vấn đề liên quan