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’关键字来实例化某些类).

这同样基本上适用于继承.我必须找到继承旧类的每个类,并且必须用新类替换它.

所以基本上我的问题是:

你如何命名有新方法的新课程?只是因为我添加了一些新的功能,并不意味着我可以给班级一个全新的名字…

如果“旧”类从多个地方实例化(或继承),该怎么办?那么我必须找到所有这些地方?收益在哪里?

开放原则不旨在用作一种版本控制系统.如果您真的需要更改课程,请继续进行更改.您不需要创建新类并更改实例化旧类的所有地方.

开放原则的要点是,设计良好的系统不应要求您更改现有功能添加功能.如果您正在向系统添加一个新类,则不需要搜索所有代码来查找需要引用该类的地方或具有特殊情况.

如果你的类的设计不够灵活,不能处理一些新的功能,那么通过一切手段来改变你的类中的代码.但是当您更改代码时,使其变得灵活,以便将来无需更改代码即可处理类似的更改.这是一个设计策略,而不是一套手铐,以防止您进行更改.通过良好的设计决策,随着时间的推移,当您向系统添加功能时,现有代码将需要更少和少量的更改.这是一个迭代过程.

相关文章

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