通过数据的完整性,我们的意思是 "这个数据被允许采取什么形状?","哪些方法可以被调用,在什么时候?","为了创建这个对象,需要哪些参数和预设条件?"?
方法需要保留一个对象的不变性。它们需要约束存储在对象中的状态,使其最终不会失效。
下面是一个使用Latitude类的例子。
import { ValueObject } from '../../../core/valueObject';
import { Result, TypedResult } from '../../../core/result';
export interface ILatitude {
value: number;
}
export class Latitude extends ValueObject<ILatitude> {
value: number;
private constructor (props: ILatitude) {
super(props);
this.value = props.value
}
// Factory method
// The latitude must be a number between -90 and 90
public static create (latitude: ILatitude) : TypedResult<Latitude> {
if (latitude.value < -90 || latitude.value > 90) {
return Result.typedFail<Latitude>("Latitude must be within -90 and 90")
}
return Result.typedOk<Latitude>(new Latitude(latitude))
}
}
在这个例子中,为了创建一个纬度对象,我们需要满足传递-90和90之间的数值这一不变性。
其他任何东西都不是有效的纬度。