我正在使用
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()
具有正确的类名和版本.然后,您将仅在给定工厂的配置文件中更改此项.那么不要用于下面的类.
我希望,这将完全解决你的问题.