Я выполнял методологию DDD в основном для этого проекта, поэтому, как и любой DDD'er, я сначала создал классы модели домена. Я намерен использовать эти POCO как мои объекты LINQ-to-SQL (да, они не чистые POCO, но я в порядке). Я начал создавать схему базы данных и внешний XML-файл сопоставления, но у меня возникают некоторые проблемы с моделированием связей и ассоциаций сущностей.Использует ли наследование таблицы допустимый способ избежать использования таблицы соединений?
Артефакт представляет собой документ. Артефакты могут быть связаны либо с задачей, либо с случаем. Субъект Дела выглядит следующим образом:
public class Case
{
private EntitySet<Artifact> _Artifacts;
public IList<Artifact> Artifacts
{
get
{
return _Artifacts;
}
set
{
_Artifacts.Assign(value);
}
}
.
.
.
}
Поскольку артефакт может быть связан либо с футляром, или задачами, я имею возможность использовать наследование от класса артефакта для создания CaseArtifact и TaskArtifact производных классов. Единственное различие между двумя классами, однако, было бы наличием поля Case или поля Task. В базе данных, конечно, у меня будет одна таблица, Артефакт, с полем дискриминатора типа и полями CaseId и TaskId.
Вопрос: является ли это приемлемым подходом к решению этой проблемы или создаст таблицу объединений для каждой ассоциации (2 новых таблицы, всего), чтобы быть лучшим подходом?
так что вы думаете, что дополнительная сложность иметь две дополнительные объединения таблиц меньше, чем сложность использования ИППП?Поскольку я использую L2S, это означало бы, что у меня бы был EntitySet в моих классах, вместо прямой ссылки, правильно? –
См. Мое редактирование. Обычно у меня есть модель OO, которая не имитирует базу данных. Не зная достаточно, у меня, вероятно, был бы либо Artifact.Case, либо Artifact.Task действителен (XOR) или имеет два класса CaseArtifact с .Case и TaskArtifact с .Task и Case.Artifacts - это совокупность всех Артефактов, связанных с Кейсом и Task.Artifacts - это совокупность всех Артефактов, связанных с Задачей. –
Вы поднимаете некоторые очень хорошие моменты в своем редактировании. Предоставление богатого API является одной из основных целей моего дизайна. Освобождение некоторое время, прежде чем Duke Nukem Forever также очень важен. Я решил, что мне придется сделать некоторые компромиссы для моей модели домена, чтобы «заставить ее работать» с L2S. Результирующая модель домена ближе, чем к схеме БД, чем я особенно забочусь, но, надеюсь, все еще OO достаточно, чтобы разоблачить богатый API. Я пошел с таблицами соединений, как было предложено, добавив их в другую папку проекта, чтобы отделить их от «реальных» объектов домена. –