加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:16:43 所属栏目:PHP教程 来源:网络整理
导读:我正在使用 third party library,每3-4个月有相同(大多数)类的新版本.每次新版本发布时,我都不想更新每个使用它们的类. 该库的结构如下,其中服务使用相同版本的类. v201609 / MyClass的 v201609 /为myService v201701 / MyClass的 v201701 /为myService 我无
我正在使用 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()

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读