Ich halte meinen Code gerne testbar und habe mich für die Dependency-Injection-Strategie für mein aktuelles MVC-Framework entschieden, die sich definitiv als eine großartige Möglichkeit erwiesen hat, lose gekoppelten Code, Testbarkeit und Modularität sicherzustellen.
Da ich jedoch weit davon entfernt bin, ein Meister in Designmustern zu sein, fällt es mir schwer, einen guten Weg zu finden, um meine Modelle so locker wie möglich von den Datenbank-Connector-Klassen zu koppeln.
Wie kann das gemacht werden?
Da ich zusammen mit dieser Frage keinen physischen Code angegeben habe, würde ich mich über einige Logik- / Codebeispiele oder Informationen freuen, die mich in eine Richtung weisen könnten, um das oben beschriebene Problem zu verstehen.
object-oriented
php
dependency-injection
Industriell
quelle
quelle
Antworten:
Eine Möglichkeit besteht darin, Ihre Modelle zu entwerfen, bevor Sie Ihre Datenbank entwerfen. Beim Entwerfen Ihrer Modelle liegt der Schwerpunkt auf der Erfassung der Geschäftslogik und der Bedeutungen innerhalb der Problemdomäne. Dies sollte auf eine Weise erfasst werden, die für das Unternehmen sinnvoll ist und mehr als nur Entitäten und Datenfelder umfasst. Einige Datenelemente werden von anderen interpretiert, andere hängen von anderen ab usw. Zusätzlich würden Sie diesem Modell jede grundlegende Logik hinzufügen, die Sie benötigen, z. B. wie ein Objekt intern reagiert, wenn ein bestimmtes Element auf einen bestimmten Wert festgelegt wird.
Es ist sehr wahrscheinlich, dass Sie am Ende etwas haben, das zu 90% mit der Art und Weise identisch ist, wie Sie die Daten beibehalten. Das ist gut. Es kann völlig identisch sein, ohne gekoppelt zu sein.
Beachten Sie auch, dass das Modellieren der Domäne in einem Nebel wahrer Unwissenheit über die Persistenz ein heiliger Gral für das Software-Design ist. Wenn du es schaffst, fantastisch. Wenn die Problemdomäne jedoch überhaupt von Bedeutung ist und eine gewisse Komplexität aufweist, ist es immer noch eine gute Idee, von Zeit zu Zeit von der Domänenmodellierung zurückzutreten, um eine Überprüfung der Datenpersistenz durchzuführen, um sicherzustellen, dass Sie nicht gemalt haben dich in eine Ecke.
Denken Sie nur an die tatsächlichen Rollen der verschiedenen Komponenten und lassen Sie diese Rollen beim Entwerfen getrennt. Fragen Sie sich bei einer bestimmten Entwurfsentscheidung, ob eine dieser Rollen verletzt wird:
quelle
Sie möchten zwei Dinge haben.
Ihre "Domain-Modelle", auch Datenentitäten genannt, repräsentieren die Entitäten Ihres Systems wie Benutzer, Beiträge, Produkte usw.
Verwendungscode
Dort haben Sie es, auf diese Weise erstellen Sie Domänenmodelle (Entities) und lassen MVC-Modelle die DB-Konnektivität und Datenmanipulation durchführen.
Wenn Sie sich fragen, was PPI ist, suchen Sie bei Google nach "PPI Framework".
Viel Glück bei Ihrer Suche.
Grüße, Paul Dragoonis.
quelle
Denken Sie daran, dass MVC in Smalltalk entstanden ist, das für alle Objekte automatisch persistiert. Das MVC-Muster schreibt also keine Lösung für die Trennung von Modell und Persistenz vor.
Ich bevorzuge die Bereitstellung eines "Repository" -Objekts, das weiß, wie Modellobjekte aus der Datenbank erstellt und Modellobjekte in der Datenbank gespeichert werden. Dann weiß das Modell nichts über Persistenz. Einige Benutzeraktionen müssen jedoch einen Speichervorgang auslösen, sodass der Controller wahrscheinlich über das Repository Bescheid weiß. Normalerweise verwende ich eine Form der Abhängigkeitsinjektion, um zu verhindern, dass der Controller mit dem Repository gekoppelt wird.
quelle