Разрешить зависимости от модели данных без каскадного удаления - PullRequest
0 голосов
/ 11 февраля 2009

Модель данных:

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

Требования:

Удаление шаблона разрешается только в том случае, если от него нет зависимостей.

TemplateService отвечает за удаление шаблонов:

new TemplateService (). Delete (myTemplate);

Модули Page и Email зависят от модуля Template, который, к счастью, не знает об этих зависимостях. В некоторых настройках модуль Page или Email не будет присутствовать. Как бы я разрешил зависимость от базовой модели данных? Как получить TemplateService для начала запроса, чтобы выяснить, можно ли удалить элемент?

Я провел некоторое исследование EventBrokers и Message Queues, но не понимаю, как они могут помочь мне одному. Я также не вижу, как это может решить только использование модели событий .net.

Я на самом деле не ищу способ поддержания целостности данных, а способ обеспечения межсервисного взаимодействия без возникновения нежелательных служебных зависимостей. У меня может быть реализация PageService, где удаление шаблона будет нормальным, и где зависимость будет разрешена путем установки значения tPage.TemplateId равным нулю. В других реализациях я могу захотеть создать каскадное удаление.

1 Ответ

1 голос
/ 11 февраля 2009

Это причина того, что ваше резервное хранилище должно реализовать ссылочную целостность. Там, где это возможно, ваша модель будет реализовывать то же самое, но удаления будут работать только в том случае, если на них нет ссылок.

Кроме того, я бы рекомендовал не проверять все данные перед попыткой удаления, поскольку вы можете столкнуться с состоянием гонки, которое может вызвать у вас проблемы. С точки зрения эффективности, вы могли бы просто реализовать каскадное удаление с самого начала, предполагая, что всегда будут дочерние строки для вашего объекта верхнего уровня.

Модель .Net гарантирует ссылочную целостность только в том случае, если у вас есть все данные, в противном случае удаление может быть только попытано, а не гарантировано.

...