【发布时间】:2023-04-04 18:17:01
【问题描述】:
我尽可能精简我的服务接口,通常它们是@FunctionalInterface。我尝试遵循那里的接口隔离原则。
如果我的服务实现共享大部分依赖项,那么我的服务实现实现多个接口是一种好习惯吗?还是应该为每个接口创建一个单独的实现?
// find the T scheduled between the given instants.
interface TaskPeriodFinder<T> {
List<T> find(Instant initial, Instant end);
}
// schedule a task to be execute in a given time.
interface TaskScheduler<T> {
void scheduleOn(T task, Instant scheduledOn);
}
// execute the scheduled task when the scheduledOn is reached.
interface TaskExecutor<T> {
void execute(T task);
}
@Service
class TaskService implements TaskScheduler<String>, TaskExecutor<>, TaskPeriodFinder<> {
private final TaskFinder taskFinder;
private final TaskCreator taskCreator;
public void scheduleOn(String task, Instant scheduledOn) {
// TODO
}
public void execute(String task) {
// TODO
}
public List<T> find(Instant initial, Instant end) {
// TODO
}
}
在我的例子中; TaskService 实现这两个接口是一个好习惯吗?还是我应该为每个接口设置一个单独的类?
【问题讨论】:
-
接口隔离原则对一个类实现多个接口没有问题。单一职责原则可能有问题,但这是一个不同的问题。
-
我根据他们的用户需求(其他依赖服务)设计接口,如果他们通常需要methodA()和methodB(),我会将这两个方法放在同一个接口中。关于它们的实现,如果接口实现需要相同的依赖项,我在实现这些服务接口时所做的就是在同一个类中实现它们。这是一个好的经验法则吗?现在我认为我没有像这样完成“单一责任原则”,我应该为每个接口创建一个类吗?
-
这不是一个简单的话题。我在 SOLID 上找到的样本非常简单。我希望在 SOLID 之后看到好的春季服务样本。关于这个主题有什么好的材料参考吗?
标签: java spring solid-principles