根据我对 API 版本控制或模型版本控制的理解,我发现如果出现重大更改,模型应该以这种方式更新
public class ProductV2 : Product
{
//New attributes
}
如果我有使用此模型的服务怎么办?
public ProcessedProduct ProductProcessService(Product product);
如何处理使用这些模型的服务中模型的更改?
我看到的可能选项是
public ProcessedProduct ProductProcessService(IProduct product);
public ProcessedProduct ProductProcessService(Product product);
public ProcessedProduct ProductProcessServiceV2(ProductV2 product);
或者有没有更好的方法来处理这种情况?
使用接口只会将您遇到的问题转移到另一个接口的代码上。
我会选择第二个选项,单独的类来处理版本 2 中的新
Product
。这样,正在运行的产品的“旧”处理将保持不变,并且可以防止软件中出现任何回归。
此外,新产品的实现现在可以有所不同,并且可以在不触及旧产品原始代码的情况下进行调整。
但是,如果对于新旧产品来说,大多数实现是共同的,我会尝试将产品放在接口后面(因此选项号1)并仅处理接口后面的差异(在实现中)。