1
public IRedirect FactoryStrategyRedirect()
{
  if (_PasswordExpired) {
    return _UpdatePasswordRedirectorFactory.Create();
  } else {
    return _DefaultRedirectorFactory.Create();
  }
}

这个策略工厂方法可以替换为类型绑定和 when 子句:

Bind<IRedirect>.To<UpdatePasswordRedirector>.When(c=> c.kernel.get<SomeContext>().PasswordExpired()) 
Bind<IRedirect>.To<DefaultRedirector>.When(c=> not c.kernel.get<SomeContext>().PasswordExpired())

我想知道这两种方法中哪一种更正确。优缺点都有什么。

尤其是在逻辑更复杂,需要测试更多变量和返回更多具体类的情况下。

在绑定中实现业务逻辑是否正确?

4

1 回答 1

0

我想说,无论如何,您都应该防止在您的Composition Root中包含业务逻辑。您的组合根应该是关于正确连接事物的所有内容,并且您希望进行集成测试来测试此连接的正确性。

应用程序代码应该全部与业务逻辑有关,并且您应该进行单元测试来验证业务逻辑。

尽管在您的情况下差异可能微不足道,但这条线开始很快变得模糊,您最终会得到一个复杂、难以阅读且难以维护的合成根。

于 2013-08-04T20:24:36.210 回答