MVC Architektur Frage

  • Hallo Leute,

    Ich hab ne Frage bezüglich sinnvoller MVC-Architektur. Das ganze ist in PHP umgesetzt, ich verwende das Kohana-Framework.

    Folgende Situation:
    Daten aus einem per Formular hochgeladenen CSV-File sollen in eine Datenbank eingetragen werden. Die Handhabung des Files sollte ja in einem Model untergebracht sein. Bisher habe ich es so gehalten, dass ich für jede Datenbanktabelle ein eigenes Model erstellt habe.

    Jetzt habe ich aber als Datenquelle das CSV-File, die Daten die ich daraus auslese, sollen in mehrere unterschiedliche Datenbanktabellen eingetragen werden. Ich verwende dazu also mindestens 3 verschiedene Models. Jetzt zu meiner eigentlichen Frage: Soll ich den Datenaustausch zwischen den verschiedenen Models innerhalb des Controllers vornehmen? Oder im Model, dass das File ausliest Instanzen der DB-Models erstellen? Oder vielleicht sogar innerhalb einem Model mit verschiedenen Datenquellen arbeiten?

    Ich arbeite erst seit einigen Monaten mit MVC und bin noch nicht wirklich sattelfest genug, um zu sagen, welches hier das richtige Vorgehen ist. Was meint ihr dazu?

    Dank schon im Voraus,
    -Lukas

  • Welche Aufgaben vom Controller und welche vom Model übernommen werden ist zu einem gewissen Grad eine Glaubensfrage, es gibt da Vertreter verschiedener Richtungen.

    Für mich persönlich wäre das Aufgabe eines Controller, Models kommunizieren bei mir nicht direkt untereinander. Genauer gesagt haben Models bei mir in der Regel gar keine "Funktionalität", sondern dienen lediglich dem Vorhalten von Daten.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Da ich das bisher so gehalten habe werde ich wohl auch hier so vorgehen. Der Prozess wär dann ungefähr so:

    - Import-Controller ruft die Daten über das CSV Model ab.
    - Für jeden importierten Eintrag wird durch den Controller überprüft, welche Aktion (Insert/Update) benötigt wird
    - Die benötigten Informationen werden aus den DB Models abgerufen
    - Fertige Daten werden mit den entsprechenden Models in die Zieltabellen eingetragen.

    Dabei hat der Controller die volle Entscheidungsgewalt, so sollte es ja mwn auch sein. Kommt mir so am sinnvollsten vor. Danke für den Input =)