01 结合DDD说明抽象类和接口的区别

vvEcho 2025-02-19 15:58:38
Categories: > Tags:

Java接口和抽象类的核心区别是什么?在DDD架构设计中,接口通常承担什么角色?请结合您订单管理系统中Shiro权限模块的设计举例说明

接口:定义行为契约,支持多实现,无状态,Java8+支持默认方法,适合跨层次的能力抽象(如权限校验接口)。
抽象类:提供部分实现,单继承,可包含成员变量,适合同类事物的共性提取(如权限校验的通用流程)

在DDD架构设计中,接口通常用于定义领域能力层,反腐层也叫门面层,基础设施层如存储库,由不同数据库实现等

Shiro权限模块设计举例
如在订单系统中,Shiro的典型应用

1
2
3
4
5
6
7
8
9
10
11
12
// 定义权限校验接口(领域层)
public interface OrderAccessControl {
boolean checkOrderEditPermission(Long orderId, User user);
}
// 实现类(基础设施层,依赖Shiro API)
public class ShiroOrderAccessControlImpl implements OrderAccessControl {
@Override
public boolean checkOrderEditPermission(Long orderId, User user) {
Subject subject = SecurityUtils.getSubject();
return subject.isPermitted("order:edit:" + orderId);
}
}

抽象类可封装通用逻辑,如日志记录或缓存:

1
2
3
4
5
public abstract class AbstractPermissionChecker {
protected void logPermissionCheck(String action) {
// 统一记录权限校验日志
}
}