当前位置: 首页 > 知识库问答 >
问题:

spring服务中的界面隔离原则

聂溪叠
2023-03-14

我尽可能地保持我的服务接口,通常它们是@functionalinterface。我试图遵循界面分离原则。

如果我的服务实现实现多个接口,如果它们共享其中的大部分依赖关系,这是一个好的实践吗?或者我应该为每个接口创建一个单独的实现?

interface TaskScheduler<T> {
   void scheduleOn(T task, Instant scheduledOn);
}

interface TaskExecutor<T> {
   void execute(T task);
}

@Service 
class TaskService implements TaskScheduler<String>, TaskExecutor<String> {
   private final TaskFinder taskFinder;
   private final TaskCreator taskCreator;

   public void scheduleOn(String task, Instant scheduledOn) {
      // TODO
   }
   public void execute(String task) {
      // TODO
   }   
}

在我的例子中;TaskService实现这两个接口是一个好的做法吗?或者我应该为每个接口有一个单独的类?

共有1个答案

齐浩淼
2023-03-14

似乎每个TaskScheduler也可以被说成是TaskExecutor,如果您要给它一个instant.now()的时间。

因此,我不喜欢您的设计的一点是,如果我有TaskScheduler的实例,我不能将它传递给需要TaskExecutor的东西,尽管它确实应该能够实现该功能。

你可以这样修的。它甚至可以向后兼容你已经拥有的东西。任何现有的TaskScheduler甚至不必知道或关心它们现在是TaskExecutor,但它们确实是。

interface TaskExecutor<T> {
    void execute(T task);
}

interface TaskScheduler<T> extends TaskExecutor<T> {
    void scheduleOn(T task, Instant scheduledOn);

    @Override
    default void execute(T task) {
        scheduleOn(task, Instant.now());
    }
}
 类似资料:
  • MSDN 描述其 OLEDB 提供程序的 JET 事务隔离,如下所示: Jet支持事务中的五级嵌套。事务唯一支持的模式是提交读取。设置较低级别的事务分离意味着提交读取。设置更高的级别将导致StartTransaction失败。 Jet仅支持单相提交。 MSDN对的描述如下: 指定读取数据时保持共享锁,以避免脏读,但可以在事务结束前更改数据,从而导致不可重复读取或幻像数据。此选项是SQL服务器默认值

  • 本文向大家介绍说一下 spring 的事务隔离?相关面试题,主要包含被问及说一下 spring 的事务隔离?时的应答技巧和注意事项,需要的朋友参考一下 spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致: ISOLATION_DEFAULT:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么; ISOLATI

  • 简介 接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明没有客户(client)应该被迫依赖于它不使用方法。接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更

  • 本文向大家介绍MySQL事务及Spring隔离级别实现原理详解,包括了MySQL事务及Spring隔离级别实现原理详解的使用技巧和注意事项,需要的朋友参考一下 1、事务具有ACID特性 原子性(atomicity):一个事务被事务不可分割的最小工作单元,要么全部提交,要么全部失败回滚。 一致性(consistency):数据库总是从一致性状态到另一个一致性状态,它只包含成功事务提交的结果 隔离型(

  • 问题内容: 也许有人可以帮助我解决Spring(3.1)/ Postgresql(8.4.11)中的事务性问题 我的交易服务如下: Spring配置Webapp包含: 让我们说一个请求“ x”和一个请求“ y”同时执行并到达注释“比较”(方法insertObject)。然后,允许他们两个都插入一个新对象,并提交他们的事务。 为什么我没有RollbackException?据我所知,这就是可序列化等

  • 接口隔离原则定义如下: 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。 根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。这里的“接口”