在 Doctrine 中,假设我想实现不同类型的车辆。可能是汽车、飞机、自行车等等……所有这些交通工具都有许多不同的属性,但也有很常见的东西,比如它们都是由一种 Material 制成的。
所以如果我想得到这个 Material ......我应该实现一个抽象类 Vehicle
和一个属性 material
并实现 getter/setter 还是我应该定义一个接口(interface)IVehicle
并在其中定义 getter/setter 以确保确实有获取和设置 Material 的方法?或者我什至应该结合使用两者?
使用接口(interface)感觉“专业”……但是在接口(interface)中定义getter/setter感觉不对,所以我个人的感觉是:
不使用接口(interface),只使用抽象类。
但是抽象类方法是否可以防止误用?例如在另一个地方,我肯定希望从 getMaterial
函数返回一个 Material
类型......抽象类方法也保存不返回完全意外的东西(比如接口(interface))?
因此,如果我为另一个具体类扩展此工具,开发人员不应该能够返回意外的东西,但也应该能够在需要时更改特定方法中的逻辑。
最佳答案
我的 2 美分:
您可以编写一个抽象类,其中包含返回 null(或其他一些预定值)的方法,这将要求您在每个派生类中实现它们。
这种方法仍然需要您编写一些样板代码来检查每个类中的条件。
我个人会在这里使用接口(interface),因为您的类的性质似乎非常多样,只能部分概括为单个抽象类。但是,我也不认为采用抽象类方式有什么问题。在这种情况下,细节决定成败。
关于php - 我应该为我的 Doctrine 模型使用抽象类还是接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51417846/