Php 您如何处理依赖性很大的服务和依赖性注入?
我将依赖项注入用于类似SOA的应用程序 例如,我有一个VoteService,用于对文章和评论进行投票 然后我有4个依赖项,文章、注释、数据库抽象层和投票所需的用户 因此,我的构造函数有4个参数要填写以获取我的对象 我总是听说超过2/3的参数是对糟糕代码设计的警告,我可能同意这一点 也许我的VoteService设计得不好 我可能需要在文章和评论服务中都进行投票 你觉得怎么样Php 您如何处理依赖性很大的服务和依赖性注入?,php,dependency-injection,soa,Php,Dependency Injection,Soa,我将依赖项注入用于类似SOA的应用程序 例如,我有一个VoteService,用于对文章和评论进行投票 然后我有4个依赖项,文章、注释、数据库抽象层和投票所需的用户 因此,我的构造函数有4个参数要填写以获取我的对象 我总是听说超过2/3的参数是对糟糕代码设计的警告,我可能同意这一点 也许我的VoteService设计得不好 我可能需要在文章和评论服务中都进行投票 你觉得怎么样 总是听说超过2/3的参数是错误代码设计的警告 完全错误。尤其是在这种情况下。 你是用正确的方法做的(DI)。这里不需要
总是听说超过2/3的参数是错误代码设计的警告 完全错误。尤其是在这种情况下。
你是用正确的方法做的(DI)。这里不需要更改 我可能需要在文章和评论服务中都进行投票 这可能是另一种解决办法。但是你可以自由地留在这个imo。
如果要实现此解决方案,可以使用方法
addVote
创建接口IVotable
此时,您可以在Articles/Comments
类中实现此接口,以便执行以下操作:
$a = new Article;
$b = new Comment;
$a->addVote($currentLoggedUser,10); //> Inject only loggedUser (and maybe your DAL)
$b->addVote($currentLoggedUser,10);
总是听说超过2/3的参数是错误代码设计的警告
完全错误。尤其是在这种情况下。你是用正确的方法做的(DI)。这里不需要更改 我可能需要在文章和评论服务中都进行投票 这可能是另一种解决办法。但是你可以自由地留在这个imo。
如果要实现此解决方案,可以使用方法
addVote
创建接口IVotable
此时,您可以在Articles/Comments
类中实现此接口,以便执行以下操作:
$a = new Article;
$b = new Comment;
$a->addVote($currentLoggedUser,10); //> Inject only loggedUser (and maybe your DAL)
$b->addVote($currentLoggedUser,10);
我总是听说超过2/3的参数是对糟糕代码设计的警告
这本身并不是问题。这只是潜在问题的一个指标
这个规则通常适用于公共成员函数,而不是构造函数
这样的经验法则如果你盲目应用,可能会很危险。你可能有问题,也可能一点问题都没有
您的体系结构中可能(或可能不)存在的一些问题示例:
- 你的投票服务做得太多了,应该分开
- 您的“投票服务”实际上不是它自己的逻辑概念,只是系统中其他概念的一个方面
- 您缺少一个概念的抽象(在本例中是一个投票,其中包含一篇文章、注释和用户)
$entityManager
,在构造函数或setter中使用$configurationService
(取决于它是否可以在没有依赖项的情况下生存),在addarticlesvote
方法中使用$articleService
,并使用addCommentVote
方法中的$commentService
class VoteService {
public function __construct($entityManager);
// Adding this in case you have sensible logic if it isn't present.
// If it isn't optional (you don't have defaults that make sense to put in this class),
// then put it back in the ctor
public function setConfigurationService($configurationService)
{
// ...
}
public function addArticleVote($articleService) // or $article
{
// ...
}
public function addCommentVote($commentService) // or $comment
{
// ...
}
}
也许我的VoteService设计得不好
我会评估你是否应该有一个VoteService
。例如,在ArticleService
和CommentService
类上添加vote
方法,甚至在您没有描述的Article
或Comment
类上添加vote
方法可能是有意义的
如果您对这种类型的反馈感兴趣(看看应该如何重构整个类集),那么您应该在上发布另一个问题
我总是听说超过2/3的参数是对糟糕代码设计的警告
这本身并不是问题。这只是潜在问题的一个指标
这个规则通常适用于公共成员函数,而不是构造函数
这样的经验法则如果你盲目应用,可能会很危险。你可能有问题,也可能一点问题都没有
您的体系结构中可能(或可能不)存在的一些问题示例:
- 你的投票服务做得太多了,应该分开
- 您的“投票服务”实际上不是它自己的逻辑概念,只是系统中其他概念的一个方面
- 您缺少一个概念的抽象(在本例中是一个投票,其中包含一篇文章、注释和用户)