Tôi nghi ngờ tôi đã mắc một lỗi học sinh ở đây và đang tìm kiếm làm rõ. Rất nhiều lớp trong giải pháp của tôi (C #) - tôi dám nói là đa số - cuối cùng tôi đã viết một giao diện tương ứng cho. Ví dụ: giao diện "ICalculator" và lớp "Máy tính" thực hiện nó, mặc dù tôi không bao giờ có thể thay thế máy tính đó bằng một triển khai khác. Ngoài ra, hầu hết các lớp này nằm trong cùng một dự án với sự phụ thuộc của chúng - chúng thực sự chỉ cần internal
, nhưng cuối cùng lại trở public
thành một tác dụng phụ của việc thực hiện các giao diện tương ứng.
Tôi nghĩ rằng cách tạo giao diện này cho mọi thứ bắt nguồn từ một vài sai lầm: -
1) Ban đầu tôi nghĩ rằng một giao diện là cần thiết để tạo các thử nghiệm đơn vị (tôi đang sử dụng Moq), nhưng tôi đã phát hiện ra rằng một lớp có thể bị chế giễu nếu các thành viên của nó virtual
và nó có một hàm tạo không tham số (sửa cho tôi nếu Tôi đã sai).
2) Ban đầu tôi nghĩ một giao diện là cần thiết để đăng ký một lớp với khung IoC (Castle Windsor), vd
Container.Register(Component.For<ICalculator>().ImplementedBy<Calculator>()...
trong thực tế tôi chỉ có thể đăng ký loại bê tông chống lại chính nó:
Container.Register(Component.For<Calculator>().ImplementedBy<Calculator>()...
3) Sử dụng các giao diện, ví dụ: tham số hàm tạo để tiêm phụ thuộc, dẫn đến "khớp nối lỏng lẻo".
Vì vậy, tôi đã phát điên với các giao diện?! Tôi biết các tình huống mà bạn sẽ "bình thường" sử dụng một giao diện, ví dụ như phơi bày API công khai hoặc cho những thứ như chức năng "có thể cắm được". Giải pháp của tôi có một số lượng nhỏ các lớp phù hợp với các trường hợp sử dụng như vậy, nhưng tôi tự hỏi liệu tất cả các giao diện khác có cần thiết không, và có nên xóa không? Về điểm 3) ở trên, tôi sẽ không vi phạm "khớp nối lỏng lẻo" nếu tôi phải làm điều này chứ?
Chỉnh sửa : - Tôi chỉ chơi với Moq và dường như yêu cầu các phương thức là công khai và ảo và có một hàm tạo không tham số công khai , để có thể chế nhạo chúng. Vì vậy, có vẻ như tôi không thể có các lớp học nội bộ?