Должна ли логика приложения иметь доступ к репозиториям? - PullRequest
0 голосов
/ 29 октября 2019

С учетом подхода 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;
...