Một điều tôi thấy trong một số ứng dụng doanh nghiệp DDD mà tôi làm việc, là việc sử dụng các giao diện giống hệt với các thực thể miền, với ánh xạ một đối một các đặc tính và chức năng. Thật vậy, một đối tượng miền luôn được sử dụng thông qua giao diện một-một, và tất cả các thực thể miền đều có giao diện một-một trong kiểu này.Có đang sử dụng giao diện một-một với thực thể miền hay không? Tại sao?
Ví dụ:
đối tượng miền tài khoản:
public class Account : IAccount
{
public string Name {get;set;}
//...some more fields that are also in IAccount
public decimal Balance {get;set;}
}
Và nó phù hợp với giao diện
public interface IAccount
{
string Name {get;set;}
//... all the fields in Account
decimal Balance {get;set;}
}
Nhưng gần đây tôi đã trở thành ngày càng bị thuyết phục rằng đây là, trên thực tế, một chất chống -mẫu.
Tôi đã chạy nó bởi một số kiến trúc sư trong cộng đồng nguồn mở, và họ nói rằng điều này được dựa trên những lỗi thiết kế hoặc sai sót, ở đâu đó trong chuỗi thiết kế.
Vì vậy, tôi nói với đồng nghiệp của mình rằng họ nên thoát khỏi việc tạo giao diện cho các đối tượng Miền. Bởi vì không có mục đích cho họ, và bạn phải cập nhật giao diện bất cứ khi nào bạn cập nhật các thực thể miền. Đầu tiên, tuyên bố đã được thực hiện rằng các giao diện này cung cấp 'tách', nhưng tôi phản đối vì các giao diện có mối quan hệ một-một với các thực thể miền mà chúng không thực sự phân tách, thay đổi giao diện có nghĩa là một thay đổi trong thực thể tên miền và ngược lại.
Khiếu nại tiếp theo là chúng tôi cần giao diện cho mục đích thử nghiệm. Truy cập của tôi là Rhino-mocks cung cấp cho việc chế nhạo và stubbing của các lớp bê tông. Nhưng họ cho rằng Rhino-mocks gặp rắc rối với các lớp bê tông. Tôi không biết nếu tôi mua nó, ngay cả khi tê giác-mocks có rắc rối với các lớp cụ thể, điều đó không nhất thiết có nghĩa là chúng ta nên sử dụng giao diện cho các thực thể miền.
Vì vậy, tôi rất tò mò:
Tại sao bạn có giao diện một-một cho các thực thể miền của mình?
Tại sao không?
Tại sao thực tiễn tốt hay xấu?
Cảm ơn bạn đã đọc!
EDIT: Tôi nên lưu ý rằng tôi sử dụng giao diện mọi lúc, và tôi tin rằng nếu nó được gọi là tôi sẽ sử dụng giao diện khi thả mũ. Nhưng tôi đặc biệt đề cập đến các thực thể miền với giao diện một-một.
AFAIK tê giác Mocks không thể thử nghiệm các phương thức lớp bê tông trừ khi chúng có thể được ghi đè. Vì vậy, bạn sẽ phải làm cho tất cả các phương thức đối tượng miền ảo. Không tốt. –
Liên quan: http://stackoverflow.com/questions/2659366/java-interfaces-methodology-should-every-class-implement-an-interface – jaco0646