接口实现的放置,经验法则

时间:2013-02-19 15:18:05

标签: php oop interface

我有很多情况我有一些BaseInterface,它由一堆对象实现。这些对象通常也应该实现Serializable或Counatble等接口。现在我不清楚何时将这些附加接口指定为由实现BaseInterface的类实现,或者当BaseInterface扩展这些附加接口时更好。我正在寻找这两种方法的含义的概述,以及一套简单的规则,通过这些规则可以确定在给定情况下应该采取哪种方法。

为了提高清晰度,我在两种方法的代码中提供了一个简单的例子:

方法1:扩展基接口

interface BaseInterface extends Countable, Serializable {}

class Implementation implements BaseInterface{}

方法2:在实现中实现各个接口

interface BaseInterface {}

class Implementation implements BaseInterface, Countable, Serializable {}

似乎通常有人希望能够假设实现BaseInterface的东西是可数的,虽然可能不需要OTOH并阻碍BaseInterface的实现,而实现Countable根本不需要。然后还有接口隔离​​原则,这使我对扩展接口持谨慎态度,如方法1所示。

注意:这个问题是关于在哪里放置接口实现子句。它不是通过继承进行代码共享。

1 个答案:

答案 0 :(得分:0)

我提出了一个解决方案:

interface BaseInterface {}

abstract class AbstractBase implements BaseInterface {}

abstract class AbstractBaseCountable implements BaseInterface, Countable {}

abstract class AbstractBaseCountableSerializable implements BaseInterface, Countable, Serializable {}

class Implementation extends AbstractBase/* OR AbstractBaseCountable 
OR AbstractBaseCountableSerializable */ {}

因此,它可以创建具有每个不同所需特征的类。而且,在某些实现中是抽象类,因此实现类更清晰。