假设您将系统划分为价值对象和服务对象(如“开发面向对象的软件,由测试引导”中所建议的)。 Misko Hevery 将这些对象称为“可更新对象”和“可注入对象”。
当您的值对象之一突然需要访问服务来实现其方法时会发生什么?
假设您有一个很好的简单 Value 对象。它是不可变的,包含一些信息,仅此而已。假设我们像这样使用它:
CreditCard card = new CreditCard("4111-1111-1111-1111", "07/10");
if (card.isValid())
{
// do stuff
}
else
{
// don't do stuff
}
到目前为止,一切都很好。isValid()
对卡号实施校验位算法并返回真/假。
现在,假设我希望通过根据当前时间验证到期日期来增强系统。您建议如何在不破坏值对象/服务对象范式的情况下完成此操作?我希望这个类能够继续进行单元测试。
-
CreditCard
现在有了一个依赖项,但是由于它的创建方式,它无法被注入,所以依赖项注入已经过时了。
- The
CreditCard
类不应该调用单例(我认为全局访问单例是不好的做法)
- 把行为放在
CreditCardVerificationService.validateCard()
意味着必须重新审视所有现有代码。 isValid() 的实现正在泄漏。
我知道可以采取一些措施来解决这个问题,但是最干净的方法是什么?
我认为验证任何东西并不是 CreditCard 对象的工作。工厂将验证校验位以确保它正在实例化合格的卡,而验证服务将验证卡的有效期/$限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)