【发布时间】:2018-01-22 12:41:15
【问题描述】:
请查看此链接here。作者指出:“Eric 在他的书中指出,服务应该是无状态的,尽管我们已经讨论过这一点,但他不再认为这是必要的——尽管如果你能做到,那就太好了”
假设我有一个具有实例变量(从不变异)的域服务。我将如何处理平等。例如:
如果两个实体具有相同的 ID,则它们是相等的
如果所有成员的值相同,则两个值对象相等
我是否应该为域服务实现/覆盖.Equals() 和.GetHashcode(),实例变量从不发生变化?
另外,如果域服务是无状态的,那么我想就不需要相等方法了吗?
【问题讨论】:
-
你能解释一下你得到相同服务的两个不同实例的情况吗?为什么要比较它们是否相等?
-
@Euphoric,我想不出一个。如果域服务没有实例变量,那么它们只能通过引用进行比较(意味着不需要 .equals)。对吗?
-
我认为域服务最多应该是线程本地(或请求本地)的单例。因此,实际上不可能在同一段代码中拥有单个服务的多个实例。所以他们对平等的定义是没有意义的。
-
@w0051977 这些实例变量是什么?他们是私人的吗?你能让他们
readonly吗?既然它们永远不会发生变异,你凭什么说服务是有状态的? -
服务本质上需要是无状态的,因为没有需要持久化的状态。但是,您可以具有瞬态只读状态,这没关系。任何需要在使用之间保存业务数据的东西都应该是一个值对象(通常作为涉及实体的聚合的一部分)