gpt4 book ai didi

oop - 当创建的类也需要运行时值时进行依赖注入(inject)?

转载 作者:行者123 更新时间:2023-12-02 16:16:43 25 4
gpt4 key购买 nike

假设您将系统划分为值(value)对象和服务对象(如“以测试为指导,发展面向对象的软件”中所建议的)。Misko Hevery 将这些对象称为“可更新对象”和“可注入(inject)对象”。

当您的值对象之一突然需要访问服务来实现其方法时会发生什么?

假设您有一个很好的简单 Value 对象。它是不可变的,包含一些信息,仅此而已。假设我们像这样使用它:

CreditCard card = new CreditCard("4111-1111-1111-1111", "07/10");
if (card.isValid())
{
// do stuff
}
else
{
// don't do stuff
}

到目前为止一切顺利。 isValid() 对卡号实现校验位算法并返回 true/false。

现在,假设我希望通过根据当前时间验证到期日期来增强系统。您建议如何在不破坏值对象/服务对象范式的情况下完成此操作?我希望这个类能够继续进行单元测试。

  • CreditCard 现在有一个依赖项,但由于它的创建方式,它无法注入(inject),因此依赖项注入(inject)已经过时了。
  • CreditCard 类不应该调用单例(我认为全局访问单例是不好的做法)
  • 将行为放在 CreditCardVerificationService.validateCard() 上意味着必须重新访问所有现有代码。 isValid() 的实现正在泄漏。

我知道可以采取一些措施来解决这个问题,但是最干净的方法是什么?

最佳答案

我认为验证任何东西并不是 CreditCard 对象的工作。工厂将验证校验位以确保它正在实例化合格的卡,而验证服务将验证卡的有效期/$限制。

关于oop - 当创建的类也需要运行时值时进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com