Một trong những cách để triển khai Dependency Injection chính xác là tạo riêng đối tượng từ logic nghiệp vụ. Thông thường, điều này liên quan đến việc sử dụng một Nhà máy để tạo đối tượng.Có thể chuyển thông số sang phương thức Factory không?
Cho đến thời điểm này, tôi chưa bao giờ nghiêm túc xem xét sử dụng một máy vì vậy tôi xin lỗi nếu câu hỏi này có vẻ hơi đơn giản:
Trong tất cả các ví dụ về các mẫu máy mà tôi đã chạy ngang qua, tôi luôn xem các ví dụ rất đơn giản không có tham số. Ví dụ: đây là một Nhà máy bị đánh cắp từ Misko Hevery's xuất sắc How To Think About the "new" Operator bài viết.
class ApplicationBuilder { House build() { return new House(new Kitchen( new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Tuy nhiên, điều gì sẽ xảy ra nếu tôi muốn mỗi ngôi nhà mà tôi xây dựng để có tên? Tôi vẫn đang sử dụng mẫu Nhà máy nếu tôi viết lại mã này như sau?
class ApplicationBuilder { House build(const std::string & house_name) { return new House(house_name, new Kitchen(new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Lưu ý rằng lời gọi phương thức Nhà máy của tôi đã thay đổi từ này:
ApplicationBuilder builder; House * my_house = builder.build();
Để này:
ApplicationBuilder builder; House * my_house = builder.build("Michaels-Treehouse");
Bằng cách này: Tôi nghĩ rằng khái niệm tách đối tượng instantiating từ logic kinh doanh thật tuyệt, tôi chỉ cố gắng tìm ra cách tôi có thể áp dụng nó vào tình huống của chính mình. Điều làm tôi bối rối là tất cả các ví dụ mà tôi đã thấy về mẫu Factory không bao giờ chuyển bất kỳ tham số nào vào hàm build().
Để rõ ràng: Tôi không biết tên của ngôi nhà cho đến thời điểm này trước khi tôi cần phải khởi tạo nó.
Tôi thường thấy các nhà máy lấy thông số như bạn đã hiển thị. Không có gì là sai với nó. Hoặc về mặt câu hỏi của bạn. Nó là hoàn toàn ok. – grieve