我正在使用域驱动设计开发应用程序。我一直在使用的模式之一是存储库模式。为了简单起见,假设我有以下类和接口。
Car - 代表汽车领域概念的领域类。
public class Car {
public int Id {get;private set;}
public string SomeUniqueCode {get;private set;}
}
ICarRepository - 用于添加、删除或保存对 Car 对象的更改的接口。
public interface ICarRepository{
Car AddCar(Car c);
void DeleteCar(Car c);
}
我的问题是,如何检查数据库中所有 Car 对象中 SomeUniqueCode 属性的唯一性?该属性在对象生命周期中的任何时候都由用户更改(不是自动生成的)。当然,一种解决方案是将唯一键放入数据库中,但这不是 DDD 的原则。我见过用于验证单个对象的规范模式。该模式将如何应用于一组 Car 对象?
Specification 类(我们称之为 CheckUniqueCarSpecification)访问 ICarRepository 是否合法?