php - 我应该为我的 Doctrine 模型使用抽象类还是接口(interface)?

标签 php symfony doctrine entity

在 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/

相关文章:

php - FEDORA 20、APACHE 上的权限被拒绝

forms - 如何检查表格中的 Twig 是否有错误?

php - Travis CI 和 Symfony2 集成 .travis.yml 问题

php - 如何完全刷新具有@OneToMany 关系的实体?

php - 如何在 Doctrine 2 中将实体重新保存为另一行

php - 当一些用户尝试将信息插入数据库时​​出现重复的 Id 条目 - Php

php - 未捕获的异常 'ErrorException',消息为“错误的 SQL : INSERT INTO”

php - 如何在mysql中与旧值相同的列中插入新值

php - 开发成本、框架与纯 PHP

php - 使用 JMS Serializer 时禁用 Doctrine 2 延迟加载?