php - 方法覆盖并遵循 SOLID 原则
问题描述
我有一个父类和一个子类,如下所示:
class Request {
public function handleException() : array {
throw new Exception( 'RequestException' );
}
}
class SpecialRequest extends Request {
public function handleException() : array {
if (condition) {
return [];
}
parent::handleException();
}
}
我有 2 个请求类,并且有一个用于返回数组的 handleException 方法。我的想法是父类只会抛出异常(因为它不知道如何处理它们)。虽然允许子类覆盖父方法以处理某些情况,否则抛出父异常。
遵循 SOLID 原则,我不应该在覆盖时更改方法签名。但是看看父方法,该方法有一个数组返回类型似乎很奇怪,而它基本上只是抛出一个异常。
上课有什么问题吗?
解决方案
Request 类中的那个实现看起来应该抛出 NotImplementedException。然而,这通常是一个巨大的代码异味,表明一个糟糕的抽象。就像你有一只玩具狗和一只真正的狗实现了相同的接口,因为它们都是带有方法 acceptBatteries 的“狗”。玩具狗会接受电池,而真正的狗会抛出异常。只是一个糟糕的抽象——违反了 LSP。
编辑:如果请求类是抽象的并且处理异常方法是抽象的。
推荐阅读
- angular9 - 如何更改角度 slickgrid 中组标题行的背景颜色?
- parsing - 如何在 Julia 中有效地读取 xyz 格式的文本文件?
- python - Creating two instances of this class, creates weird behavior tkinter python
- java - 通过递归查找 BST 的大小
- python - Python 3 - 优先队列 - 使用 O(log(n)) 按值搜索和删除项目
- python - 低特征环境的鲁棒本地化
- numpy - Numpy 获取反向索引顺序
- javascript - 无法使用 ajax 在我的发布请求上发布 base64 图像
- javascript - How can I change JavaScript HTTP post request code to C#, using 'no-cors'?
- javascript - 当我使用变量作为参数时,我的 API 调用会引发错误,但当我将位置硬编码到 API 调用中时不会