01 结合DDD说明抽象类和接口的区别
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); }
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) { } }
|