我正在编写新的代码,作为重构旧版旧代码库的一部分。
具体来说,我正在编写一个Device
类,用于计算设备的各种规格。
Device
类取决于设备的型号和粒子数,我可以将其称为$device = new Device($modelNumber, $particleCount);
问题:由于这个类将进入现有的遗留代码,因此我没有直接影响是否正确调用此类。要使Device
起作用,它需要具有正确的型号和正确的粒子数。如果它没有收到正确的配置数据,则不会初始化内部设备,并且该类将不起作用。我认为我需要找到一种方法让调用者知道存在错误,以防提供无效的配置数据。如何构建它以符合面向对象的原则?
或者,或者,我是否需要关注此事?我认为有一个原则,如果你提供垃圾,你会得到垃圾回收,我的班级只需要正确使用适当的数据。如果提供了不正确的数据,它可以代替烘焙蛋糕,或者什么都不做(并且可能无声地失败)。好吧,我不确定这个原则是否会很好。如果提供的配置数据不好,我确实需要抱怨。
以下是我正在思考的一些代码:
$device = new Device($x, $y);
$device->getData();
如果$ x或$ y超出设备规格,则上述操作将失败或产生错误或无数据。我不知道如何处理这个失败。我还想假设$ device在调用getData()方法时有效,我无法做出这样的假设。
或
$device = new Device($x, $y);
if ($device->isValid())
$device->getData();
else
blow_up("invalid device configuration supplied");
以上是更好的,但调用者现在必须调用isValid()函数。这也“降低了”我的班级。它必须做两件事:1)创建设备,2)验证设备配置是否有效。
我可以创建一个处理配置通知的DeviceChecker
类。也许这是一个解决方案。令我困扰的是,DeviceChecker必须包含Device
类中已有的部分逻辑。
问题
答案 0 :(得分:1)
I think you need to use below code to verify your passed arguments in construct
class Device {
public function __constructor($modelNumber, $particleCount) {
if(!$this->isValid($modelNumber, $particleCount) {
return false; //or return any error
}
}
}
This will check the passed params are valid or not and create object based on that only, otherwise return false or any error.