0

数据模型:

tTemplate (TemplateId int PK)
tPage (PageId int PK, TemplateId int FK)
tEmailMessage (EmailMessageId int PK, TemplateId int FK)

要求:

只有在没有依赖关系的情况下才允许删除模板。

TemplateService 负责删除模板:

新模板服务()。删除(我的模板);

Page 和 Email 模块依赖于 Template 模块,而后者又很高兴地不知道这些依赖关系。在某些设置中,页面或电子邮件模块将不存在。我将如何解决对底层数据模型的依赖?如何让 TemplateService 开始查询以了解是否可以删除该项目?

我对 EventBrokers 和 Message Queues 进行了一些研究,但看不到它们如何单独帮助我。我也看不到单独使用 .net 事件模型如何解决这个问题。

我并不是真的在寻找一种维护数据完整性的方法,而是一种允许服务间通信而不会导致不必要的服务依赖的方法。我可能有一个 PageService 的实现,可以在其中删除模板,并且可以通过将 tPage.TemplateId 设置为 null 来解决依赖关系。在其他实现中,我可能想要创建级联删除。

4

1 回答 1

1

这就是您的后备存储应该实现参照完整性的原因。在可能的情况下,您的模型将实现相同的功能,但只有在没有引用任何内容的情况下,删除才会起作用。

此外,我建议不要在尝试删除之前检查所有数据,因为您最终可能会遇到可能导致问题的竞争条件。从效率的角度来看,您可以从一开始就简单地实现级联删除,假设您的顶级对象总是有子行。

.Net 模型仅在您拥有所有数据时才保证引用完整性,否则只会尝试删除,而不是保证。

于 2009-02-11T11:52:26.780 回答