DDD要求领域模型类不包含数据库操作业务逻辑应集中于Entity等类中数据读写须经应用服务协调仓储仓储接口仅返回领域对象避免基础设施泄漏。领域模型类里别直接写数据库操作DDD 的核心是让业务逻辑集中在 Entity、ValueObject、AggregateRoot 这些类里而不是混进 EF Core 的 DbContext 或仓储实现。一旦你在 Order 类里调用 _context.SaveChanges()就等于把持久化细节泄漏进领域层后续换数据库或加事件溯源会非常痛苦。领域实体只暴露业务行为方法比如 Order.Confirm()、Order.AddLineItem()内部只做状态校验和业务规则执行所有数据读写必须经由应用服务Application Service协调再委托给仓储IRepositoryOrder或领域事件处理器EF Core 的 DbSetOrder 不能出现在领域项目中——领域项目应只引用 .NET Standard 库不依赖任何 ORM仓储接口定义要严格遵循“仅返回领域对象”原则仓储不是数据访问层的包装而是领域对“已存在聚合”的抽象。如果 IOrderRepository.FindByCustomerId() 返回的是 IQueryableOrder 或 OrderDto说明它已经越界了。接口方法只能返回 Order、IEnumerableOrder、OptionOrder 这类纯领域类型绝不能暴露 DbSet、IQueryable、DataRow 等基础设施类型分页、排序、过滤等非领域需求应通过 Specification 模式封装例如 new OrderByStatusAndDateSpec(OrderStatus.Confirmed, DateTime.Today)再由仓储实现去翻译成 SQL避免在仓储接口里塞太多查询方法宁可多建几个细粒度接口如 IOrderQueryService保持仓储专注“按 ID 加载/保存聚合”应用服务里别做领域逻辑判断应用服务Application Service本质是用例入口职责是编排取数据 → 调领域对象 → 存结果 → 发事件。如果里面出现 if (order.Total 1000) { ... } 这类判断说明领域规则被抽离了。 VWO 一个A/B测试工具