Tôi đang cố gắng sử dụng Dependency Injection càng nhiều càng tốt, nhưng tôi gặp khó khăn khi nói đến những thứ như phụ thuộc ngắn ngủi.Các nhà máy trừu tượng có sử dụng "mới" không?
Ví dụ: giả sử tôi có đối tượng trình quản lý blog muốn tạo danh sách blog được tìm thấy trong cơ sở dữ liệu. Các tùy chọn để thực hiện việc này (theo như tôi có thể biết) là:
- Blog mới();
- $ this-> loader-> blog();
- đối tượng nạp tạo ra các loại khác nhau của các đối tượng như đối tượng cơ sở dữ liệu, bộ lọc văn bản, vv
- $ this-> blogEntryFactory-> tạo();
Tuy nhiên, # 1 là xấu bởi vì nó tạo ra sự ghép nối mạnh mẽ. # 2 vẫn còn có vẻ xấu bởi vì nó có nghĩa là nhà máy đối tượng đã được tiêm trước đó - phơi bày tất cả các đối tượng khác mà nó có thể tạo ra.
Số 3 có vẻ ổn, nhưng nếu tôi sử dụng # 3, tôi có đặt từ khóa "mới" trong chính blogEntryFactory, OR, để tôi tải trình nạp vào blogEntryFactory và sử dụng trình tải không?
Nếu tôi có nhiều nhà máy khác nhau như blogEntryFactory (ví dụ tôi có thể có userFactory và commentFactory), có vẻ như việc đặt từ khóa "mới" trên tất cả các nhà máy khác nhau sẽ tạo ra sự cố phụ thuộc.
Tôi hy vọng điều này có ý nghĩa ...
LƯU Ý
Tôi đã có một số câu trả lời về cách thức này là không cần thiết ví dụ như viết blog cụ thể này, nhưng có, trên thực tế, trường hợp bạn cần sử dụng Abstract Factory Pattern, và đó là điểm tôi đang nhận được. Bạn có sử dụng "mới" trong trường hợp đó hay làm điều gì đó khác?
Nếu tôi không giải thích điều này một cách chính xác hoặc đủ kỹ lưỡng, vui lòng cho tôi biết và tôi sẽ cố gắng làm rõ – johnnietheblack
Tôi chưa bao giờ thấy việc sử dụng tiêm phụ thuộc vào các lớp mô hình. Trừ khi lớp 'Blog' đóng gói một số logic nghiệp vụ (mà các mô hình hiếm khi làm), không có điểm cố gắng để giảm khớp nối với nó - không có hành vi nào để kết nối. (Chỉ có cấu trúc của thực thể, nhưng điều đó sẽ không thay đổi.) – millimoose
Đầu tiên, cảm ơn nhận xét ... vậy bạn có nói rằng BlogManager nên/có thể gọi là "Blog mới()" không? – johnnietheblack