关于实体与值对象的问题
在我理解,一个领域对象是实体对象还是值对象,主要是根据应用场景来决定的。
那假如说在一个系统中,有一个领域对象在某一个应用场景中属于值对象的范畴,但是在另一个场景中却属于实体对象,那么这个对象应该如何设计?
用现实生活中的例子来说明吧:
我们平时买东西都是用人民币来支付,这个时候,不管是一张一百块的,还是2张五十的或者是十张十块的,它们是等值的,我认为这个时候就相当于系统中的值对象。但是我们知道,每张人民币又都是不一样的,因为每张人民币都有自己唯一的编号还有印刷年份,生活中就有人喜欢收集一些特殊编号的人民币,这个时候的人民币就不能用值对象的方式来表示,只能以实体的方式出现。
那么请问,系统中如果出现这样的需求,那应该如何设计像人民币这类的对象。
我们借鉴dddexample里面的例子。
首先设计两个接口:
public interface Entity<T> {
public boolean samePrimaryKeyAs(T other);
}
public interface ValueObject<T> {
public boolean sameValueAs(T other);
}
那像这类的领域对象是要实现这两个接口呢?还是只实现Entity接口,然后在充当值对象的时候调用equals方法?