将域和应用程序逻辑连接到 UI 中的实体



首先,我想为我的英语感到抱歉。我正在学习领域驱动的设计,并尝试在我正在处理的应用程序中实现一些概念。我的任务并不是那么复杂,可以在所有级别上完全实现 DDD,但我真的很喜欢它的原则和核心思想,并尝试使用它。

假设应用程序正在销售书籍。所以我有一个 Book 实体和 BooksCollection 或 BooksRepository。我正在前端工作,它的集合或更新来自服务器。我想在由BookCard组成的BooksList中的BooksScreen上表示它。第一次调用时,请按该卡,例如 selectBook,这会更改集合中的 selectedBookId,第二次调用会将用户导航到"书籍详细信息"屏幕,其中表示所选书籍的数据,用户可以执行一些与域逻辑相关的操作。

第一个问题是我在哪里放置该 BooksCollection 的加载状态并根据更改它的操作?据我了解,加载状态不是域逻辑,它不是像"待办事项完成"之类的实体状态。但是我需要在集合更新时在UI列表中显示加载指示器,分别显示加载错误和成功错误。

第二个是我在哪里为单本书放置相同的加载状态? 我将其分开,因为我可能会将该状态存储在一些与应用程序相关的类中,例如"BooksScreenState"或名称不那么愚蠢的东西。但是,如果我决定在 UI 中显示每个特定卡的状态,例如该特定卡加载失败怎么办。或者我在应用程序中有一个用户,他的数据可以加载,他可以授权或不授权等等。

因此,我可以将其总结为"如何连接域和应用程序逻辑以呈现UI"。

一个有趣的问题。我通常不认为将 DDD 应用于 UI 级别,因为在大多数情况下,UI 并没有充满业务规则,还因为我主要使用 reactjs,而 UI 框架通常非常规范,并且不允许太多的灵活性。

回答你的问题:如果你确实想在你的UI中获得"加载"状态(这是使用DDD设计的),它必须附加到"View"对象或"视图"的某种表示形式;因为这更适合UL(无处不在的语言)。想想你在问题的一小段中是如何描述它的:

但是,如果我决定在UI中显示每个特定卡的状态怎么办

这意味着您的卡是一个对象(实体或值对象),具有可枚举的加载、加载、错误状态。您可以在 UI 中对该对象进行排队,以显示该字段的所需表示形式。

因此,您的两个问题基本上都有相同的答案。由于您正在加载 UI,因此您的状态仅与 UI 对象相关,而与域模型中的实体(如后端表示的"书籍")无关。即使您有"书籍"的前端表示形式(例如在javascript中),在视图层的视图对象中具有加载状态仍然更有意义。 请注意,此答案有一些简化/灵活性,因为您的设计具有包含书籍的聚合视图也是有效的。这些 Book 对象可能具有"加载"状态。不过,所有这些仍然仅限于UI层,这样的聚合及其特定设计将取决于UI框架允许的灵活性。

最新更新