这是一道SPI设计问题。我目前有以下界面:
interface IService {
void init();
void add(AddArgs args);
void get(GetArgs args);
void close();
}
现在应该添加一个新行为:
void delete(DeleteArgs args)
所以我的问题是:如何引入这个功能?它是一个新的独立界面吗?或者应该扩展上面的一个?
换句话说,这个(1):
interface IDeletableService {
void delete(DeleteArgs args)
}
与(2):
interface IDeletableService extends IService {
void delete(DeleteArgs args)
}
或者有什么我不知道的新设计。
请注意,“理想情况下”,可删除服务是“当前”的服务。但这并不意味着第二个选择 (2) 是首选。我更关心的是一个好的、可维护的 API 设计。
我将通过SOLID原则来回答,让您轻松解决这个问题。
如果您认为每次引入新功能/行为时都会修改
IService
。因此,在这种情况下,您应该避免使界面太大。
相反,您可以遵循接口隔离原则,根据行为将它们拆分为单独的接口。
注意: 此外,您还确保该类仅通过此原则从接口实现所需的行为/方法,从而消除了为实现类中未使用的行为提供默认实现的开销。
这将确保您正确遵循 SOLID 原则以及良好的 API 设计。
您的代码应如下所示:
IInitService:
interface IinitService {
void init();
}
I关闭服务:
interface ICloseService {
void close();
}
我添加服务:
interface IAddService {
void add(AddArgs args);
}
我获取服务:
interface IGetService {
void get(GetArgs args);
}
ID删除服务:
interface IDeleteService {
void delete(DeleteArgs args);
}
现在,假设您要创建仅具有
add
行为的类。
public class AddServiceImpl implements IAddService, IInitService, ICloseService {
@Override
public void init() {
//.....
}
@Override
public void add(AddArgs args) {
//.....
}
@Override
public void close() {
//.....
}
}
这是相当容易维护的。