Php 应用程序逻辑是否应该访问存储库?
考虑到DDD方法,我将一个类移动到一个公共文件夹中,因为它将在模块之间共享。问题是我不知道如何使用依赖项注入和容器 基本上,MenuService-generate方法创建了一个autogenerator实例,该实例从MenuRepository传递4个数组 MenuService.phpPhp 应用程序逻辑是否应该访问存储库?,php,domain-driven-design,Php,Domain Driven Design,考虑到DDD方法,我将一个类移动到一个公共文件夹中,因为它将在模块之间共享。问题是我不知道如何使用依赖项注入和容器 基本上,MenuService-generate方法创建了一个autogenerator实例,该实例从MenuRepository传递4个数组 MenuService.php namespace MP\Application\Services; use MP\Domain\Repositories\Repository; use MP\Application\Generation
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)
,这是AutoGenerator类中唯一使用$allIngredients
的地方
class AutoGenerator {
public function add(...){
$percentage = new Percentage(...);
$scaler = new Scaler();
$try = $scaler->scale($recipe, $percentage, $this->allIngredients);
if($try->isSuccess()){
...
}
}
}
我正试图用MenuService删除所有对自动生成器的依赖,最后是Scaler。。。基本上,我使用_invoke方法创建了一个名为components的类,该方法在构造函数中获取存储库,它在软件的早期被实例化,现在我将其注入构造函数中
问题是AutoGenerator现在无法实例化Scaler类,因为它具有构造函数依赖项,这意味着AutoGenerator类现在必须作为依赖项传递Scaler。。。这就引出了我下面的问题。。我应该在哪里传递$RecipeArr和$menuArr
我之所以这么问,是因为我不确定创建一个类只是为了返回一个数据库查询,这样我就可以在构造函数中传递它是否正确。$recipesArr/$AllingElements来自RecipeRepository,$menuArr来自MenuRepository
或者我应该只在scaler构造函数中注入RecipeRepository和MenuRepository吗
这是文件夹结构:
MP\Application\Generation\Common\Scaler;
MP\Application\Generation\AutoGenerator;
SHARED\Domain\Repositories\Ingredients;
MP\Domain\Repositories\RecipeRepository;
MP\Domain\Repositories\MenuRepository;
答案是:是 应用程序服务应该关注读取和持久化。正确的使用方法是:
我刚在谷歌上搜索了一下,想了解更多详情,请查看以下内容:在您的问题中,您描述了
解决方案,并询问它有什么问题。相反,我将描述问题所在的领域,以及您试图实现的目标。然后有人可能会对模型是否好有意见。