领域、基础设施和应用层一致性的固有问题

问题描述 投票:0回答:1

我陷入了困境。

我正在开发一个强大的系统,它被分成多个微服务。
我目前正在开发的一个简单的实时聊天。

但是,我认为自己无所作为 - 试图分析并获得最佳结果。

我有以下实体:

Channel
User

Channel
有很多
Users
,可以通过
Channel.AddUser
添加并存储在
Channel.Users
中。
在完美的情况下 -
Channel.Users
always包含与该
Users
相关的所有
Channel


现在,我遇到的问题是 - 根据 DDD,我的域应该尽可能纯粹并且对实现细节尽可能无知 - 只要我的
Channels
和关联的
Users
仍然存在,这是完全可以实现的内存。
但!一旦我实现了任何类型的持久存储 - 设计一个独立的、不受实现域影响的整个原则就会崩溃 - 所有这些都是因为我可以在没有
Channel
的情况下加载我的
Users
或仅使用其中的前 10 个等等 - 这可以影响诸如:验证、业务逻辑等。

如何处理这个问题 - 围绕特定“应用程序”(一般意义上,而不是分层)构建域是唯一的方法吗?

domain-driven-design
1个回答
0
投票

如何处理这个问题 - 围绕特定“应用程序”(一般意义上,而不是分层)构建域是唯一的方法吗?

仔细思考系统中真正的边界应该在哪里。

您通常需要深入考虑“频道有用户”是否是对两个实体之间的关系进行建模的最佳方式。

可能性包括:

  • 频道应该有用户集合。
  • 频道应该有用户标识符的集合,这些标识符指向存储在其他地方的用户
  • 用户应该有通道指针标识符(指向存储在其他地方的通道
  • 渠道和用户之间的关系不是渠道或用户的一部分,而是属于我们在这里没有考虑的第三件事(“订阅”是您领域中的一件事吗?)

用另一种方式表达:并非所有通过特定通道标识符访问的信息都一定是同一“聚合”的一部分。如果您正在考虑“延迟加载”信息,这通常表明存在(或至少存在)改进数据分区的机会。

与进行更改时一起使用哪些信息相比,用于访问信息的密钥不太重要。

© www.soinside.com 2019 - 2024. All rights reserved.