In den meisten Fällen neige ich dazu, Tabellen auf Entitäten abzubilden, aber das ist keine feste Regel. Manchmal gibt es Fälle, in denen das Repository für eine bestimmte Entität besser geeignet ist, sich mit den allgemeinen Belangen rund um eine bestimmte Entität zu befassen, was bedeutet, dass es sich infolgedessen mit anderen Tabellen befasst, ohne dass diese Tabellen speziell als Entitäten existieren müssen.
Was ich niemals tun (außer in sehr spezifischen geplanten Fällen, in denen die abhängigen Daten IMMER mit der Entität abgerufen werden müssen), ist das Festlegen einer Entität oder einer Sammlung von Entitäten als Eigenschaft einer anderen Entität. Stattdessen wird diese Entität entweder über ihre ID auffindbar sein, die entweder eine Eigenschaft der übergeordneten Entität ist oder über das zugehörige Repository in Bezug auf die übergeordnete Entität auffindbar sein wird.
In Fällen, in denen ich die untergeordnete Entität oder Entitäten einer anderen Entität zusammenfassen muss, verwende ich eine "info"-Helferklasse, um alle erforderlichen Daten zusammenzufassen. Wenn ich zum Beispiel eine Entitätsklasse habe Widget
und es hat eine Sammlung von Kind Part
Objekte, dann würde ich eine WidgetInfo
Klasse, die die Widget
Instanz als eine Eigenschaft und eine Sammlung von Part
Objekte als die andere Eigenschaft.
Auf diese Weise bleiben alle Entitätsklassen so leichtgewichtig wie möglich und gehen nie davon aus, dass abhängige Daten geladen werden müssen. Außerdem wird das Repository-Modell sauber gehalten, ohne dass Sie in ein chaotisches ORM-Territorium gezwungen werden, was im Allgemeinen der Fall ist, wenn Sie Kindobjektsammlungen auf einer Entitätsklasse erstellen. Wenn Sie das tun ohne ORM, dann enden Sie mit dem chaotischen Problem, wann die Kinder geladen werden oder nicht, und wann angenommen werden soll, dass die Kinder geladen wurden oder nicht.