Sie werden einige Argumente über die beste Möglichkeit, dies zu tun, aber am Ende des Tages haben Sie zwei Möglichkeiten. Entweder Sie können das Modell die Informationen holen, die es von dem anderen Modell benötigt, oder Sie können veranlassen, dass der Controller die benötigten Informationen weitergibt.
Basierend auf dem, was ich gelesen habe, solange das Modell keine Controller-Logik oder View-Logik hat, sind Sie gut, so ist nichts falsch daran, das Modell über andere Modelle zu wissen. Andere haben jedoch argumentiert, dass der Code ein wenig einfacher zu dokumentieren ist, wenn der Controller die benötigten Informationen weitergibt, da Sie sehen können, dass das Modell Informationen von woanders benötigt. Am Ende des Tages sehe ich beide als gültig und die, die Sie verwenden, wird wahrscheinlich zu persönlichen Vorlieben kommen.
Entwurf - Controller liefert Daten
ModelOne
- Benutzer GetCurrentUser()
ModelTwo
- Artikel [] GetItems (Benutzer)
Snippet - Regler Proivdes Daten
Controller {
function doWork() {
User user = ModelOne.GetCurrentUser();
Items[] items = ModelTwo.GetItems(user);
}
}
Entwurf - Modell Ruft Daten
Mo Delone
- Benutzer GetCurrentUser()
ModelTwo
Snippet - Modell Ruft Daten
ModelTwo {
Items[] GetItems() {
User user = ModelOne.GetCurrentUser();
...
}
}
Controller {
function doWork() {
Items[] items = ModelTwo.GetItems();
}
}
Danke. Daher bevorzuge ich, dass das Modell Daten vom anderen Modell erhält. Der Grund ist: Veröffentlichen der Frage auf Stackoverflow Ich habe das Szenario vereinfacht. Im realen Szenario könnte das Modell auch andere Informationen aus anderen Modellen (z. B. ein anderes Modell, das Informationen über die Benutzerloyalitätsebene des aktuellen Benutzers besitzt) auf erweiterbare Weise benötigen. Daher bevorzuge ich die Zentralisierung der Logik in Model1.GetItems(), die alle Modelle verwendet, die zum Generieren der richtigen Elementliste erforderlich sind. – Stefano