域驱动设计中来自多个源的更改跟踪实体

本文关键字:实体 跟踪 | 更新日期: 2023-09-27 18:34:54

我目前正在开发一个相当大的Web应用程序,并且正在使用域驱动设计。

我目前在跟踪产品实体的更改时遇到了一些问题。问题是,产品部分由SQL Azure中的数据构建,部分由Azure表存储中的数据构建。 如果某些属性发生更改,我将需要保留两个属性,其他更改仅保留一个。

因此,我无法使用 NHibernate 或实体框架来跟踪更改。例如,价格参数在

    public void AddPrice(Price price)

产品实体上的方法必须保存到 SQL Azure,将对一系列价格进行计算,并将结果保存到 Azure 表存储中。

你会如何解决这个问题?

思潮:

1(我考虑过基于Castle.DynamicProxy实现我自己的更改跟踪器,但这似乎相当乏味。

2( 在域实体内部实现事件。这不是一件好事。

域驱动设计中来自多个源的更改跟踪实体

将一个实体分散在多个持久存储区中可能不是一个好主意。更准确地说,这可能意味着它不是同一个实体,可以分成更小、设计更精确的部分。

将对一系列价格进行计算

您确定这些计算会影响产品实体,并且应由产品存储库中使用的同一 NHibernate/EF 会话处理吗?由于它们必须存储在其他地方,它们不是在无处不在的语言中构成一个第一类概念,从而产生一个具有自己的持久逻辑的独立实体吗?

请参阅 http://ayende.com/blog/153699/ask-ayende-repository-for-abstracting-multiple-data-sources

ORM是做什么的?他们获取用于将对象还原到当前状态的数据副本,就在他们向您提供对该对象的引用之前。当行为已应用于对象并且您要求保留它时,ORM 会将其数据副本与对象内部的当前数据进行比较,并相应地刷新更改。为什么不做同样的事情呢?唯一的区别是,并非所有检测到的更改都将刷新到同一数据存储。

呵。

顺便说一句,这里有并发吗?