与外部提供商同步数据库的模式或设计? (最佳实践)

时间:2011-03-09 08:35:28

标签: c# .net

需要你的建议!我只是出于某种伪代码/想法,走向强大可靠的路。也许存在一个有用的模式用于此目的?

void AddDevice(string itemId);

我有一些方法的接口(上面是一个)。在实现接口的新类中,涉及外部提供程序,需要在类中通知更新。

类本身是获取/设置sql server数据库的信息。必须将一些(并非所有)信息推送到外部提供商。

这给了我两个场景(我请求帮助)

  1. WriteOnlytoDatabase = true / false 我想在两种情况下使用相同的方法,而不使用方法bool参数。那可能吗?委托人可以用来在差异之间切换吗?请记住这是一个界面(GUI与之对话)。

  2. 两次转移,如何跟踪错误 因为我们进行了两次传输(数据库,外部提供程序),所以可能会出现一个错误,导致其中一个或其如果外部提供程序出错,我会想到某种“撤消操作队列”来处理..

  3. 欢迎提出建议.. 这可以通过各种方式解决,但有或多或少有好的设计:)

      

    [下面马蒂亚斯的回复是错误的   在我编辑问题之前]

1 个答案:

答案 0 :(得分:0)

首先,我要指出的事实是,市场或开源社区中可能存在一些可用的同步机制,可以在您的代码之外为您完成。如果是这种情况,我建议我不会实现自己的同步这些数据的方式。我更愿意让这样的工具为我做。

也许这不是您的情况,您的数据无法与标准或已知工具同步,我们需要考虑另一种解决方案。

我相信某个实体不负责在另一个存储中与自身同步。这应该是业务和存储之间的层的任务:数据层。

对数据的业务访问,没有任何检索位置的详细信息。它只是获取或更改业务对象的状态,或将其从商店中删除。

在某些情况下,业务需要一些像“ActionKind”这样的参数 - 枚举 - 而且,由于业务依赖于某些数据访问层,因此某些代码会依赖于“ActionKind”。

这个“ActionKind”会让数据访问层选择“如何以及在何处存储数据”的实现。

当对某个底层存储设备进行某些更改时,该数据访问层将具有一些“事件”或“触发器”,并且某些处理程序将设法同步所有其他存储中的数据。 / p>

“event”或“trigger”处理程序将直接在代码(硬编码)中实现,或者通过某些接口实现,例如“IDataSynchronizer”(选择您自己的标识符,它只是一个示例),具有“Synchronize”方法,将在任何存储中更改某些数据时调用。

我相信使用像这样的方法你可以减少同步问题,你不需要关心“第一个设备是否有数据,第二个没有,所以,我需要检查等等...... “! :)