Tôi đã đọc về tiêm phụ thuộc và có một câu hỏi đơn giản. Tôi có thể hiểu làm thế nào thông qua constructor hoặc setter tiêm phụ thuộc yêu cầu được autowired bởi khuôn khổ DI. Điều gì xảy ra khi một đối tượng quyết định nó cần tạo một đối tượng mới do một số quy trình nghiệp vụ? Tôi có cần phải luôn tạo một Nhà máy trong những tình huống này không? Để làm cho nó một câu hỏi ít trừu tượng hơn, đây là một ví dụ.Câu hỏi về New Dependency Injection khi một phương pháp cần tạo đối tượng mới
Giả sử tôi đang viết trò chơi Asteriod. Có một con tàu ở giữa có thể quay xung quanh và bắn các tiểu hành tinh. Giả sử rằng con tàu đã được tạo ra và gây ra những thứ bị tiêm chích. Khi playerShip.shoot()
được gọi là chúng ta cần tạo đối tượng bullet
. Đối tượng viên đạn cần phải biết cách nó đang đi (direction
) và bắt đầu từ đâu (point
).
Thông thường, tôi sẽ làm một cái gì đó như thế này:
bullet = new Bullet(direction, point);
Tuy nhiên, đó chặt cặp vợ chồng lớp PlayerShip đến lớp Bullet. Làm thế nào điều này nên làm việc dưới tiêm phụ thuộc? Tôi có cần phải tạo ra một giao diện BulletFactory và tiêm một thực hiện đó vào con tàu không?
Chỉnh sửa: Tôi không thực sự viết tiểu hành tinh. Đây là một ví dụ đơn giản mà tôi nghĩ mọi người sẽ hiểu. Tôi muốn một cái gì đó mà cần thiết để được tạo ra một thời gian chạy (không phải trong khi "dây lên các đối tượng") mà cũng có các thông số để xây dựng nó.
Ngoài ra, nếu "bullet" chính nó là một đối tượng rất phức tạp với cây đối tượng riêng của nó, bạn có thể muốn một nhà máy để tránh tàu có phụ thuộc vào phụ thuộc của Bullet. – Epaga