我一直在阅读很多关于 DDD 的文章,并注意到大多数人在持久化到数据库时都使用 GUID 作为他们的 ID。他们说 GUID 可以很好地扩展,并且在可扩展性方面,自动递增 ID 是一个很大的禁忌。
我现在很困惑是使用GUID
还是auto-increment
.
基本上域是关于membership system (binary tree). (tracking of register members)
第一个要求是我们应该有一些可以在系统中唯一标识它们的东西(我们称之为Account No.
7digit)。
然后 newMembers
可以被另一个注册Member
。我们称之为推荐。
现在我打算做的是将MemberId
GUID 类型作为 DomainObject Id,它用作将用于连接的主键、外键(在 Referral 上,referer_id 将是 GUID MemberId
)。AccountNo
将是一个自动增量列,或者它可能会通过 MAX() + 1 从存储库中获取。主要用于系统和链接中的搜索功能。
DomainObject 的 ID 是否应该对系统用户隐藏,因为它只是一个技术实现?
两者结合好吗?GUID 作为数据库中的 row_id(代理键)。和(自然键)的自动增量?
从构造函数中排除 是否可以,AccountNo
因为无论如何它都会自动递增?是否需要强制执行不变量?那么从存储库中获取下一个 ID 是要走的路并包含AccountNo
在构造函数中吗?
我是否应该坚持使用 Auto-Increment ID 而忘记 GUID,删除MemberId
并让其AccountNo
成为 DomainObject 的 ID?
笔记:
我不会建立某种下一个 Facebook。
我只想练习 DDD 的战术方面,以了解如何在了解其优点和缺点的情况下做出艰难的架构决策。
我只是想练习 DDD 的战略方面,以了解如何在了解其优点和缺点及其实施的情况下做出艰难的架构决策。
如果我们将使用会员注册制作 3 个场景:
- 第一种情况:会员注册每分钟发生一次。
- 第二种情况:会员注册每小时发生一次。
- 第三种情况:会员注册每天最多发生 5 次。
它将如何影响决策?
技术栈:
- ASP MVC 5
- 数据库服务器 2014
- C#
- 简洁的 ORM