我应该为我的学说模型使用抽象类还是接口?

时间:2018-07-19 08:28:08

标签: php symfony doctrine entity

在“学说”中,假设我想实现不同类型的车辆。也许是汽车,飞机,自行车等……所有这些车辆具有许多不同的属性,但也很普通,例如它们都是用材料制成的。

因此,如果我想获取此材料...应该使用属性Vehicle实现抽象类material并实现getter / setter还是应该定义接口IVehicle和在其中定义吸气剂/设置剂,以确保确实有一种获取和设置材料的方法?还是我应该同时使用两者?

使用界面感觉“专业”……但是在界面中定义吸气剂/设置剂感觉不对,所以我个人的感觉是:

不使用接口,仅使用抽象类。

但是抽象类方法是否可以防止滥用?例如,在另一个地方,我肯定希望从Material函数返回一个getMaterial类型……抽象类方法是否还可以避免不返回完整的意外内容(如接口那样)?

因此,如果我将此工具扩展到另一个具体的类,开发人员应该不能返回意外的东西,但如果需要,还应该能够更改特定方法中的逻辑。

1 个答案:

答案 0 :(得分:1)

我的2美分:

您可以使用返回null(或其他一些预定值)的方法编写抽象类,这将要求您在每个派生类中实现它们。

这种方法仍然需要您编写一些样板代码来检查每个类中的条件。

我个人会在这里使用一个接口,因为您的类的性质似乎是多种多样的,并且只能部分概括为一个抽象类。但是,我也没有发现使用抽象类方式有任何问题。在这种情况下,细节决定成败。