Tôi đã suy nghĩ làm thế nào để cân bằng thiết kế có thể kiểm tra bằng cách sử dụng phép nội xạ phụ thuộc với việc cung cấp API công khai cố định đơn giản. Vấn đề nan giải của tôi là: mọi người sẽ muốn làm một cái gì đó như thế nào var server = new Server(){ ... }
và không phải lo lắng về việc tạo ra nhiều phụ thuộc và biểu đồ phụ thuộc mà một người Server(,,,,,,)
có thể có. Trong khi phát triển, tôi không quá lo lắng, vì tôi sử dụng khung IoC / DI để xử lý tất cả những điều đó (Tôi không sử dụng các khía cạnh quản lý vòng đời của bất kỳ container nào, điều này sẽ làm phức tạp thêm mọi thứ).
Bây giờ, các phụ thuộc không có khả năng được thực hiện lại. Thành phần hóa trong trường hợp này gần như hoàn toàn cho khả năng kiểm tra (và thiết kế hợp lý!) Thay vì tạo đường nối để mở rộng, v.v. Mọi người sẽ 99,999% thời gian muốn sử dụng cấu hình mặc định. Vì thế. Tôi có thể mã hóa các phụ thuộc. Đừng muốn làm điều đó, chúng tôi mất thử nghiệm của chúng tôi! Tôi có thể cung cấp một hàm tạo mặc định với các phụ thuộc được mã hóa cứng và một hàm phụ thuộc. Điều đó ... lộn xộn, và có thể gây nhầm lẫn, nhưng khả thi. Tôi có thể làm cho phần phụ thuộc nhận hàm tạo bên trong và làm cho đơn vị của tôi kiểm tra một nhóm bạn (giả sử C #), để dọn dẹp API công khai nhưng để lại một cái bẫy ẩn khó chịu ẩn giấu để bảo trì. Có hai nhà xây dựng được kết nối ngầm chứ không rõ ràng sẽ là thiết kế tồi nói chung trong cuốn sách của tôi.
Tại thời điểm đó là về điều xấu xa nhất tôi có thể nghĩ ra. Ý kiến? Sự khôn ngoan?