DDD und MVC: Unterschied zwischen 'Model' und 'Entity'

Ich bin ernsthaft verwirrt über das Konzept des 'Modells' in MVC. In den meisten heute existierenden Frameworks befindet sich das Modell zwischen dem Controller und der Datenbank, und das Modell verhält sich fast wie eine Datenbankabstraktionsschicht. Das Konzept des 'Fat Model Skinny Controllers' geht verloren, da der Controller immer mehr Logik ausführt.

ei DDD gibt es auch das Konzept einer Domänenentität, die eine eindeutige Identität hat. Nach meinem Verständnis ist ein Benutzer ein gutes Beispiel für eine Entität (beispielsweise eine eindeutige Benutzer-ID). Die Entität hat einen Lebenszyklus - ihre Werte können sich im Verlauf der Aktion ändern - und wird dann gespeichert oder verworfen.

Die Entität, die ich oben beschreibe, ist das, was ich dachte, dass Model in MVC sein sollte? Wie off-base bin ich?

Um die Dinge übersichtlicher zu gestalten, werfen Sie andere Muster ein, wie beispielsweise das Repository-Muster (möglicherweise wird dort ein Dienst eingefügt). Es ist ziemlich klar, wie das Repository mit einer Entität interagieren würde - wie funktioniert es mit einem Modell?

Controller können mehrere Modelle haben, was den Anschein erweckt, dass ein Modell weniger eine "Datenbanktabelle" als eine eindeutige Entität ist.

AKTUALISIEREN In diesem Beitrag Das Modell wird als etwas mit Wissen beschrieben und kann singulär oder eine Ansammlung von Objekten sein. Es klingt also eher so, als ob eine Entität und ein Modell mehr oder weniger dasselbe sind. Das Modell ist ein umfassender Begriff, bei dem eine Entität spezifischer ist. Ein Wertobjekt wäre auch ein Modell. Zumindest in Bezug auf MVC. Könnte sein??

Also, in sehr groben Zügen, was ist besser?

No "Model" wirklich ...

class MyController {
    public function index() {
        $repo = new PostRepository();
        $posts = $repo->findAllByDateRange('within 30 days');
        foreach($posts as $post) {
            echo $post->Author;
        }
    }
}

Oder das, das ein Modell als DAO hat?

class MyController {
    public function index() {
        $model = new PostModel();
        // maybe this returns a PostRepository?
        $posts = $model->findAllByDateRange('within 30 days');
        while($posts->getNext()) {
            echo $posts->Post->Author;
        }
    }
}

Beide diese Beispiele haben nicht einmal das getan, was ich oben beschrieben habe. Ich bin offensichtlich verloren. Irgendeine Eingabe?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage