Java接口设计核心是分离契约与实现,命名用名词性复数如UserService,方法用动词开头如selectUserById,参数返回值需DTO封装与Result包装,禁用泛化动词和静态业务方法。

在 Java 中,用 interface 定义业务逻辑行为规范,核心是把“做什么”和“怎么做”彻底分开——接口只声明契约,不涉及实现细节。它不是技术容器,而是团队协作的语言、系统演进的锚点。
接口命名要体现业务意图,而非技术动作
接口名应为名词性复数,表达领域边界,比如 UserService、OrderRepository、PaymentGateway。避免使用 IUserService 或 UserInterface 这类冗余前缀或后缀。名称一旦确定,就代表一个稳定的业务能力域,后续所有实现都必须围绕这个语义展开。
方法签名需明确动词+业务对象,拒绝模糊抽象
每个方法必须用动词开头,直指操作本质:
-
User selectUserById(Long id)—— 查询动作清晰,参数语义明确 -
void createUser(User user)—— 创建动作无歧义,入参封装为 DTO -
boolean cancelOrder(String orderId)—— 返回布尔值表示状态结果,符合业务直觉
禁用 doSomething()、handle()、process() 等泛化动词;也不用 getXXX() 作为统一前缀(易与 getter 混淆),推荐 select/find/load 区分语义。
参数与返回值必须结构化、可校验、有边界
所有入参禁止裸传原始类型堆砌,必须封装为明确语义的 DTO,例如 UserQuery、OrderCreateRequest。DTO 内部字段需标注 @NotNull、@Min、@Pattern 等校验注解,并在接口层强制触发校验。
返回值统一包装为泛型结果体,如:
public interface Result成功时 code=200,失败时返回具体错误码(如 4001 表示用户不存在),不抛异常、不透出堆栈。
约束实现方式,保障多实现兼容性
在接口中可通过默认方法提供通用逻辑(如日志打点、参数预处理),但不得替代核心业务;所有抽象方法必须声明为 public(即使省略修饰符,Java 也默认为 public);禁止在接口中定义静态方法来封装业务规则(应移至工具类或领域服务)。实现类命名统一为 XXXServiceImpl 或 XXXJdbcRepository,让调用方一眼识别其实现载体。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











