DCI(数据,上下文,交互)持久化示例

5
我看到的所有DCI例子似乎都是基于对象作为信息的最终持有者,并且交易边界在方法内定义。
我想看到一个持久应用程序的例子,其中存在某种持久层,即在基础持久性存储的重复对象副本中可能会有更改,而对象的更改是将稍后持久化的副本进行更改。 DCI是否适用于该模型?

任何可以使用面向对象实现的应用程序都可以使用DCI实现。DCI是面向对象的,但强制执行如何进行面向对象编程的约束。也就是说,在持久层中没有对象,也没有“对象的副本”,而是在持久层中有类和表示相同信息的多个对象。DCI不关心类(它们是语言特性),同步不同表示的相同内容是一个与所有接受副作用的范式无关的问题(并且在它们中可以通过各种方式解决)。 - Rune FS
3个回答

3
DCI是一种范式,就像您可以使用任何其他具有持久性的范式构建应用程序一样(不包括纯FP,因为持久性是副作用),所以您也可以使用DCI。 DCI示例中没有提到它,因为它不是该范式关注的内容,也与理解该范式无关。(话虽如此,你并不是第一个问这个问题的人,我相信你也不会是最后一个。)
持久化数据的关注点总体上与DCI无关。DCI试图将设计分成两部分:
  • 系统是什么
  • 系统做了什么
第一个是领域模型,第二个是系统的功能。当然,“系统是什么”是保存在内存、平面文件还是DB中很重要,但是这是一个单独的关注点,并且通常使用受限制的面向对象实现。

你说的有道理,但我认为它经常被提起的原因是例如在Artima文章中,明确使用了事务边界。这意味着与持久性有关的某些内容,因此让人们产生了疑问。 - nilskp
@nilskp同意,这就是限制OO的地方。为了简洁起见,大多数DCI示例都省略了受限制的OO部分。和一些示例不同,我使用DCI的层次较低,正如Guge在评论中提到的那样,我很可能会在持久化“层”中使用DCI。 - Rune FS

2

DCI并不涉及持久化问题。


这是什么意思?这意味着它是一个正交关注点,即DCI处于该范围之外,因为它并不重要?还是这是一个有效的关注点,只是DCI没有涉及到它? - nilskp
2
持久性始终是一个有效的问题,但DCI更像是一种范例而不是一种架构。因此,我认为它是正交的。DCI在数据方面有很多要说的话,但并不涉及数据来自哪里或去了哪里。我想你甚至可以在持久层中使用DCI,因为将数据持久化是一个用例,该用例从用户从菜单选择“文件/保存”开始。 - Guge

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接