Khi thiết kế một hệ thống, tôi thường gặp phải vấn đề có một loạt các mô-đun (ghi nhật ký, cơ sở dữ liệu, v.v.) được sử dụng bởi các mô-đun khác. Câu hỏi là, làm thế nào để tôi cung cấp các thành phần này cho các thành phần khác. Hai câu trả lời dường như có thể tiêm phụ thuộc hoặc sử dụng mô hình nhà máy. Tuy nhiên cả hai đều có vẻ sai:
- Các nhà máy làm cho việc kiểm tra trở thành một nỗi đau và không cho phép dễ dàng hoán đổi việc thực hiện. Họ cũng không làm cho các phụ thuộc trở nên rõ ràng (ví dụ: bạn đang kiểm tra một phương thức, không biết thực tế rằng nó gọi một phương thức gọi một phương thức gọi một phương thức sử dụng cơ sở dữ liệu).
- Dependword tiêm ồ ạt làm phồng danh sách đối số của hàm tạo và nó làm mờ một số khía cạnh trên toàn bộ mã của bạn. Tình huống điển hình là nơi các nhà xây dựng của hơn một nửa lớp trông như thế này
(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d)
Đây là một tình huống điển hình tôi gặp vấn đề với: Tôi có các lớp ngoại lệ, sử dụng các mô tả lỗi được tải từ cơ sở dữ liệu, sử dụng truy vấn có tham số cài đặt ngôn ngữ người dùng, trong đối tượng phiên người dùng. Vì vậy, để tạo một Ngoại lệ mới, tôi cần một mô tả, yêu cầu phiên cơ sở dữ liệu và phiên người dùng. Vì vậy, tôi đã cam chịu kéo tất cả các đối tượng này qua tất cả các phương thức của mình chỉ trong trường hợp tôi có thể cần phải ném một ngoại lệ.
Làm thế nào để tôi giải quyết vấn đề như vậy ??