Tôi đã đọc về tiêm phụ thuộc, và tôi hiểu khái niệm cơ bản là một phương pháp sẽ nhận được những gì nó cần từ người gọi của nó chứ không phải là tạo ra các vật phẩm đó. Kết quả là, các toán tử new
bị loại bỏ khỏi phương thức gần như hoàn toàn (một số đối tượng cơ bản nhất định sẽ được miễn, dĩ nhiên - một ví dụ về điều này tôi tìm thấy là những thứ như StringBuilder
s có vẻ như sẽ mất trí phải chuyển vào) .Khi sử dụng tiêm phụ thuộc, tất cả các toán tử mới sẽ đi đâu?
Câu hỏi của tôi nghe có vẻ đơn giản, nhưng tôi nghi ngờ câu trả lời thực sự khá phức tạp: Tất cả các toán tử new
hoạt động ở đâu?
Câu trả lời có vẻ đơn giản lúc đầu: toán tử new
chỉ được đẩy tới phương thức gọi phương thức cần đối tượng. Tuy nhiên, vấn đề với phương pháp gọi này có thể cũng đang được kiểm tra và do đó new
bị đẩy lên từ phương thức gọi đến phương thức gọi cho đến khi bạn nhận được một phương pháp gốc (mà tại thời điểm này dường như không thể tin được) số lượng các đối tượng khiêu dâm để sử dụng tại các điểm khác nhau trong ngăn xếp cuộc gọi. Tình hình trở nên phức tạp hơn khi bạn xem xét rằng phương pháp gốc đó là gốc rễ của nhiều phương thức khác nhau, và do đó sẽ cần phải tạo ra các đối tượng cho mọi khả năng. Điều này cũng tạo ra một vấn đề hiệu suất vì bạn sẽ nhanh chóng được trái với một số lượng lớn các đối tượng mà không bao giờ thực sự được sử dụng, nhưng phải được instantiated anyway "chỉ trong trường hợp". Một điều khá rõ ràng đối với tôi rằng tôi đã bỏ lỡ một số phần quan trọng của kiến thức mà là như vậy rõ ràng cho các nhà phát triển khác mà không ai nghĩ rằng để mô tả nó trong một bài đăng trên blog. Tuy nhiên, tôi rõ ràng không thể biết những gì tôi không biết, vì vậy tôi khiêm nhường hỏi rằng tôi được cho vào bí mật: Nơi nào tất cả các nhà khai thác new
đi?
Tôi nên đề cập rằng tôi đang phát triển với PHP, vì vậy mọi yêu cầu đều bắt đầu tại cùng một điểm và có vẻ như "phương pháp" gốc đó trong index.php
sẽ cần phải bao gồm mọi thứ mà ứng dụng có thể làm, để đảm bảo nó cung cấp một đối tượng cho mọi thứ mà nó sẽ thực hiện theo yêu cầu hiện tại. Một lần nữa, có một sự hiểu lầm cơ bản ở đây, và tôi thực sự thích sửa nó.
Xem điều này có giúp ích: http://misko.hevery.com/2008/09/10/where-have-all-the-new-operators-gone/ –