Próbuję używać Dependency Injection tak często, jak to możliwe, ale mam problemy, jeśli chodzi o takie krótkotrwałe zależności.Czy abstrakcyjne fabryki używają "nowego"?
Na przykład, powiedzmy, że mam blogu menedżera obiektu, który chciałby, aby wygenerować listę blogów, które to znajdują się w bazie danych. Dostępne opcje (o ile wiem) to:
- nowy blog();
- $ this-> loader-> blog();
- obiekt loader tworzy różne inne typy obiektów, takich jak obiekty bazy danych, filtrów tekstowych itp
- $ this-> blogEntryFactory-> create();
Jednak nr 1 jest zły, ponieważ tworzy silne połączenie. # 2 nadal wydaje się zły, ponieważ oznacza, że fabryka obiektów musi zostać wcześniej wstrzyknięta - odsłaniając wszystkie inne obiekty, które może stworzyć.
Numer 3 wydaje się być w porządku, ale jeśli użyję # 3, czy wstawię "nowe" słowa kluczowe do samego bloga EnteryFactory, LUB, czy wprowadzę program ładujący do blogaEntryFactory i użyję programu ładującego?
Jeśli mam wiele różnych fabryk, takich jak blogEntryFactory (na przykład mogę mieć userFactory i commentFactory) wydaje się, że wprowadzenie słowa kluczowego "new" w tych wszystkich różnych fabrykach spowoduje problemy z zależnościami.
Mam nadzieję, że to ma sens ...
UWAGA
miałem kilka odpowiedzi na temat, jak to jest konieczne w tym konkretnym przykładzie blogu, ale istnieją w rzeczywistości, przypadki, w których należy użyj Wzorca Abstrakcyjnej Fabryki, i to jest punkt, do którego dążę. Czy używasz w tym przypadku "nowego", czy też coś innego?
Gdybym nie wyjaśni to prawidłowo lub wystarczająco dokładnie, proszę dać mi znać, a postaram się wyjaśnić – johnnietheblack
Nigdy nie widziałem Dependency Injection jest używany w klasach modelowych. O ile klasa 'Blog' nie zawiera jakiejś logiki biznesowej (której modele rzadko się zdarzają), nie ma sensu próbować sprowadzać się do niej - nie ma żadnego zachowania, z którym można się połączyć. (Jest tylko struktura podmiotu, ale to się nie zmieni.) – millimoose
Po pierwsze, dziękuję za komentarz ... więc czy mówicie, że BlogManager powinien/mógł nazwać "nowy blog()"? – johnnietheblack