php – 打开/关闭原理 – 如何调用新版本?
我正在试图把握开放/封闭的原则(在我的
PHP中,但实际上并没有什么不同).
我理解的方式是,一个类永远不会打开修改.仅用于修复错误.如果我想添加新的代码到类,那么我必须创建一个新的代码,并扩展“旧”类.这是我可以添加新代码的唯一方法. 在某种程度上,我可以看到这样的优点.因为基本上你创建了一些版本控制系统,旧的代码总是可以工作,但是你总是可以尝试使用新的类. 但这在实践中如何工作?我的意思是假设我有以下类: class MyObject { public function doSomething() { echo 'Im doing something'; } } 所以在某个地方我可能会实例化这个类: $obj = new MyObject(); 但是,我决定在该对象中使用另一种方法是很好的.所以我也可以做别的事情根据OCP我不能修改类.所以我必须创造一个新的,延伸到旧的权利? 第一个问题我怎么称呼新班?因为它不是一个完整的新对象.喜欢. User对象是User对象.我不能突然给它完全不同的名字,因为它需要另一种方法.无论如何,我创建新的课程: class MyNewObject extends MyObject { public function doSomethingElse() { echo 'Im doing something else now'; } } 现在这也意味着我必须改变代码行,我实例化了“MyObject”类,并用“MyNewObject”类替换它.如果这样做在不止一个地方完成,那么我必须搜索源代码…(想一下控制器类中的方法,几乎??总是使用’??new’关键字来实例化某些类). 这同样基本上适用于继承.我必须找到继承旧类的每个类,并且必须用新类替换它. 所以基本上我的问题是: 你如何命名有新方法的新课程?只是因为我添加了一些新的功能,并不意味着我可以给班级一个全新的名字… 如果“旧”类从多个地方实例化(或继承),该怎么办?那么我必须找到所有这些地方?收益在哪里?
开放原则不旨在用作一种版本控制系统.如果您真的需要更改课程,请继续进行更改.您不需要创建新类并更改实例化旧类的所有地方.
开放原则的要点是,设计良好的系统不应要求您更改现有功能以添加新功能.如果您正在向系统添加一个新类,则不需要搜索所有代码来查找需要引用该类的地方或具有特殊情况. 如果你的类的设计不够灵活,不能处理一些新的功能,那么通过一切手段来改变你的类中的代码.但是当您更改代码时,使其变得灵活,以便将来无需更改代码即可处理类似的更改.这是一个设计策略,而不是一套手铐,以防止您进行更改.通过良好的设计决策,随着时间的推移,当您向系统添加新功能时,现有代码将需要更少和少量的更改.这是一个迭代过程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |