Oop 考虑到依赖注入,我应该在何处构建嵌套逻辑层中的对象?
假设我有这样的东西Oop 考虑到依赖注入,我应该在何处构建嵌套逻辑层中的对象?,oop,dependency-injection,inversion-of-control,Oop,Dependency Injection,Inversion Of Control,假设我有这样的东西 控制器使用服务 服务具有历史、源和HttpClient Source具有SourceRepository和id。 Source仅在从SourceRepository获取信息后对其他对象有用 历史具有历史存储库和源 下面是PHP+伪代码的混合(为了简单起见)来说明这个场景 公共类源代码 { ... 公共功能构造(接口存储库$repository,int$id) { $this->data=$this->repository->findById($id); } } 公共
使用控制器
服务
具有服务
、历史
和源
HttpClient
具有Source
和SourceRepository
。id
仅在从Source
获取信息后对其他对象有用SourceRepository
具有历史
和历史存储库
源
公共类源代码
{
...
公共功能构造(接口存储库$repository,int$id)
{
$this->data=$this->repository->findById($id);
}
}
公共课历史
{
...
公共功能构建(接口存储库$repository,接口资源$source)
{
...
}
公共函数hasHistory():bool
{
返回$this->repository->exists($this->source->data);
}
公共功能历史()
{
...
}
}
公务舱服务
{
...
公共功能构造(InterfaceHistory$history,InterfaceSource$source,InterfaceHttpClient$httpClient)
{
...
}
公共函数send()
{
如果($this->history->hashhistory()){
返回$this->history->duplicateHistory();
}
返回$this->sendNewRequest();
}
公共函数sendNewRequest()
{
$this->httpClient->postRequest($this->source->data);
}
}
公共类控制器
{
公共功能剂量测量(整数$id)
{
$sourceRepository=newsourcerepository();
$source=新源($sourceRepository,$id);
$historyRepository=新的historyRepository();
$history=新历史($historyRepository,$source);
$httpClient=new Guzzle();
$service=新服务($history,$source,$httpClient);
$service->send();
}
}
现在我有一些关于依赖注入的问题:
- 所有对象构建是否真的应该保持在最高级别,在本例中是
?控制器
- 还是对象结构在中间层<>强>>>
- 如果我使用依赖注入容器,我认为它将无法实例化
,因为源代码
。我应该如何解决这个问题id
服务注入控制器,这样它就可以调用$Service->send()
如果我使用依赖注入容器,我认为它将无法实例化源代码,因为id。我应该如何解决这个问题
不对。依赖项注入容器确实可以用动态参数(如标量值或其他)实例化类。对象图应该在中构建,而不是在UI层中。@Steven我不知道合成根,你传递给我的链接简直太棒了!这使整个情况对我来说非常清楚,非常感谢!我很快就会用我学到的东西写一个答案。