我试图决定是用其他方法扩展基本接口,还是创建几个独立的接口。我有一个Task接口,如下所示
interface Task
{
public function name();
public function run(array $args);
}现在,我想添加可选的description和dependencies方法。我应该像这样创建一个新的DetailedTask接口吗?
interface DetailedTask extends Task
{
public function description();
public function dependencies();
}通过这种方式,我可以选择为基本任务类实现基本Task接口,或者在需要描述和依赖关系时实现DetailedTask接口。或者,我可以为这样的额外方法创建单独的接口。
interface Describable
{
public function description();
}
interface TaskDependent
{
public function dependencies();
}根据界面偏析原理,第二种更好,因为它更灵活。但是,除了Describable实例之外,我从来没有预料到会在任何事情上使用Task和TaskDependent。额外的接口似乎增加了额外的复杂性。我应该用哪种技术?
发布于 2015-03-12 04:54:30
首先,关于你的问题的细节:
现在,我想添加可选的描述和依赖关系方法。
如果您想要一个可选的方法,那么您不应该选择接口,因为按照接口规则,您必须在实现类中定义方法。见PHP接口。
因此,根据该规则,您的第一个解决方案将无法工作,因为如果定义实现DetailedTask的类,那么该类必须同时定义方法描述和依赖项。
第二种方式将使您可以自由选择任何您想要实现的接口。
发布于 2015-03-12 04:55:38
在这种情况下,总是使用不同的接口。因为任务部分是强制性的,第二部分是可选的。
接口总是强制覆盖其中提到的所有方法。
现在想想,如果你不想使用可选的部分。但你还是得重写它。即使它什么都没做。
https://softwareengineering.stackexchange.com/questions/276045
复制相似问题