2

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

我目前在跟踪对我的 Product 实体的更改时遇到了一些麻烦。问题是,产品部分由 SQL Azure 中的数据构建,部分由 Azure 表存储中的数据构建。如果某些属性发生了变化,我将需要同时坚持这两个,其他的只改变一个。

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

    public void AddPrice(Price price)

Product 实体上的方法必须持久化到 SQL Azure,才会对一系列价格进行计算,并将结果保存到 Azure 表存储。

你会如何解决这个问题?

想法:

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

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

4

2 回答 2

1

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

将对一系列价格进行计算

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

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

于 2012-05-23T08:42:49.880 回答
0

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

HTH。

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

于 2012-05-23T05:55:46.400 回答