php – 处理具有许多版本,适配器或工厂的类?

我正在使用 third party library,每3-4个月有相同(大多数)类的新版本.每次新版本发布时,我都不想更新每个使用它们的类.

该库的结构如下,其中服务使用相同版本的类.

v201609 / MyClass的
v201609 /为myService
v201701 / MyClass的
v201701 /为myService

我无法将适配器提供给服务,因此我将不得不构建实际的类.为了显示
$myService-> handle(new MyClass);

工厂使用和构建实际类的解决方案:
(MyServiceFactory ::编译()) – >手柄(MyClassFactory :: fromModel($基于myModel));

因此,每次发布新版本的类时,我都必须更新我的所有工厂.

问题:

>这是解决这个问题的最佳方法吗?
>工厂是这种方法的正确命名约定吗?

问题是他们在命名空间的任何位置使用版本号.
在我看来,你的解决方案并不是那么糟糕.

问题是你需要type declaration代码,但这可能只会产生缺点.然后同样去工厂.然后每隔几个月你就需要更新它们.

Autoloader本身无法解决此问题,因为您仍在工厂中声明了类.此外,您希望省略问题将项目耦合到版本 – 在结果中,您将省略此对象的所有类型声明.

好的建议是使用集成测试(PHPUnit),这将在更新后发现数据结构的任何问题,你将需要这个.

第二条建议 – 在构造函数中,发送实际版本加载并使用字符串名称加载

return new $fullClassName()

具有正确的类名和版本.然后,您将仅在给定工厂的配置文件中更改此项.那么不要用于下面的类.

我希望,这将完全解决你的问题.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...