请参阅此链接here。作者指出:“埃里克在他的书中指出,服务应该是无国籍的,虽然我们已经谈过这个问题而且他不再认为这是必要的 - 尽管你能做到这一点很好”
假设我有一个具有实例变量的域服务(从不变异)。我将如何处理平等问题。例如:
如果两个实体具有相同的ID
如果所有成员具有相同的值
我是否应该使用从未变异的实例变量为域服务实现/覆盖.Equals()
和.GetHashcode()
?
此外,如果域服务是无状态的,那么我猜不需要一个相等的方法吗?
答案 0 :(得分:0)
我是否应该使用从未变异的实例变量为域服务实现/覆盖.Equals()和.GetHashcode()?
好吧,Fowler还指出in the same article在给定的执行上下文中通常只有一个域服务实例。
服务对象通常通过使用全局变量,类字段(罗伯特马丁术语中的单节点)或单例来实现。当然它们通常是单数的,因为你只有它们中的一个,但你如何做到这一点更加多样化。通常,奇点在处理上下文中 - 因此在多线程环境中每个线程一个。
域代码关注域服务的身份是非常不寻常的 - 这表明域对底层状态本身有一些兴趣,这通常会在代码中更明确地表达(即,通过为域代码提供与所述状态的更直接的连接。)
因此,我非常怀疑在域模型使用的接口中是否出现了对等式检查的模拟(sameServiceAs?)。
域服务接口的给定实现可能需要.Equals
或.GetHashCode
来支持基础架构问题,我想 - 再次,考虑到通常只有其中一个,它有点奇怪