已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。
2天前关闭。
Improve this question
在使用某个体系结构的一些变通方法期间,我遇到了一个问题,我想知道这个实现是否遵循了最佳实践。
这里我们有一个抽象基类:
abstract class A {
protected mixed $object;
public function __construct() {
$this->loadObject()
->fuc1();
}
abstract protected function loadObject(): self;
abstract public function fuc1(): bool;
abstract public function fuc3(): iterable;
}
在本例中,我想实现类B和C。如果我分别创建每个类,一切都很好,但只要这两个类具有相同的功能,我就决定为它们创建一个基类(BC
),因此代码现在如下所示:
class BC extends A {
protected string x;
protected string y;
protected function loadObject(): self {
throw new \Exception('Child must implement loeadObject');
}
public function fuc1(): bool {
//Some Codes
}
public function fuc3(): iterable {
//Some Codes
}
}
B类和C类是这样的:
class B extends BC {
protected function loadObject(): self {
$this->object = new SomeObject();
return $this;
}
}
class C extends BC {
protected function loadObject(): self {
$this->object = new SomeObject2();
return $this;
}
}
我们也不能把loadObject
函数移到类BC中,因为类D可能想直接从类A继承。
我们也可以依赖接口,但我想知道如果有人忘记了让类B/C实现一个接口,那么我们将在类A中遇到问题。
那么,我们在类BC中抛出异常并强制其他开发人员不要忘记覆盖loadObject
函数,这是一个好的实践吗?
1条答案
按热度按时间hof1towb1#
这不是一个好的实践,如果你不需要在
BC
类中实现loadObject
方法,你应该保持它的抽象。