Tôi đã làm việc/thấy một vài dự án ứng dụng web mùa xuân-ngủ đông có nhiều giao diện vì có các lớp dao và dịch vụ thực tế.Tại sao luôn có giao diện implementaion đơn trong các lớp dịch vụ và dao?
Tôi luôn luôn nghĩ rằng hai là những lý do chính cho việc tổ chức các giao diện thực hiện duy nhất:
mùa xuân có thể dây thực hiện thực tế là phụ thuộc trong một lớp nhất định (loose coupling)
public class Person { @Autowired private Address address; @Autowired private AccountDetail accountDetail; public Person(Address address, AccountDetail accountDetail) { // constructor
Trong khi kiểm tra đơn vị, tôi có thể tạo các lớp mô phỏng và kiểm tra một lớp riêng biệt.
Address mockedAddress = mock(Address); AccountDetail mockedAccountDetail = mock(AccountDetail); Person underTestPerson = new Person(mockedAddress, mockedAccountDetail); // unit test follows
Nhưng, của cuối năm, tôi nhận ra rằng:
mùa xuân có thể dây lớp thực hiện cụ thể như phụ thuộc:
public class Person {
@Autowired
private AddressImpl address;
@Autowired
private AccountDetailImpl accountDetail;
public Person(AddressImpl address, AccountDetailImpl accountDetail) {
// constructor
khung Mock như EasyMock có thể thử các lớp bê tông cũng
AddressImpl mockedAddress = mock(AddressImpl);
AccountDetailImpl mockedAccountDetail = mock(AccountDetailImpl);
Person underTestPerson = new Person(mockedAddress, mockedAccountDetail);
// unit test follows
Ngoài ra, theo một cuộc thảo luận this, tôi nghĩ tóm tắt là trong một ứng dụng duy nhất, các giao diện chủ yếu được lạm dụng có thể là do quy ước hoặc thói quen. Chúng thường có ý nghĩa tốt nhất trong trường hợp chúng ta đang giao tiếp với một ứng dụng khác, ví dụ slf4j được nhiều ứng dụng trên khắp thế giới sử dụng. Trong một ứng dụng duy nhất, một lớp gần như là một trừu tượng như một giao diện. Vì vậy, câu hỏi của tôi là tại sao chúng ta vẫn cần Giao diện và sau đó có các triển khai đơn lẻ như các lớp * ServiceImpl và * DaoImpl và tăng kích thước cơ sở mã không cần thiết của chúng ta một cách không cần thiết. Có vấn đề gì trong các lớp bê tông chế nhạo mà tôi không biết. Bất cứ khi nào tôi đã thảo luận điều này với các đồng đội của tôi, chỉ có câu trả lời tôi nhận được là triển khai dịch vụ và các lớp dao dựa trên giao diện là THE DESIGN DESIGN sau đây - họ đề cập đến các thực hành tốt nhất mùa xuân, OOP, DDD, v.v. vẫn không nhận được một lý do thực dụng đằng sau có quá nhiều giao diện trong một ứng dụng riêng biệt.
Về câu trả lời bạn nhận được - Tôi không thấy cách người ta có thể gọi DDD là lý do để ném giao diện trước mỗi đối tượng. DDD không liên quan gì đến điều đó. Ngay cả OOP cũng là một sự biện minh tồi tệ. Nếu bạn có những thứ như L, I và D của SOLID, họ chỉ xác định cách bạn nên thiết kế các trừu tượng như giao diện và những gì bạn nên sử dụng chúng, không phải là * bạn nên sử dụng chúng mọi lúc *. Vì vậy, như bạn đã nói, tôi đoán tất cả đều tập hợp thành "thực hành tốt nhất mùa xuân" hoặc chỉ những người làm điều đó trong thói quen. – guillaume31