С учетом подхода DDD я перемещаю класс в общую папку, так как он будет разделен между модулями. Проблема в том, что я не могу понять, как заставить его работать с Dependency Injection и контейнером.
По сути, метод генерации MenuService создает экземпляр автогенератора, передающий 4 массива из MenuRepository;
MenuService.php
namespace MP\Application\Services;
use MP\Domain\Repositories\Repository;
use MP\Application\Generation\AutoGenerator;
class MenuService {
private $repository;
public function __construct(Repository $repository){
$this->repository = $repository;
}
public function generate(){
// fetch/set $recipes, $menu, $settings;
$generate = new AutoGenerator($recipesArr, $menuArr, $allIngredients);
}
}
Единственная причина для передачи $allIngredients
здесь заключается в том, что AutoGenerator создает другой класс с именем Scaler, основной метод называется scale($recipe, $percentage, $AllIngredients)
, который является единственнымplace $allIngredients
даже используется в классе автогенератора.
class AutoGenerator {
public function add(...){
$percentage = new Percentage(...);
$scaler = new Scaler();
$try = $scaler->scale($recipe, $percentage, $this->allIngredients);
if($try->isSuccess()){
...
}
}
}
Я пытаюсь удалить всю эту зависимость с помощью MenuService для AutoGenerator, и, наконец, Scaler ... в основном, я создал класс с именемИнгредиенты с методом __invoke, который принимает репозиторий в конструкторе, он был создан на ранней стадии в программном обеспечении, и теперь я внедрил его в конструктор.
Проблема в том, что AutoGenerator теперь не может создавать экземпляр класса Scaler, потому что он имеетзависимость конструктора, что означает, что класс AutoGeneratorтеперь нужно передать Scaler как Зависимость ... что приводит к моей следующей проблеме ... где я должен передать $ recipesArr и $ menuArr?
Причина, по которой я спрашиваю, заключается в том, что яЯ не уверен, правильно ли мне создавать класс, просто чтобы вернуть запрос к базе данных, чтобы я мог передать его в конструктор. $ RecipesArr / $ allIngredients происходит из RecipeRepository, $ menuArr - из MenuRepository;
Или я должен просто вставить RecipeRepository и MenuRepository в конструктор масштабатора?
Это структура папок:
MP\Application\Generation\Common\Scaler;
MP\Application\Generation\AutoGenerator;
SHARED\Domain\Repositories\Ingredients;
MP\Domain\Repositories\RecipeRepository;
MP\Domain\Repositories\MenuRepository;