我按照一个示例应用程序一个数据库第一方法。 POCO类是通过t4模板生成的,它将具有从数据库中携带的标识属性。对于一些类,我在域实体使用,该ID的类型可以整型,字符串&的Guid。身份冲突库
我没有看到是字符串或GUID,我可以在域产生并传递到存储库ID的问题。在int的情况下,我也可以做到这一点,但我想利用SQL数据库的AUTOINCREMENT选项。
我的问题是:
谁的责任是产生实体身份。它是域还是存储库?
如何存储库和域之间进行身份的同步?例如,我可以为域中的客户创建一个1000的id,并要求存储库将其保存。当存储库保存时,新的标识可能是2000(AUTOINCREMENT选项设置新标识)。现在,这两个实体是不同的,如果域中的客户实体(假设它被缓存为未来的操作)与像部其他实体使用,它可能会导致在域中的问题。在具有1000的ID域缓存的实体(客户)将被保存在SQL数据存储的新实体。存储库不知道客户是缓存的还是新的。
要评论您的第一个答案,我从未遇到过用户喜欢的问题域,“我想要一串长长的随机但唯一的字符,以便我可以识别每个[实体]。”我的观点是Guids不需要在域中定义。如果跨越多个服务器或某种特性需要同步需求,则将域实体包装在处理此问题的基础结构对象中会更好。 但是,道具给你第二个问题的答案。说得好。我会高兴的。 –
用户通常根本不关心ID,关于Guid的好处是它可以由调用客户端提供,在这种情况下,它不需要等待来自服务器的响应来知道ID创建的实体。这在CQRS方案中很有用。另一个优点是在服务器提供ID的情况下,不需要等待数据库响应来知道该ID。无论哪种方式,身份证是一个技术问题。 – eulerfx
我同意这个ID是一个技术问题,那么为什么污染你的领域模型(这应该是独立于技术问题的),其ID不遵循你的无处不在的语言?如果没有这种不必要的烟雾,您提供的两个示例都可以轻松解决。 –