使用Castle Windsor作为DI,在我的MVC控制器中,我有以下内容:
public IAccountService AccountService { get; set; }
public IPasswordService PasswordService { get; set; }
public IEmailService EmailService { get; set; }
public AccountController(IAccountService accountService,
IPasswordService passwordService, IEmailService emailService)
{
AccountService = accountService;
PasswordService = passwordService;
EmailService = emailService;
}
帐户服务正在执行标准身份验证,密码服务用于重置用户密码,电子邮件服务用于向用户发送确认电子邮件。 我的问题是:我在这个构造函数中注入了太多服务吗?这样做有明显的负面影响吗?如果是这样,什么是更好的方法? THX。
答案 0 :(得分:4)
这实际上是一个意见问题,但我认为很多人都不会有三个注入服务的问题。
我在职业生涯早期学到的经验法则是,任何方法(包括构造函数方法)的参数都超过五个。我自从看到三个以上的论点太多了。
注入太多服务可能会成为您的课程责任太多的症状,但这可能只是这些职责的症状。我个人永远不会为了注入较少的依赖项而重构一个类,但肯定会将此视为审查代码并确保它不是其他问题的症状的理由。
顺便说一句,你应该让你的setter私有(或者甚至更好:使用只读成员变量)来注入的服务 - 通常你不想暴露它们从外面改变
答案 1 :(得分:0)
除了菲尔关于让那些制定者私有化的评论之外,你看起来完全没问题。事实上,有很多例子,尤其是帐户控制器,你需要的不仅仅是注入3个服务。
你想要谨慎的是你正在注射什么,天气与否它首先直接属于控制器。
除此之外,只要您正确使用设计模式(您就是这样),您就无需担心。